Active Change Data Capture de SQL Server y verifique el efecto de CDC habilitado

1. ¿Qué es la captura de datos modificados ( CDC)?

Change Data Capture ( CDC) utiliza SQL Serveragentes 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. ETLUn 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 ( ). ETLLas aplicaciones cargan de forma incremental los datos modificados de las tablas SQL Serverde 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 ServerLa captura de datos modificados proporciona esta tecnología.

2. Cambiar el flujo de datos principal de captura de datos

inserte la descripción de la imagen aquí
La fuente de datos modificados para la captura de datos modificados es el registro SQL Serverde 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

inserte la descripción de la imagen aquí
Comprobación de la versión: la versión instalada de SQL Server es la versión de desarrollo de 2019

3.2 El servicio de proxy (trabajo) debe estar habilitado

inserte la descripción de la imagen aquí

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

inserte la descripción de la imagen aquí
La columna de DB_Studentla tabla de la base de datos se ha establecido como clave principal.tb_teacherteaid

4. Verifique y abra el CDCservicio de base de datos

4.1 Consultar CDCel estado del servicio de la base de datos

select is_cdc_enabled from sys.databases where name='DB_Student'

inserte la descripción de la imagen aquí

Si el resultado de la consulta es 0, significa que el servicio de la base de datos DB_Studentaún no se ha iniciado CDC.

4.2 Habilitar CDCfunciones 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';

inserte la descripción de la imagen aquí

DB_StudentEl resultado es 0, lo que indica que se ha CDCabierto 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;

inserte la descripción de la imagen aquí

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;

inserte la descripción de la imagen aquí

7. Verifique si se abrió con éxitoCDC

7.1 Verifique tb_teacherel CDCestado abierto de la tabla y el resultado es 1, lo que indica que CDCel servicio ha sido exitoso.

select name, is_tracked_by_cdc from sys.tables where object_id = OBJECT_ID('DB_Student')

inserte la descripción de la imagen aquí

7.2 Después de abrir con éxito el DB_Studentservicio de la base de datos CDC, hay trabajos y trabajos SQL Serveren el agente-trabajocdc.DB_Student_capturecdc.DB_Student_cleanup

inserte la descripción de la imagen aquí

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_Studentfunción programable-función-tabla-valorada".

inserte la descripción de la imagen aquí
cdc.fn_cdc_get_all_changes_dbo_tb_teacherLSN: 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 el LSNrango . Es decir, si la fila de origen tiene varios cambios dentro LSNdel 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_mappingstart_lsnLSNLSNcdc.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".

inserte la descripción de la imagen aquí
cdc.change_tables: Después de abrir la tabla cdc, se insertará un dato en esta tabla y se registrará cierta información básica de la tabla
cdc.captured_columns: cdcDespués de abrir la tabla, su información de campo se registrará en esta tabla
cdc.dbo_VW_GHZDK_CT: VW_GHZDKtodos 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 CDCla funcionalidad para implementar la captura de cambios de datos

8.1 Tabla del sistema de consultacdc.dbo_tb_teacher_CT

 SELECT * FROM cdc.dbo_tb_teacher_CT

inserte la descripción de la imagen aquí

De los resultados de la consulta, podemos ver que cdc.dbo_tb_teacher_CTno hay ningún registro en la tabla del sistema. Debido a que la tabla se acaba de crear, no dbo.tb_teacherse han realizado adiciones, eliminaciones ni cambios en la tabla original.

8.2 tb_teacherInsertar registros en la tabla y volver a consultarcdc.dbo_tb_teacher_CT

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
Después de insertar datos en la tabla , consulte tb_teacherla tabla del sistema y podrá ver que hay un registro más. cdc.dbo_tb_teacher_CTCombinado con 7.4, puede saber tb_teachercómo insertar y actualizar un registro de datos en la tabla de datos.

Supongo que te gusta

Origin blog.csdn.net/weixin_51571728/article/details/126535938
Recomendado
Clasificación