Realizar Auditoría en SQL Server 2000

09/09/2004 - 13:21 por Lara | Informe spam
Hola grupo!!

Tengo que realizar una aplicación sobre pólizas de seguros y guardar de
alguna forma todos los cambios que se van produciendo, de tal forma que
cuando un usuario quiera consultar qué datos había en un momento
determinado, lo pueda hacer. Ya envié un mensaje a este foro, me indicásteis
varias formas de mantener un histórico, pero hay una forma que se le ha
ocurrido a una persona del equipo de trabajo, que no sé si es posible; yo
pregunto... por si acaso... ¿Se puede realizar la Auditoría haciendo uso de
las copias de seguridad transaccionales? Es decir,... de la misma forma que
yo puedo hacer el Restore de una base de datos, en un momento determinado,
se podría automatizar este proceso para que me generara una base de datos
con los datos que tenía un día específico?? Supongo, que estas bases de
datos se eliminarían nada más terminar la consulta, y cada vez que un
usuario quisiera ver los datos en una fecha determinada, se tendría que
recuperar la base de datos para dicha fecha... Estoy liándome? hay alguna
idea parecida que pueda llevarse a cabo?

Muchísimas gracias!
Lara

Preguntas similare

Leer las respuestas

#1 Gustavo Larriera [MVP]
09/09/2004 - 15:31 | Informe spam
Personalmente no creo sea la solución adecuada para ese problema. En mi
opinión almacenaría los datos históricos mediante triggers.

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.
"Lara" wrote in message
news:
Hola grupo!!

Tengo que realizar una aplicación sobre pólizas de seguros y guardar de
alguna forma todos los cambios que se van produciendo, de tal forma que
cuando un usuario quiera consultar qué datos había en un momento
determinado, lo pueda hacer. Ya envié un mensaje a este foro, me
indicásteis
varias formas de mantener un histórico, pero hay una forma que se le ha
ocurrido a una persona del equipo de trabajo, que no sé si es posible; yo
pregunto... por si acaso... ¿Se puede realizar la Auditoría haciendo uso
de
las copias de seguridad transaccionales? Es decir,... de la misma forma
que
yo puedo hacer el Restore de una base de datos, en un momento determinado,
se podría automatizar este proceso para que me generara una base de datos
con los datos que tenía un día específico?? Supongo, que estas bases de
datos se eliminarían nada más terminar la consulta, y cada vez que un
usuario quisiera ver los datos en una fecha determinada, se tendría que
recuperar la base de datos para dicha fecha... Estoy liándome? hay alguna
idea parecida que pueda llevarse a cabo?

Muchísimas gracias!
Lara




Respuesta Responder a este mensaje
#2 MAURICIO
09/09/2004 - 16:54 | Informe spam
Si lo que deseas es guardar la informacion historica de
una tabla, te recomiendo que en otra BD generes una tabla
con la misma estructura le añadas los campos: OPERACION
QUE REALIZAS, FECHA DE ACTUALIZACION y USUARIO.
Luego en la tabla original crea un trigger que escriba a
esta nueva tabla.
Mas o menos los triggers serian los siguientes, usalos de
guia, yo tuve que usar esto en una empresa en la cual
requeria tener conocimiento de los precios de los
productos.

EXITOS MAURICIO

create trigger Oferta_td on OFERTA
for DELETE
as

begin
declare @numrows int,
@nullcnt int,
@validcnt int,
@insC_CORR_ARTI int,
@insF_FECH_INIC_OFER Fecha,
@insC_CODI_AMBI_OFER char(3),
@errno int,
@errmsg varchar(255)


select @numrows = @@rowcount

/* Codigo para actualizar tablas de log en la BD
Log_Oficina */
/* Para adicionar en trigger de
DELETE */


DECLARE @c_user_id char(12) ,
@c_corr_log int
SELECT @c_user_id = l.name
FROM master..sysprocesses p, master..syslogins l
WHERE p.spid = @@spid
AND l.suid = p.suid

SELECT @c_corr_log = n_valo_actu
FROM t_correlativo
WHERE c_codi_sist_corr = 'SCI'
AND c_iden_corr = '14'

INSERT Log_Oficina..OFERTA_log1
SELECT d.C_CORR_ARTI ,
d.F_FECH_INIC_OFER ,
d.C_CODI_AMBI_OFER,
@c_corr_log,
null,
d.C_CODI_PROV,
d.F_FECH_TERM,
d.I_PREC_OFER,
d.C_CODI_TIPO_OFER,
d.C_CODI_TIPO_AVIS,
d.D_COME_OFER,
d.C_NUME_CONT,
d.S_OFER_CABE,
d.S_OFER_DEGU,
d.S_OFER_IMPU,
d.D_INDI_OFER,
d.C_CODI_TIPO_VINE,
d.D_TEXT_VINE_GENE,
d.I_PREC_NORM,
d.I_PREC_REFE,
d.C_CODI_MONE_VENT,
'D',
getdate(),
@c_user_id
FROM deleted d

IF @@error != 0
BEGIN
SELECT @errno = 50103 ,
@errmsg = 'No se pudo actualizar log de
Oferta'
GOTO error
END



return
error:
Rollback Transaction
Raiserror @errno @errmsg
end
Return

GO


Trigger para Insert



/* Codigo para actualizar tablas de log en la BD
Log_Oficina */
/* Para adicionar en trigger de
INSERT */


DECLARE @c_user_id char(12) ,
@c_corr_log int
SELECT @c_user_id = l.name
FROM master..sysprocesses p, master..syslogins l
WHERE p.spid = @@spid
AND l.suid = p.suid

SELECT @c_corr_log = n_valo_actu
FROM t_correlativo
WHERE c_codi_sist_corr = 'SCI'
AND c_iden_corr = '14'


INSERT Log_Oficina..OFERTA_log1
SELECT i.C_CORR_ARTI ,
i.F_FECH_INIC_OFER ,

i.C_CODI_AMBI_OFER,
@c_corr_log,
null,
i.C_CODI_PROV ,
i.F_FECH_TERM ,
i.I_PREC_OFER ,
i.C_CODI_TIPO_OFER ,
i.C_CODI_TIPO_AVIS ,
i.D_COME_OFER ,
i.C_NUME_CONT ,
i.S_OFER_CABE ,
i.S_OFER_DEGU ,
i.S_OFER_IMPU ,
i.D_INDI_OFER ,
i.C_CODI_TIPO_VINE ,
i.D_TEXT_VINE_GENE ,
i.I_PREC_NORM ,
i.I_PREC_REFE ,
i.C_CODI_MONE_VENT,
'I',
getdate(),
@c_user_id
FROM inserted i


IF @@error != 0
BEGIN
SELECT @errno = 50101 ,
@errmsg = 'No se pudo actualizar log de
Oferta'
GOTO error
END

create trigger T_Tipo_Oferta_tu on T_TIPO_OFERTA
for UPDATE
as
/* UPDATE trigger on T_TIPO_OFERTA */
begin
declare @numrows int,
@nullcnt int,
@validcnt int,
@insC_CODI_TIPO_OFER char(2),
@errno int,
@errmsg varchar(255)

select @numrows = @@rowcount


if
update(C_CODI_TIPO_OFER)
begin
select @errno = 60005,
@errmsg = 'No puede MODIFICAR Clave de "Tipo
de Oferta" por politica de BD.'
goto error
end


/* Adiciona para actualizacion de LOGS */

DECLARE @c_user_id char(12) ,
@c_corr_log int
SELECT @c_user_id= l.name
FROM master..sysprocesses p, master..syslogins l
WHERE p.spid = @@spid
AND l.suid = p.suid

SELECT @c_corr_log = n_valo_actu
FROM t_correlativo
WHERE c_codi_sist_corr = 'SCI'
AND c_iden_corr = '14'

INSERT Log_Oficina..T_TIPO_OFERTA_log1
SELECT i.C_CODI_TIPO_OFER,
@c_corr_log ,
null ,
i.D_DESC_TIPO_OFER ,
'U',
getdate(),
@c_user_id
FROM inserted i

IF @@error != 0
BEGIN
SELECT @errno = 50102 ,
@errmsg = 'No se pudo actualizar log de
Tipo de Oferta'
GOTO error
END

return
error:
Rollback Transaction
Raiserror @errno @errmsg
end




Hola grupo!!

Tengo que realizar una aplicación sobre pólizas de


seguros y guardar de
alguna forma todos los cambios que se van produciendo,


de tal forma que
cuando un usuario quiera consultar qué datos había en un


momento
determinado, lo pueda hacer. Ya envié un mensaje a este


foro, me indicásteis
varias formas de mantener un histórico, pero hay una


forma que se le ha
ocurrido a una persona del equipo de trabajo, que no sé


si es posible; yo
pregunto... por si acaso... ¿Se puede realizar la


Auditoría haciendo uso de
las copias de seguridad transaccionales? Es decir,... de


la misma forma que
yo puedo hacer el Restore de una base de datos, en un


momento determinado,
se podría automatizar este proceso para que me generara


una base de datos
con los datos que tenía un día específico?? Supongo, que


estas bases de
datos se eliminarían nada más terminar la consulta, y


cada vez que un
usuario quisiera ver los datos en una fecha determinada,


se tendría que
recuperar la base de datos para dicha fecha... Estoy


liándome? hay alguna
idea parecida que pueda llevarse a cabo?

Muchísimas gracias!
Lara




.

Respuesta Responder a este mensaje
#3 Lara
09/09/2004 - 17:28 | Informe spam
Así es como había decidido hacerlo después de leer las opiniones de
compañeros del grupo; duplicando tablas con la misma estructura que las
originales y mediante triggers guardaría todas las modificaciones.
Simplemente preguntaba esto del Restore porque se le ha ocurrido a una
persona que está en el proyecto... y queríamos saber si era posible, o si
era una buena idea.

Gracias a todos!!!
Lara

"Gustavo Larriera [MVP]" escribió en el mensaje
news:%23hoR%
Personalmente no creo sea la solución adecuada para ese problema. En mi
opinión almacenaría los datos históricos mediante triggers.

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.
"Lara" wrote in message
news:
> Hola grupo!!
>
> Tengo que realizar una aplicación sobre pólizas de seguros y guardar de
> alguna forma todos los cambios que se van produciendo, de tal forma que
> cuando un usuario quiera consultar qué datos había en un momento
> determinado, lo pueda hacer. Ya envié un mensaje a este foro, me
> indicásteis
> varias formas de mantener un histórico, pero hay una forma que se le ha
> ocurrido a una persona del equipo de trabajo, que no sé si es posible;


yo
> pregunto... por si acaso... ¿Se puede realizar la Auditoría haciendo uso
> de
> las copias de seguridad transaccionales? Es decir,... de la misma forma
> que
> yo puedo hacer el Restore de una base de datos, en un momento


determinado,
> se podría automatizar este proceso para que me generara una base de


datos
> con los datos que tenía un día específico?? Supongo, que estas bases de
> datos se eliminarían nada más terminar la consulta, y cada vez que un
> usuario quisiera ver los datos en una fecha determinada, se tendría que
> recuperar la base de datos para dicha fecha... Estoy liándome? hay


alguna
> idea parecida que pueda llevarse a cabo?
>
> Muchísimas gracias!
> Lara
>
>
>
>


Respuesta Responder a este mensaje
#4 Víctor Rafael Bocanegra Arias
09/09/2004 - 17:45 | Informe spam
Tu idea es buena MAURICIO pero tus triggers solo servirian para
actualizaciones de un registro a la vez, si se actualizacen mas de un
registro tu informacion no seria consistente :(

Salu2

Victor Rafael Bocanegra Arias
Lima, Peru


"MAURICIO" escribió en el mensaje
news:8d1d01c4967c$f3e10ce0$
Si lo que deseas es guardar la informacion historica de
una tabla, te recomiendo que en otra BD generes una tabla
con la misma estructura le añadas los campos: OPERACION
QUE REALIZAS, FECHA DE ACTUALIZACION y USUARIO.
Luego en la tabla original crea un trigger que escriba a
esta nueva tabla.
Mas o menos los triggers serian los siguientes, usalos de
guia, yo tuve que usar esto en una empresa en la cual
requeria tener conocimiento de los precios de los
productos.

EXITOS MAURICIO

create trigger Oferta_td on OFERTA
for DELETE
as

begin
declare @numrows int,
@nullcnt int,
@validcnt int,
@insC_CORR_ARTI int,
@insF_FECH_INIC_OFER Fecha,
@insC_CODI_AMBI_OFER char(3),
@errno int,
@errmsg varchar(255)


select @numrows = @@rowcount

/* Codigo para actualizar tablas de log en la BD
Log_Oficina */
/* Para adicionar en trigger de
DELETE */


DECLARE @c_user_id char(12) ,
@c_corr_log int
SELECT @c_user_id = l.name
FROM master..sysprocesses p, master..syslogins l
WHERE p.spid = @@spid
AND l.suid = p.suid

SELECT @c_corr_log = n_valo_actu
FROM t_correlativo
WHERE c_codi_sist_corr = 'SCI'
AND c_iden_corr = '14'

INSERT Log_Oficina..OFERTA_log1
SELECT d.C_CORR_ARTI ,
d.F_FECH_INIC_OFER ,
d.C_CODI_AMBI_OFER,
@c_corr_log,
null,
d.C_CODI_PROV,
d.F_FECH_TERM,
d.I_PREC_OFER,
d.C_CODI_TIPO_OFER,
d.C_CODI_TIPO_AVIS,
d.D_COME_OFER,
d.C_NUME_CONT,
d.S_OFER_CABE,
d.S_OFER_DEGU,
d.S_OFER_IMPU,
d.D_INDI_OFER,
d.C_CODI_TIPO_VINE,
d.D_TEXT_VINE_GENE,
d.I_PREC_NORM,
d.I_PREC_REFE,
d.C_CODI_MONE_VENT,
'D',
getdate(),
@c_user_id
FROM deleted d

IF @@error != 0
BEGIN
SELECT @errno = 50103 ,
@errmsg = 'No se pudo actualizar log de
Oferta'
GOTO error
END



return
error:
Rollback Transaction
Raiserror @errno @errmsg
end
Return

GO


Trigger para Insert



/* Codigo para actualizar tablas de log en la BD
Log_Oficina */
/* Para adicionar en trigger de
INSERT */


DECLARE @c_user_id char(12) ,
@c_corr_log int
SELECT @c_user_id = l.name
FROM master..sysprocesses p, master..syslogins l
WHERE p.spid = @@spid
AND l.suid = p.suid

SELECT @c_corr_log = n_valo_actu
FROM t_correlativo
WHERE c_codi_sist_corr = 'SCI'
AND c_iden_corr = '14'


INSERT Log_Oficina..OFERTA_log1
SELECT i.C_CORR_ARTI ,
i.F_FECH_INIC_OFER ,

i.C_CODI_AMBI_OFER,
@c_corr_log,
null,
i.C_CODI_PROV ,
i.F_FECH_TERM ,
i.I_PREC_OFER ,
i.C_CODI_TIPO_OFER ,
i.C_CODI_TIPO_AVIS ,
i.D_COME_OFER ,
i.C_NUME_CONT ,
i.S_OFER_CABE ,
i.S_OFER_DEGU ,
i.S_OFER_IMPU ,
i.D_INDI_OFER ,
i.C_CODI_TIPO_VINE ,
i.D_TEXT_VINE_GENE ,
i.I_PREC_NORM ,
i.I_PREC_REFE ,
i.C_CODI_MONE_VENT,
'I',
getdate(),
@c_user_id
FROM inserted i


IF @@error != 0
BEGIN
SELECT @errno = 50101 ,
@errmsg = 'No se pudo actualizar log de
Oferta'
GOTO error
END

create trigger T_Tipo_Oferta_tu on T_TIPO_OFERTA
for UPDATE
as
/* UPDATE trigger on T_TIPO_OFERTA */
begin
declare @numrows int,
@nullcnt int,
@validcnt int,
@insC_CODI_TIPO_OFER char(2),
@errno int,
@errmsg varchar(255)

select @numrows = @@rowcount


if
update(C_CODI_TIPO_OFER)
begin
select @errno = 60005,
@errmsg = 'No puede MODIFICAR Clave de "Tipo
de Oferta" por politica de BD.'
goto error
end


/* Adiciona para actualizacion de LOGS */

DECLARE @c_user_id char(12) ,
@c_corr_log int
SELECT @c_user_id= l.name
FROM master..sysprocesses p, master..syslogins l
WHERE p.spid = @@spid
AND l.suid = p.suid

SELECT @c_corr_log = n_valo_actu
FROM t_correlativo
WHERE c_codi_sist_corr = 'SCI'
AND c_iden_corr = '14'

INSERT Log_Oficina..T_TIPO_OFERTA_log1
SELECT i.C_CODI_TIPO_OFER,
@c_corr_log ,
null ,
i.D_DESC_TIPO_OFER ,
'U',
getdate(),
@c_user_id
FROM inserted i

IF @@error != 0
BEGIN
SELECT @errno = 50102 ,
@errmsg = 'No se pudo actualizar log de
Tipo de Oferta'
GOTO error
END

return
error:
Rollback Transaction
Raiserror @errno @errmsg
end




Hola grupo!!

Tengo que realizar una aplicación sobre pólizas de


seguros y guardar de
alguna forma todos los cambios que se van produciendo,


de tal forma que
cuando un usuario quiera consultar qué datos había en un


momento
determinado, lo pueda hacer. Ya envié un mensaje a este


foro, me indicásteis
varias formas de mantener un histórico, pero hay una


forma que se le ha
ocurrido a una persona del equipo de trabajo, que no sé


si es posible; yo
pregunto... por si acaso... ¿Se puede realizar la


Auditoría haciendo uso de
las copias de seguridad transaccionales? Es decir,... de


la misma forma que
yo puedo hacer el Restore de una base de datos, en un


momento determinado,
se podría automatizar este proceso para que me generara


una base de datos
con los datos que tenía un día específico?? Supongo, que


estas bases de
datos se eliminarían nada más terminar la consulta, y


cada vez que un
usuario quisiera ver los datos en una fecha determinada,


se tendría que
recuperar la base de datos para dicha fecha... Estoy


liándome? hay alguna
idea parecida que pueda llevarse a cabo?

Muchísimas gracias!
Lara




.

Respuesta Responder a este mensaje
#5 Adrian D. Garcia
09/09/2004 - 19:40 | Informe spam
Quizas aqui exista un error de conceptos. Creo que lo que Lara se referia es
a una base de datos de historicos con "fotos" de los datos a una fecha
determinada.

Saludos
Adrian D. Garcia
MCSD
NDSoft Consultoria y Desarrollo

"Gustavo Larriera [MVP]" wrote in message
news:%23hoR%
Personalmente no creo sea la solución adecuada para ese problema. En mi
opinión almacenaría los datos históricos mediante triggers.

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.
"Lara" wrote in message
news:
> Hola grupo!!
>
> Tengo que realizar una aplicación sobre pólizas de seguros y guardar de
> alguna forma todos los cambios que se van produciendo, de tal forma que
> cuando un usuario quiera consultar qué datos había en un momento
> determinado, lo pueda hacer. Ya envié un mensaje a este foro, me
> indicásteis
> varias formas de mantener un histórico, pero hay una forma que se le ha
> ocurrido a una persona del equipo de trabajo, que no sé si es posible;


yo
> pregunto... por si acaso... ¿Se puede realizar la Auditoría haciendo uso
> de
> las copias de seguridad transaccionales? Es decir,... de la misma forma
> que
> yo puedo hacer el Restore de una base de datos, en un momento


determinado,
> se podría automatizar este proceso para que me generara una base de


datos
> con los datos que tenía un día específico?? Supongo, que estas bases de
> datos se eliminarían nada más terminar la consulta, y cada vez que un
> usuario quisiera ver los datos en una fecha determinada, se tendría que
> recuperar la base de datos para dicha fecha... Estoy liándome? hay


alguna
> idea parecida que pueda llevarse a cabo?
>
> Muchísimas gracias!
> Lara
>
>
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida