Cómo registrar los cambios realizados en una tabla SQL SERVER 2008 ?

Es común tratar de monitorear los cambios en una o varias tablas de bases de datos SQL Server. 


Existen varias formas de detectar los datos insertados, borrados y actualizados en una base de datos en SQL Server.


Muchas veces la gente desea ver los cambios realizados en una tabla. Uno podría monitorear los comandos insert, update, delete usando el profiler, pero no podría ver los valores antiguos. Además es algo complicado filtrar los valores monitoreados del SQL profiler.

Otra alternativa que se usa para verificar cambios es crear un database snapshot. El snapshot obtiene fotos de la base de datos y mediante consultas se podría comparar la tabla actual con respecto al snapshot. Pero para eso habría que crear consultas comparativas.

Para subsanar estos problemas SQL Server 2008 viene con Change data capture (captura de datos de cambio). Change data capture es una nueva característica de SQL Server 2008 para monitorear los cambios tanto en el objeto (por ejemplo agregar, borrar o cambiar columnas en una tabla) como en los datos.

Para que el Capturador de cambio de datos funcione usted debe tener:
El servicio del agente de SQL Server iniciado.
Una base de datos con una tabla.


Figura 1. Inicie el agente SQL

Una vez que cumple los requisitos, lo que usted debe hacer es habilitar el capturador de datos:
exec sys.sp_cdc_enable_db
Se van a crear nuevas tablas de sistema que contienen información de los cambios del sistema:

Ahora, si usted desea monitorear una tabla específica, debe correr el procedimiento almacenado de habilitación de tablas sobre la tabla (mi tabla se llama dbo.datos, verifique el nombre de su tabla):
exec sys.sp_cdc_enable_table
@source_schema = 'dbo',
@source_name = 'datos',
@role_name = 'public'
Si todo funcionó correctamente en la carpeta del Agente de SQL Server, usted verá a nuevos trabajos creados.

Figura 2. Nuevos trabajos creados
En mi caso mi tabla se llama dato. Lo que voy a hacer es insertar algunos nombres en mi tabla:
Pedro
Juan
Jose
Usted verá que se creó una tabla relacionada con la tabla monitoreada. Para mi tabla datos se creó una tabla llamada cdc.dbo_datos_CT.
Si ustedes ven esa tabla, verán los cambios realizados y las operaciones realizadas.
Verán las columnas y las operaciones realizadas en cada columna. En las operaciones verá números que representan borrado, insertado y actualización:
$operation
·         Datos borrados = 1
·         Datos insertados = 2
·         Valor anterior al update = 3
·         Valor posterior al update = 4
En síntesis, lo único que tiene que hacer es habilitar el CDC, habilitar el CDC de la tabla y luego ver las tablas de cambios. Se entendió ?.
Si tiene más dudas, escriba a este blog.

Comentarios

  1. Donde te crea la tabla que dices?¡

    ResponderEliminar
  2. Esta entre las vistas de sistema de la base de datos.

    ResponderEliminar
  3. esta disponible solo para la version enterprise.

    ResponderEliminar
  4. hola, como hago para consultar solo los campos que se modificaron y mostrar las distintas versiones?? muchas gracias

    ResponderEliminar
  5. La clave es el $operation ahi muestra los valores anteriores y posteriores.

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

The Deep Sea: una web interactiva para explorar las profundidades el mar y descubrir las extrañas criaturas que viven en él

Detectar el usuario de Windows utilizando C#

Lo nuevo de SQL Server 2008 respecto a SQL Server 2005