Blog gratis
Reportar
Editar
¡Crea tu blog!
Compartir
¡Sorpréndeme!
img
img

 

 

SQL Server
Blog. (Apuntes y Recopilaciones) por Norman M. Pardell

img
img
05 de Agosto, 2011 · Change-Data-Capture-CDC-SQL

Change Data Capture (CDC). SQL Server 2008

Change Data Capture (CDC) es una característica que viene con el motor de base de datos en SQL Server 2008. Permite capturar las inserciones, actualizaciones y borrados que se ejecutan en una o varias tablas de una base de datos. Los cambios que se realizan en la tabla se almacenan en otras tablas respetando una estructura relacional, lo que facilita el consumo por las aplicaciones.

 

Las inserciones y eliminaciones, actualizan la tabla de cambio refleja esas acciones con un nuevo registro que guarda cuando se inserta o se elimina. En el caso de una actualización, la tabla de cambio almacena dos filas: una para con los datos de antes de la actualización y otra para los nuevos datos modificados.

 

Se puede utilizar cualquiera de los CDC para devolver todos los cambios en una fila, o simplemente para devolver el último cambio. Por ejemplo, si una columna, en una fila, se cambiaron dos veces, se puede ver tanto los 2 cambios que se produjeron o sólo el contenido final de la fila.

 

Al habilitar el CDC para una tabla, las tablas nuevas y las funciones se agregan a la base de datos para que se almacenen los cambios que se hacen de los datos. Además, se crean dos trabajos en el SQL Agent. Uno para rellenar las tablas donde se almacenan los cambios y otro para limpiar las tablas de cambios. Estos trabajos son fundamentales para el proceso de CDC, por lo que SQL Agent debe estar arrancado para que los CDC puedan ser activados.

 

El primer paso para habilitar Change Data Capture (CDC), habilitar la base de datos, se realiza mediante la ejecución del procedimiento sys.sp_cdc_enable_db que se encuentra dentro de la base de datos a habilitar, por ejemplo:

 

    USE TuBD

    GO

    EXEC sys.sp_cdc_enable_db

    GO

 

 

Ahora que la base de datos está habilitada para Change Data Capture (CDC), el siguiente paso es que para cada tabla (origen) de la cual queremos seguir los cambios que se hagan sobre ella. A yo solo pongo que se haga para una sola, se puede fácilmente repetir este mismo proceso para cada tabla que se deseé en una misma base de datos. Esto se hace utilizando el procedimiento almacenado sys.sp_cdc_enable_table:

 

    USE TuBD

    GO

    EXEC sys.sp_cdc_enable_table

    @Source_schema = N'dbo,

    @Source_name = N'Tutabla,

    @Role_name = N'CDCRole '

 

 

Los parámetros son los siguientes:

 

    * @Source_schema - es el nombre de esquema de la tabla de origen.

    * @Source_name @ - es el nombre de la tabla de origen está habilitando.

    * @Role_name - es la función de seguridad que se crea cuando los CDC está activado. Este rol puede ser ignorado, o se puede utilizar para asignar permisos a usuarios específicos, para que puedan acceder a los datos utilizando las funciones de los CDC (http://technet.microsoft.com/es-es/library/bb510744.aspx), sin tener que ser un miembro de la función db_owner.

La tabla Dónde se guardan las columnas cuyo cambio de valor estamos capturando es: cdc_captured_columns, (http://technet.microsoft.com/es-es/library/bb500243%28SQL.100%29.aspx), sería suficiente con hacer:

Select * from cdc.captured_columns

Devuelve una fila para cada columna de la que se ha realizado un seguimiento en una instancia de captura. De forma predeterminada, se capturan todas las columnas de la tabla de origen. Sin embargo, se podrán incluir o excluir columnas si la tabla de origen está habilitada para la captura de datos de cambios especificando una lista de columnas.(http://technet.microsoft.com/es-es/library/bb510701%28SQL.100%29.aspx)

 

Para Devolver sólo los registros que contienen los valores antes y después de una modificación, se puede obtener de la forma:

DECLARE @from_lsn binary(10), @to_lsn binary(10);

SET @from_lsn = sys.fn_cdc_get_min_lsn('dbo_Tutabla');

SET @to_lsn = sys.fn_cdc_get_max_lsn();

SELECT * FROM cdc.fn_cdc_get_all_changes_dbo_Tutabla(@from_lsn, @to_lsn, 'all');

 Lo que estamos haciendo es devolver mediante las funciones fn_cdc_get_min_lsn() y fn_cdc_getmax_lsn() los registros mínimo y máximo que se están guardando en la tabla cdc.lsn_time_mapping. Esta tabla, que se crea en el momento que se activa el CDC, almacena los valores LSN (Log Secuence Number) que se generan como consecuencia de cada transacción que contiene filas de datos en una tabla de cambios, así como el instante de tiempo en el que se produjo la transacción.

 

 

Más información os dejo el link: http://msdn.microsoft.com/en-us/library/bb522489.aspx

Hay un blog muy interesante (pero en ingles) en donde construyen una solución desde 0, copio el enlace:

http://sqlblog.com/blogs/andy_leonard/archive/2008/02/09/introducing-change-data-capture-ssis-and-sql-server-2008-ctp5-nov-2007.aspx


En SQL Server existen diferentes opciones pueden permitir tener un registro de los cambios a la información de las tablas, dependiendo de tus necesidades puedes evaluar alguna de las siguientes opciones:

        - Auditorías de SQL (Nueva en SQL 2008)

        - C2 Audit Mode (disponible desde SQL 2000)

        - SQL Traces (Disponibles desde SQL 2000)

        - Change Tracking (Nueva en SQL 2008)

        - Change Data Capture (Nueva en SQL 2008)

        - Código personalizado (triggers, columnas adicionales en las tablas, código adicional en los sp’s, etc.)

        - Herramientas de terceros





Fuentes:

Microsoft, msdn.

 

Apunte y recopilación por Norman M. Pardell

 

Puedes consultarme, si deseas cualquier aclaración, pregunta o sugerencia en: Contacto, contestaré tan pronto como me sea posible.




publicado por normanmpardell a las 07:22 · Sin comentarios  ·  Recomendar
Comentarios (0) ·  Enviar comentario
Esta entrada no admite comentarios.
img
.Sobre mí
FOTO

Norman M. Pardell

MCITP: Database Administrator & Database Developer, SQL Server 2008. MCC Award Certificate. Consultor Senior de bases de datos en Capgemini España, S.L. Asesoramiento en implementación, desarrollo y gestión de bases de datos en grandes compañías. Actualmente, asignado a proyecto en compañía líder en el sector energético global. Más de 10 años trabajando con SQL Server (y otros gestores de BBDD)

» Ver perfil

img
.Secciones
» Inicio
img
.Enlaces
» Microsoft MSDN Foros
» Windows Server 2012
img
.Más leídos
» Asignar la cantidad correcta de Memoria para SQL Server
» Base de Datos Sospechosa (Suspect)
» Como modificar la Intercalación (Collation) en SQL Server
» Como renombrar una instancia de SQL Server. sp_dropserver. sp_addserver
» Detectar bloqueos. SQL Server V.2005 y superiores
» Funciones SQL Server. Funciones escalares y funciones con valores de tabla.
» Integridad y corrupción en las bases de datos: DBCC CHECKDB
» Log de transacciones ( .ldf ). SQL Server.
» Migrando SQL Server 2005, 2008, 2008 R2 a SQL Server 2012
» Transacciones activas. SQL server 2008
img
.Nube de tags [?]
                                                           
img img
FULLServices Network | Crear blog | Privacidad