1. ¿Qué es la captura de datos modificados (
CDC
)?Change Data Capture (
CDC
) utilizaSQL Server
agentes para registrar la actividad de inserción, actualización y eliminación aplicada a las tablas. Esto proporciona detalles de estos cambios en un formato relacional fácil de usar. La información de la columna se captura para las filas modificadas, junto con los metadatos necesarios para aplicar los cambios al entorno de destino, y se almacena en una tabla de cambios que refleja la estructura de la columna de la tabla de origen rastreada.
Se proporcionan funciones con valores de tabla para que los consumidores puedan acceder sistemáticamente a los datos de cambios.ETL
Un ejemplo típico de un consumidor de datos al que se dirige esta tecnología es una aplicación de extracción, transformación y carga ( ).ETL
Las aplicaciones cargan de forma incremental los datos modificados de las tablasSQL Server
de origen en un almacén de datos o un data mart. Si bien la representación de las tablas de origen en un almacén de datos debe reflejar los cambios en las tablas de origen, no se aplica la técnica integral de actualizar una copia del origen. En su lugar, necesita un flujo confiable de datos de cambio con una estructura específica que los consumidores puedan aplicar a diferentes representaciones de datos de destino.SQL Server
La captura de datos modificados proporciona esta tecnología.2. Cambiar el flujo de datos principal de captura de datos
La fuente de datos modificados para la captura de datos modificados es el registroSQL Server
de transacciones . A medida que se aplican inserciones, actualizaciones y eliminaciones a la tabla de origen rastreada, las entradas que describen estos cambios se agregan al registro. El registro se utiliza como fuente de entrada para el proceso de captura. Lee el registro y agrega información sobre el cambio en la tabla de cambios asociada de la tabla rastreada. Se proporcionan funciones para enumerar los cambios que ocurrieron dentro de un rango específico en la tabla de cambios y devolver ese valor en un conjunto de resultados filtrado. Normalmente, el proceso de aplicación utiliza el conjunto de resultados filtrados para actualizar la representación de origen en algún entorno externo.3. Condiciones necesarias para habilitar CDC
3.1 Disponible en Enterprise Edition, Development Edition y Evaluation Edition de SQL Server 2008 y superior
Comprobación de la versión: la versión instalada de SQL Server es la versión de desarrollo de 20193.2 El servicio de proxy (trabajo) debe estar habilitado
3.3 CDC requiere espacio en disco adicional además de la biblioteca comercial para guardar archivos de registro
3.4 La tabla debe tener una clave primaria o un índice único
La columna deDB_Student
la tabla de la base de datos se ha establecido como clave principal.tb_teacher
teaid
4. Verifique y abra el
CDC
servicio de base de datos4.1 Consultar
CDC
el estado del servicio de la base de datos
select is_cdc_enabled from sys.databases where name='DB_Student'
Si el resultado de la consulta es 0, significa que el servicio de la base de datos
DB_Student
aún no se ha iniciadoCDC
.4.2 Habilitar
CDC
funciones a nivel de base de datos
ALTER AUTHORIZATION ON DATABASE::[DB_Student] TO [sa];
if exists(select 1 from sys.databases where name='DB_Student' and is_cdc_enabled=0)
begin
exec sys.sp_cdc_enable_db
end
;
select is_cdc_enabled from sys.databases where name='DB_Student';
DB_Student
El resultado es 0, lo que indica que se haCDC
abierto el servicio de base de datos.5. Agregue grupos de archivos y archivos específicos de CDC
SELECT name, physical_name FROM sys.master_files WHERE database_id = DB_ID('DB_Student');
ALTER DATABASE DB_Student ADD FILEGROUP CDC1;
ALTER DATABASE DB_Student
ADD FILE
(
NAME= 'DB_Student_CDC1',
FILENAME = 'D:\DATA\DB_Student_CDC1.ndf'
)
TO FILEGROUP CDC1;
6. La operación abre el nivel de la tabla
CDC
(nota: debe haber una clave principal o un índice único en la tabla)
SELECT name,is_tracked_by_cdc FROM sys.tables WHERE is_tracked_by_cdc = 0;
IF EXISTS(SELECT 1 FROM sys.tables WHERE name='tb_teacher' AND is_tracked_by_cdc = 0)
BEGIN
EXEC sys.sp_cdc_enable_table
@source_schema = 'dbo',
@source_name = 'tb_teacher',
@capture_instance = NULL,
@supports_net_changes = 1,
@role_name = NULL,
@index_name = NULL,
@captured_column_list = NULL,
@filegroup_name = 'CDC1'
END;
DECLARE @tableName nvarchar(36)
DECLARE My_Cursor CURSOR
FOR (SELECT 'new_srv_workorderBase' name
union select 'tablename1'
union select 'tablename2'
union select 'tablename3'
)
OPEN My_Cursor;
FETCH NEXT FROM My_Cursor INTO @tableName;
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC sys.sp_cdc_enable_table
@source_schema = 'dbo',
@source_name = @tableName,
@capture_instance = NULL,
@supports_net_changes = 1,
@role_name = NULL,
@index_name = NULL,
@captured_column_list = NULL,
@filegroup_name = 'CDC1'
FETCH NEXT FROM My_Cursor INTO @tableName;
END
CLOSE My_Cursor;
DEALLOCATE My_Cursor;
SELECT name,is_tracked_by_cdc FROM sys.tables WHERE is_tracked_by_cdc = 1 ORDER BY NAME;
7. Verifique si se abrió con éxito
CDC
7.1 Verifique
tb_teacher
elCDC
estado abierto de la tabla y el resultado es 1, lo que indica queCDC
el servicio ha sido exitoso.
select name, is_tracked_by_cdc from sys.tables where object_id = OBJECT_ID('DB_Student')
7.2 Después de abrir con éxito el
DB_Student
servicio de la base de datosCDC
, hay trabajos y trabajosSQL Server
en el agente-trabajocdc.DB_Student_capture
cdc.DB_Student_cleanup
7.3 Después de que el servicio posterior se haya abierto con éxito
CDC
, se generarán las siguientes funciones en la base de datos "DB_Student
función programable-función-tabla-valorada".
cdc.fn_cdc_get_all_changes_dbo_tb_teacher
LSN
: Devuelve una fila por cada cambio aplicado a la tabla de origen dentro del rango de número de secuencia de registro ( ) especificado . Si la fila de origen tuvo varios cambios dentro de ese intervalo, cada cambio se representará en el conjunto de resultados devuelto.
cdc.fn_cdc_get_net_changes_dbo_tb_teacher
: Devuelve una fila cambiada neta por cada fila fuente cambiada en elLSN
rango . Es decir, si la fila de origen tiene varios cambios dentroLSN
del rango , la función devolverá una sola fila que refleja el contenido final de esa fila. : Devuelve el valor del número de secuencia de registro ( ) en la columna de la tabla del sistema
sys.fn_cdc_map_time_to_lsn
para el tiempo especificado . Esta función se puede usar para asignar sistemáticamente un rango de fecha y hora a un rango basado en las funciones de enumeración de captura de datos modificados y para devolver cambios de datos dentro de este rango.cdc.lsn_time_mapping
start_lsn
LSN
LSN
cdc.fn_cdc_get_all_changes_<capture_instance>
cdc.fn_cdc_get_net_changes_<capture_instance>
7.4 Después de iniciar con éxito el servicio CDC, se generará la siguiente tabla en la base de datos "DB_Student-table-system table".
cdc.change_tables
: Después de abrir la tablacdc
, se insertará un dato en esta tabla y se registrará cierta información básica de la tabla
cdc.captured_columns
:cdc
Después de abrir la tabla, su información de campo se registrará en esta tabla
cdc.dbo_VW_GHZDK_CT
:VW_GHZDK
todos los datos modificados en la tabla se registrará la tabla, y el campo "__$operation
" es "1" significa eliminado, "2" significa inserción, "3" es el valor antes de realizar la operación de actualización y "4" es el valor después de realizar la operación de actualización. Dado que el cambio en el campo "__$start_lsn
" es del registro de transacciones de la base de datos, el número de secuencia de inicio ( ) del registro de transacciones se guardará aquíLSN
.8. Verificar
CDC
la funcionalidad para implementar la captura de cambios de datos8.1 Tabla del sistema de consulta
cdc.dbo_tb_teacher_CT
SELECT * FROM cdc.dbo_tb_teacher_CT
De los resultados de la consulta, podemos ver que
cdc.dbo_tb_teacher_CT
no hay ningún registro en la tabla del sistema. Debido a que la tabla se acaba de crear, nodbo.tb_teacher
se han realizado adiciones, eliminaciones ni cambios en la tabla original.8.2
tb_teacher
Insertar registros en la tabla y volver a consultarcdc.dbo_tb_teacher_CT
Después de insertar datos en la tabla , consultetb_teacher
la tabla del sistema y podrá ver que hay un registro más.cdc.dbo_tb_teacher_CT
Combinado con 7.4, puede sabertb_teacher
cómo insertar y actualizar un registro de datos en la tabla de datos.