Discussion:
Borrar todos los trigger
(demasiado antiguo para responder)
Javier Perez <""highsoft\"@">
2005-02-18 15:34:48 UTC
Permalink
Hola, tengo un grave problema
Alguien sabe como borrar todos los trigger de las tablas?


Gracias


Javier Perez
Maxi
2005-02-18 16:06:52 UTC
Permalink
Hola se me ocurre que hagas un cursor (sii yo tambien uso cursores pero para
estas cosas ;-)

Donde primer de la tabla sysobjects levantes los nombres de los Trigger y
luego con Sqldinamico los borres
(sp_executesql)
--
--------------------------
Salu2
Maxi
Post by Javier Perez <""highsoft\"@">
Hola, tengo un grave problema
Alguien sabe como borrar todos los trigger de las tablas?
Gracias
Javier Perez
Alejandro Mesa
2005-02-18 16:09:01 UTC
Permalink
Javier,

Puedes usar el siguiente script, pero quisiera saber por que quieres hacer
esto?. Pudieras desabilitar todos los triggers en todas las tablas para
revisar cualquier error, y una vez solucionado podrias abilitarlos de nuevo.

Ejemplo (desabilitar - abilitar):

declare @tn sysname
declare @sql nvarchar(4000)

declare tr_cursor cursor
local
fast_forward
for
select distinct
object_name(o.parent_obj)
from
sysobjects o
where
objectproperty(o.[id], 'IsTrigger') = 1
AND objectproperty(o.[id], 'IsMSShipped') = 0

open tr_cursor

while 1 = 1
begin
fetch next from tr_cursor into @tn

if @@error <> 0 or @@fetch_status <> 0 break

set @sql = N'alter table ' + quotename(@tn) + N' disable trigger all'
raiserror('%s', 10, 1, @sql) with nowait
execute sp_executesql @sql
end

close tr_cursor
deallocate tr_cursor
go

declare @tn sysname
declare @sql nvarchar(4000)

declare tr_cursor cursor
local
fast_forward
for
select distinct
object_name(o.parent_obj)
from
sysobjects o
where
objectproperty(o.[id], 'IsTrigger') = 1
AND objectproperty(o.[id], 'IsMSShipped') = 0

open tr_cursor

while 1 = 1
begin
fetch next from tr_cursor into @tn

if @@error <> 0 or @@fetch_status <> 0 break

set @sql = N'alter table ' + quotename(@tn) + N' enable trigger all'
raiserror('%s', 10, 1, @sql) with nowait
execute sp_executesql @sql
end

close tr_cursor
deallocate tr_cursor
go

Ejemplo (eliminar):

declare @trn sysname
declare @sql nvarchar(4000)

declare tr_cursor cursor
local
fast_forward
for
select
o.[name]
from
sysobjects o
where
objectproperty(o.[id], 'IsTrigger') = 1
AND objectproperty(o.[id], 'IsMSShipped') = 0

open tr_cursor

while 1 = 1
begin
fetch next from tr_cursor into @trn

if @@error <> 0 or @@fetch_status <> 0 break

set @sql = N'drop trigger ' + @trn
raiserror('%s', 10, 1, @sql) with nowait
execute sp_executesql @sql
end

close tr_cursor
deallocate tr_cursor
go


AMB
Post by Javier Perez <""highsoft\"@">
Hola, tengo un grave problema
Alguien sabe como borrar todos los trigger de las tablas?
Gracias
Javier Perez
"@" <""highsoft\"@">
2005-02-18 16:56:21 UTC
Permalink
Muchachos:
Les trato de comentar como es un poco la historia, tenemos dos
servidores SQL SERVER 2000 SP3 replicados entre si y a uno se le rompio
el disco duro, el tema es que restauramos el backup que teniamos y no se
pudieron recuperar las replicas, jobs, etc. entonces debemos crear las
replicas de nuevo. Pero una vez que restauramos la BBDD se presentaron
problemas del tipo "invalid object name sysmergearticles", entonces
averigue que el problema eran los trigger que genera automaticamente
cada transaccion para luego realizar las replicas. Yo borre estos
trigger y el error desaparecio, pero entre una por una a las tablas, por
supuesto antes que ustedes me propusiran algunas de las soluciones.

En resumen, alguno de ustedes conoce alguna herramienta que permita
restaurar backup si perder la replicas ? Eso seria muy util.

O, alguien se le ocurre si este proceso de restaurar y rehacer replicas,
jobs, etc, se puede hacer de otra forma con resultados buenos.


Gracias a todos.

Un abrazo.


Javier Perez
Post by Alejandro Mesa
Javier,
Puedes usar el siguiente script, pero quisiera saber por que quieres hacer
esto?. Pudieras desabilitar todos los triggers en todas las tablas para
revisar cualquier error, y una vez solucionado podrias abilitarlos de nuevo.
declare tr_cursor cursor
local
fast_forward
for
select distinct
object_name(o.parent_obj)
from
sysobjects o
where
objectproperty(o.[id], 'IsTrigger') = 1
AND objectproperty(o.[id], 'IsMSShipped') = 0
open tr_cursor
while 1 = 1
begin
end
close tr_cursor
deallocate tr_cursor
go
declare tr_cursor cursor
local
fast_forward
for
select distinct
object_name(o.parent_obj)
from
sysobjects o
where
objectproperty(o.[id], 'IsTrigger') = 1
AND objectproperty(o.[id], 'IsMSShipped') = 0
open tr_cursor
while 1 = 1
begin
end
close tr_cursor
deallocate tr_cursor
go
declare tr_cursor cursor
local
fast_forward
for
select
o.[name]
from
sysobjects o
where
objectproperty(o.[id], 'IsTrigger') = 1
AND objectproperty(o.[id], 'IsMSShipped') = 0
open tr_cursor
while 1 = 1
begin
end
close tr_cursor
deallocate tr_cursor
go
AMB
Post by Javier Perez <""highsoft\"@">
Hola, tengo un grave problema
Alguien sabe como borrar todos los trigger de las tablas?
Gracias
Javier Perez
Alejandro Mesa
2005-02-18 17:17:04 UTC
Permalink
Javier,

Creo que aun falta informacion que deberiamos saber para dar una mejor
respuesta.

Que tipo de replicacion estas usando?
Que lado de la replica fue la que se rompio?
Estan replicando todas las tablas?
Por que no crearon los triggers con la clausula NOT FOR REPLICATION?
Estan haciendo backup de la base MSDB? (esto es super importante)
Que posibilidades tienen de implementar mirroring atraves de raid 1 o raid 5?

Contesta estas preguntas y te ayudaran a tener una idea de que camino tomar
para seleccionar un plan de recuperacion en caso de desastre.


AMB
Post by "@" <""highsoft\"@">
Les trato de comentar como es un poco la historia, tenemos dos
servidores SQL SERVER 2000 SP3 replicados entre si y a uno se le rompio
el disco duro, el tema es que restauramos el backup que teniamos y no se
pudieron recuperar las replicas, jobs, etc. entonces debemos crear las
replicas de nuevo. Pero una vez que restauramos la BBDD se presentaron
problemas del tipo "invalid object name sysmergearticles", entonces
averigue que el problema eran los trigger que genera automaticamente
cada transaccion para luego realizar las replicas. Yo borre estos
trigger y el error desaparecio, pero entre una por una a las tablas, por
supuesto antes que ustedes me propusiran algunas de las soluciones.
En resumen, alguno de ustedes conoce alguna herramienta que permita
restaurar backup si perder la replicas ? Eso seria muy util.
O, alguien se le ocurre si este proceso de restaurar y rehacer replicas,
jobs, etc, se puede hacer de otra forma con resultados buenos.
Gracias a todos.
Un abrazo.
Javier Perez
Post by Alejandro Mesa
Javier,
Puedes usar el siguiente script, pero quisiera saber por que quieres hacer
esto?. Pudieras desabilitar todos los triggers en todas las tablas para
revisar cualquier error, y una vez solucionado podrias abilitarlos de nuevo.
declare tr_cursor cursor
local
fast_forward
for
select distinct
object_name(o.parent_obj)
from
sysobjects o
where
objectproperty(o.[id], 'IsTrigger') = 1
AND objectproperty(o.[id], 'IsMSShipped') = 0
open tr_cursor
while 1 = 1
begin
end
close tr_cursor
deallocate tr_cursor
go
declare tr_cursor cursor
local
fast_forward
for
select distinct
object_name(o.parent_obj)
from
sysobjects o
where
objectproperty(o.[id], 'IsTrigger') = 1
AND objectproperty(o.[id], 'IsMSShipped') = 0
open tr_cursor
while 1 = 1
begin
end
close tr_cursor
deallocate tr_cursor
go
declare tr_cursor cursor
local
fast_forward
for
select
o.[name]
from
sysobjects o
where
objectproperty(o.[id], 'IsTrigger') = 1
AND objectproperty(o.[id], 'IsMSShipped') = 0
open tr_cursor
while 1 = 1
begin
end
close tr_cursor
deallocate tr_cursor
go
AMB
Post by Javier Perez <""highsoft\"@">
Hola, tengo un grave problema
Alguien sabe como borrar todos los trigger de las tablas?
Gracias
Javier Perez
"@" <""highsoft\"@">
2005-02-18 17:42:34 UTC
Permalink
Lamentablemente algunos puntos importantes que mencionas no se tuvieron
en cuenta.

Que tipo de replicacion estas usando?
Estoy usando el tipo MERGE

Que lado de la replica fue la que se rompio?
La del lado del publicador / distribuidor

Estan replicando todas las tablas?
No solamente alguna


Por que no crearon los triggers con la clausula NOT FOR REPLICATION?
No conocia esa opcion al momento de la creacion.

Que posibilidades tienen de implementar mirroring atraves de raid 1 o
raid 5?
Lo estamos evaluando ya que no deseamos pasar por esto nuevamente.


Gracias a todos por su orientacion y ayuda.


Saludos



Javier
Post by Alejandro Mesa
Javier,
Creo que aun falta informacion que deberiamos saber para dar una mejor
respuesta.
Que tipo de replicacion estas usando?
Que lado de la replica fue la que se rompio?
Estan replicando todas las tablas?
Por que no crearon los triggers con la clausula NOT FOR REPLICATION?
Estan haciendo backup de la base MSDB? (esto es super importante)
Que posibilidades tienen de implementar mirroring atraves de raid 1 o raid 5?
Contesta estas preguntas y te ayudaran a tener una idea de que camino tomar
para seleccionar un plan de recuperacion en caso de desastre.
AMB
Post by "@" <""highsoft\"@">
Les trato de comentar como es un poco la historia, tenemos dos
servidores SQL SERVER 2000 SP3 replicados entre si y a uno se le rompio
el disco duro, el tema es que restauramos el backup que teniamos y no se
pudieron recuperar las replicas, jobs, etc. entonces debemos crear las
replicas de nuevo. Pero una vez que restauramos la BBDD se presentaron
problemas del tipo "invalid object name sysmergearticles", entonces
averigue que el problema eran los trigger que genera automaticamente
cada transaccion para luego realizar las replicas. Yo borre estos
trigger y el error desaparecio, pero entre una por una a las tablas, por
supuesto antes que ustedes me propusiran algunas de las soluciones.
En resumen, alguno de ustedes conoce alguna herramienta que permita
restaurar backup si perder la replicas ? Eso seria muy util.
O, alguien se le ocurre si este proceso de restaurar y rehacer replicas,
jobs, etc, se puede hacer de otra forma con resultados buenos.
Gracias a todos.
Un abrazo.
Javier Perez
Post by Alejandro Mesa
Javier,
Puedes usar el siguiente script, pero quisiera saber por que quieres hacer
esto?. Pudieras desabilitar todos los triggers en todas las tablas para
revisar cualquier error, y una vez solucionado podrias abilitarlos de nuevo.
declare tr_cursor cursor
local
fast_forward
for
select distinct
object_name(o.parent_obj)
from
sysobjects o
where
objectproperty(o.[id], 'IsTrigger') = 1
AND objectproperty(o.[id], 'IsMSShipped') = 0
open tr_cursor
while 1 = 1
begin
end
close tr_cursor
deallocate tr_cursor
go
declare tr_cursor cursor
local
fast_forward
for
select distinct
object_name(o.parent_obj)
from
sysobjects o
where
objectproperty(o.[id], 'IsTrigger') = 1
AND objectproperty(o.[id], 'IsMSShipped') = 0
open tr_cursor
while 1 = 1
begin
end
close tr_cursor
deallocate tr_cursor
go
declare tr_cursor cursor
local
fast_forward
for
select
o.[name]
from
sysobjects o
where
objectproperty(o.[id], 'IsTrigger') = 1
AND objectproperty(o.[id], 'IsMSShipped') = 0
open tr_cursor
while 1 = 1
begin
end
close tr_cursor
deallocate tr_cursor
go
AMB
Post by Javier Perez <""highsoft\"@">
Hola, tengo un grave problema
Alguien sabe como borrar todos los trigger de las tablas?
Gracias
Javier Perez
Gustavo Larriera [MVP]
2005-02-18 17:21:08 UTC
Permalink
Para respaldar tus configuraciones de replicación debes hacer BACKUP de
la base del sistema Distribution.

--
Gustavo Larriera, MVP
Uruguay LatAm
http://sqljunkies.com/weblog/gux/
--
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and
confers no rights.
--
Post by "@" <""highsoft\"@">
En resumen, alguno de ustedes conoce alguna herramienta que permita
restaurar backup si perder la replicas ? Eso seria muy util.
O, alguien se le ocurre si este proceso de restaurar y rehacer replicas,
qwalgrande
2005-02-18 16:08:07 UTC
Permalink
Hola.

Se borran de uno en uno... Para listar todos los triggers de una base de
datos puedes usar la consulta:

select * from sysobjects where type = 'TR'

Pero ten cuidado con ello. Antes de borrar nada, guárdate un backup. Por
otra parte, además de borrarlos también tienes la opción de deshabilitarlos,
así puedes testear lo que necesitas con un método algo menos agresivo. Para
una tabla dada, sería:

alter table MiTabla disable trigger all

También puedes deshabilitar sólo uno. Para volver a habilitarlos, en lugar
de disable, enable.
--
qwalgrande


"Javier Perez" <""highsoft\"@***@softhome.net"> wrote in message news:***@TK2MSFTNGP10.phx.gbl...
Hola, tengo un grave problema
Alguien sabe como borrar todos los trigger de las tablas?


Gracias


Javier Perez
J Lara
2005-02-18 16:37:03 UTC
Permalink
mmm.. que este no es el ultimo de los casos.. bueno, asi me dijero.
yo solo una vez me vi en la necesidad de inhabilitar uno pero no batalle mucho
con wsql lo dropie, claro deje abierta la pantalla para luego volverlo a
guardar
igual...
Post by Javier Perez <""highsoft\"@">
Hola, tengo un grave problema
Alguien sabe como borrar todos los trigger de las tablas?
Gracias
Javier Perez
Loading...