Ayuda en Como registrar Auditorias de Ciertas tablas (Usar Trigger o No?)

09/02/2006 - 17:01 por Developers | Informe spam
Amigos, necesito que por favor me orienten en este problema que tengo.
Haber.
Tengo esta estructura de Tabla llamado DetalleAlmacen.
Tabla DetalleAlmacen
Fec_Mov Datetime
Alm_Mov Char(2)
Doc_Mov Char(10)
Cod_Prod Char(8)
Cant_Mov Decimal(10,4)
y.. Otros campos adicionales

Data de ejemplo:
Fec_Mov Alm_Mov Doc_Mov Cod_Prod Cant_Mov
15/01/2005 02 001-12345 1111111 10
15/01/2005 02 005-85742 4545454 5
13/01/2005 10 001-41154 7454545 100
25/01/2005 02 001-17884 5457861 59

Necesito tener otra tabla parecida a la estructura anterior pero para
efectos de auditoria, es decir con esta estructura
Tabla DetalleAlmacenAud
Fec_Mov Datetime
Alm_Mov Char(2)
Doc_Mov Char(10)
Cod_Prod Char(8)
Cant_mov Decimal(10,4)
Fec_Oper Datetime
Tipo_Oper Char(1)
Usuario Char(10)

los Campos siguientes tendrian :
Fec_Oper = Dia que realizo la Transacción
Tipo_Oper= Tipo de Operacion Realizada ((I)nsert,(D)elete,(U)pdate,(R)ecuperacion)

Su data de esta tabla tendria asi:
Data de ejemplo:
Fec_Mov Alm_Mov Doc_Mov Cod_Prod Cant_Mov Fec_Oper Tipo_Oper
15/01/2005 02 001-12345 1111111 5 15/01/2005 I
15/01/2005 02 001-12345 1111111 10 18/01/2005 U
15/01/2005 02 005-85742 4545454 5 15/01/2005 I
13/01/2005 10 001-41154 7454545 20 13/01/2005 I
13/01/2005 10 001-41154 7454545 100 20/01/2005 U
25/01/2005 02 001-17884 5457861 59 25/01/2005 I

Esta data es mas detallada que la Data Original porque contiene todas las operaciones
realizadas con los documentos(Especie de Historial)

Entonces mi duda es Si usar Trigger (Insert,Delete,Update) para realizar esta tarea
o Programarlo manualmente mediante Store Procedure


Gracias

Developers - Dany Acosta

Preguntas similare

Leer las respuestas

#1 Maxi
09/02/2006 - 17:12 | Informe spam
Hola, si los efectos de una auditoria es saber que fue pasando con la data
en bien se produjo el cambio entonces yo usuaria triggers. Si lo pones en un
SP tienes el problema de que si por otro lado alguien actualiza algo (por ej
un paquete DTS) no se veria reflejada en la aplicacion :(


Salu2
Maxi [MVP SQL SERVER]
www.sqlgurus.org


"Developers" escribió en el mensaje
news:%
Amigos, necesito que por favor me orienten en este problema que tengo.
Haber.
Tengo esta estructura de Tabla llamado DetalleAlmacen.
Tabla DetalleAlmacen
Fec_Mov Datetime
Alm_Mov Char(2)
Doc_Mov Char(10)
Cod_Prod Char(8)
Cant_Mov Decimal(10,4)
y.. Otros campos adicionales

Data de ejemplo:
Fec_Mov Alm_Mov Doc_Mov Cod_Prod Cant_Mov
15/01/2005 02 001-12345 1111111 10
15/01/2005 02 005-85742 4545454 5
13/01/2005 10 001-41154 7454545 100
25/01/2005 02 001-17884 5457861 59

Necesito tener otra tabla parecida a la estructura anterior pero para
efectos de auditoria, es decir con esta estructura
Tabla DetalleAlmacenAud
Fec_Mov Datetime
Alm_Mov Char(2)
Doc_Mov Char(10)
Cod_Prod Char(8)
Cant_mov Decimal(10,4)
Fec_Oper Datetime
Tipo_Oper Char(1)
Usuario Char(10)

los Campos siguientes tendrian :
Fec_Oper = Dia que realizo la Transacción
Tipo_Oper= Tipo de Operacion Realizada
((I)nsert,(D)elete,(U)pdate,(R)ecuperacion)

Su data de esta tabla tendria asi:
Data de ejemplo:
Fec_Mov Alm_Mov Doc_Mov Cod_Prod Cant_Mov Fec_Oper
Tipo_Oper
15/01/2005 02 001-12345 1111111 5 15/01/2005 I
15/01/2005 02 001-12345 1111111 10 18/01/2005 U
15/01/2005 02 005-85742 4545454 5 15/01/2005 I
13/01/2005 10 001-41154 7454545 20 13/01/2005 I
13/01/2005 10 001-41154 7454545 100 20/01/2005 U
25/01/2005 02 001-17884 5457861 59 25/01/2005 I

Esta data es mas detallada que la Data Original porque contiene todas las
operaciones
realizadas con los documentos(Especie de Historial)

Entonces mi duda es Si usar Trigger (Insert,Delete,Update) para realizar
esta tarea
o Programarlo manualmente mediante Store Procedure


Gracias

Developers - Dany Acosta
Respuesta Responder a este mensaje
#2 Alfredo Novoa
09/02/2006 - 17:14 | Informe spam
On Thu, 09 Feb 2006 11:01:54 -0500, Developers
wrote:

Hola,

Tabla DetalleAlmacenAud
Fec_Mov Datetime
Alm_Mov Char(2)
Doc_Mov Char(10)
Cod_Prod Char(8)
Cant_mov Decimal(10,4)
Fec_Oper Datetime
Tipo_Oper Char(1)
Usuario Char(10)




Yo crearía solamente esta tabla y usaría una vista para enseñar la
estructura simplificada.


Saludos
Alfredo
Respuesta Responder a este mensaje
#3 carlos
09/02/2006 - 18:05 | Informe spam
hola,
Digo yo que, usando solo una tabla, te pierdes la información sobre
registros eliminados, no? Y en cuanto a los "updatados", no tienes el
historial, que supongo es lo que quiere.


"Alfredo Novoa" escribió en el mensaje
news:
On Thu, 09 Feb 2006 11:01:54 -0500, Developers
wrote:

Hola,

>Tabla DetalleAlmacenAud
> Fec_Mov Datetime
> Alm_Mov Char(2)
> Doc_Mov Char(10)
> Cod_Prod Char(8)
> Cant_mov Decimal(10,4)
> Fec_Oper Datetime
> Tipo_Oper Char(1)
> Usuario Char(10)


Yo crearía solamente esta tabla y usaría una vista para enseñar la
estructura simplificada.


Saludos
Alfredo
Respuesta Responder a este mensaje
#4 Alfredo Novoa
09/02/2006 - 18:43 | Informe spam
On Thu, 9 Feb 2006 18:05:29 +0100, "carlos" wrote:

hola,
Digo yo que, usando solo una tabla, te pierdes la información sobre
registros eliminados, no? Y en cuanto a los "updatados", no tienes el
historial, que supongo es lo que quiere.



No, por que en una tabla de historial nunca se borran los registros y
también tienes todas las versiones.

Obtener la tabla de registros actuales a partir de la de historial es
trivial usando una vista y eliminas un montón de información
reduntante y la preocupación de mantener las dos tablas sincronizadas.

Si usas DataTables en la aplicación, sería bastante fácil hacer que
generasen las SQL correspondientes para mantener la tabla de
historial.

Un delete en el DataTable se tendría que transformar en un insert en
el historial, y lo mismo con un update.

Para el campo fecha se puede usar un valor por defecto, lo que
simplifica las sentencias SQL.

Saludos
Alfredo
Respuesta Responder a este mensaje
#5 Developers
09/02/2006 - 20:02 | Informe spam
Pero de esta manera se tendria que ver cual fue la ultima modificacion hecha al documento




Alfredo Novoa escribió:
On Thu, 9 Feb 2006 18:05:29 +0100, "carlos" wrote:


hola,
Digo yo que, usando solo una tabla, te pierdes la información sobre
registros eliminados, no? Y en cuanto a los "updatados", no tienes el
historial, que supongo es lo que quiere.




No, por que en una tabla de historial nunca se borran los registros y
también tienes todas las versiones.

Obtener la tabla de registros actuales a partir de la de historial es
trivial usando una vista y eliminas un montón de información
reduntante y la preocupación de mantener las dos tablas sincronizadas.

Si usas DataTables en la aplicación, sería bastante fácil hacer que
generasen las SQL correspondientes para mantener la tabla de
historial.

Un delete en el DataTable se tendría que transformar en un insert en
el historial, y lo mismo con un update.

Para el campo fecha se puede usar un valor por defecto, lo que
simplifica las sentencias SQL.

Saludos
Alfredo


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida