Aktivieren Sie Change Data Capture von SQL Server und überprüfen Sie die Auswirkung der aktivierten CDC

1. Was ist Change Data Capture ( CDC)?

Change Data Capture ( CDC) verwendet SQL ServerAgenten , um auf Tabellen angewendete Einfüge-, Aktualisierungs- und Löschaktivitäten aufzuzeichnen. Dadurch werden Einzelheiten zu diesen Änderungen in einem benutzerfreundlichen relationalen Format bereitgestellt. Für geänderte Zeilen werden Spalteninformationen sowie Metadaten erfasst, die zum Anwenden der Änderungen auf die Zielumgebung erforderlich sind, und in einer Änderungstabelle gespeichert, die die Spaltenstruktur der verfolgten Quelltabelle widerspiegelt.

Damit Verbraucher systematisch auf Änderungsdaten zugreifen können, werden Tabellenwertfunktionen bereitgestellt. Ein typisches Beispiel für einen Datenkonsumenten, auf den diese Technologie abzielt, ist eine ETLAnwendung zum Extrahieren, Transformieren und Laden ( ). ETLAnwendungen laden geänderte Daten schrittweise aus SQL ServerQuelltabellen in ein Data Warehouse oder einen Data Mart. Während die Darstellung von Quelltabellen in einem Data Warehouse Änderungen in den Quelltabellen widerspiegeln muss, ist die End-to-End-Technik der Aktualisierung einer Kopie der Quelle nicht anwendbar. Stattdessen benötigen Sie einen zuverlässigen Strom von Änderungsdaten mit einer spezifischen Struktur, die Verbraucher auf verschiedene Zieldatendarstellungen anwenden können. SQL ServerChange Data Capture stellt diese Technologie bereit.

2. Ändern Sie den Hauptdatenfluss der Datenerfassung

Fügen Sie hier eine Bildbeschreibung ein
Die Änderungsdatenquelle für die Änderungsdatenerfassung ist das SQL ServerTransaktionsprotokoll . Wenn Einfügungen, Aktualisierungen und Löschvorgänge auf die verfolgte Quelltabelle angewendet werden, werden dem Protokoll Einträge hinzugefügt, die diese Änderungen beschreiben. Das Protokoll wird als Eingabequelle für den Erfassungsprozess verwendet. Es liest das Protokoll und fügt Informationen über die Änderung in der zugehörigen Änderungstabelle der nachverfolgten Tabelle hinzu. Es werden Funktionen bereitgestellt, um die Änderungen aufzuzählen, die innerhalb eines angegebenen Bereichs in der Änderungstabelle aufgetreten sind, und diesen Wert in einem gefilterten Ergebnissatz zurückzugeben. Typischerweise verwendet der Anwendungsprozess den gefilterten Ergebnissatz, um die Quelldarstellung in einer externen Umgebung zu aktualisieren.

3. Notwendige Bedingungen für die Aktivierung von CDC

3.1 Verfügbar in der Enterprise Edition, Development Edition und Evaluation Edition von SQL Server 2008 und höher

Fügen Sie hier eine Bildbeschreibung ein
Versionsprüfung: Die installierte Version von SQL Server ist die Entwicklungsversion 2019

3.2 Der Proxy-Dienst (Job) muss aktiviert sein

Fügen Sie hier eine Bildbeschreibung ein

3.3 CDC benötigt zum Speichern von Protokolldateien zusätzlich zur Geschäftsbibliothek zusätzlichen Speicherplatz

3.4 Die Tabelle muss einen Primärschlüssel oder einen eindeutigen Index haben

Fügen Sie hier eine Bildbeschreibung ein
Als Primärschlüssel wurde die Spalte der DB_StudentTabelle der Datenbank festgelegt.tb_teacherteaid

4. Überprüfen und öffnen Sie den CDCDatenbankdienst

4.1 Fragen Sie CDCden Dienststatus der Datenbank ab

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

Fügen Sie hier eine Bildbeschreibung ein

Wenn das Abfrageergebnis 0 ist, bedeutet dies, dass der Datenbankdienst DB_Studentnoch nicht gestartet wurde CDC.

CDC4.2 Funktionen auf Datenbankebene aktivieren

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';

Fügen Sie hier eine Bildbeschreibung ein

Das Ergebnis ist 0, was anzeigt, dass der Datenbankdienst geöffnet DB_StudentwurdeCDC

5. Fügen Sie CDC-spezifische Dateigruppen und Dateien hinzu

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;

Fügen Sie hier eine Bildbeschreibung ein

6. Die Operation öffnet die Tabellenebene CDC(Hinweis: In der Tabelle muss ein Primärschlüssel oder ein eindeutiger Index vorhanden sein)

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;

Fügen Sie hier eine Bildbeschreibung ein

7. Überprüfen Sie, ob es erfolgreich geöffnet wurdeCDC

7.1 Überprüfen Sie tb_teacherden offenen CDCStatus der Tabelle. Das Ergebnis ist 1, was darauf hinweist, dass CDCder Dienst erfolgreich war.

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

Fügen Sie hier eine Bildbeschreibung ein

7.2 Nach erfolgreichem Öffnen des Datenbankdienstes liegen DB_StudentJobs und Jobs am Agent-Job vorCDCSQL Servercdc.DB_Student_capturecdc.DB_Student_cleanup

Fügen Sie hier eine Bildbeschreibung ein

7.3 Nach erfolgreichem Öffnen des Post-Service CDCwerden die folgenden Funktionen in der Datenbank generiert: „ DB_StudentFunktion mit programmierbaren Funktionstabellenwerten“.

Fügen Sie hier eine Bildbeschreibung ein
cdc.fn_cdc_get_all_changes_dbo_tb_teacherLSN: Gibt eine Zeile für jede an der Quelltabelle vorgenommene Änderung innerhalb des angegebenen Protokollsequenznummernbereichs ( ) zurück. Wenn die Quellzeile innerhalb dieses Intervalls mehrere Änderungen aufwies, wird jede Änderung im zurückgegebenen Ergebnissatz dargestellt.
cdc.fn_cdc_get_net_changes_dbo_tb_teacher: Gibt eine netto geänderte Zeile für jede geänderte Quellzeile im angegebenen LSNBereich . Das heißt, wenn die Quellzeile mehrere Änderungen innerhalb LSNdes Bereichs , gibt die Funktion eine einzelne Zeile zurück, die den endgültigen Inhalt dieser Zeile widerspiegelt. : Gibt den Wert der Protokollsequenznummer ( ) in der Spalte der Systemtabelle
sys.fn_cdc_map_time_to_lsn für die angegebene Zeit zurück. Diese Funktion kann verwendet werden, um einen Datums-/Uhrzeitbereich systematisch einem Bereich zuzuordnen, der auf den Changedata Capture-Enumerationsfunktionen basiert und um Datenänderungen innerhalb dieses Bereichs zurückzugeben .cdc.lsn_time_mappingstart_lsnLSNLSNcdc.fn_cdc_get_all_changes_<capture_instance>cdc.fn_cdc_get_net_changes_<capture_instance>

7.4 Nach erfolgreichem Start des CDC-Dienstes wird die folgende Tabelle in der Datenbank „DB_Student-table-system table“ generiert.

Fügen Sie hier eine Bildbeschreibung ein
cdc.change_tables: Nach dem Öffnen der Tabelle cdcwerden Daten in diese Tabelle eingefügt und einige grundlegende Informationen der Tabelle aufgezeichnet
cdc.captured_columns: cdcNach dem Öffnen der Tabelle werden ihre Feldinformationen in dieser Tabelle aufgezeichnet
cdc.dbo_VW_GHZDK_CT: VW_GHZDKAlle geänderten Daten in Die Tabelle wird aufgezeichnet, und das Feld „ __$operation“ ist „1“ bedeutet gelöscht, „2“ steht für Einfügen, „3“ ist der Wert vor der Durchführung des Aktualisierungsvorgangs und „4“ ist der Wert nach der Durchführung des Aktualisierungsvorgangs. Da die Änderung im Feld „ __$start_lsn“ aus dem Transaktionsprotokoll der Datenbank stammt, wird hier die Startsequenznummer ( ) des Transaktionsprotokolls gespeichert LSN.

8. Überprüfen Sie CDCdie Funktionalität zur Implementierung der Datenänderungserfassung

8.1 Systemtabelle abfragencdc.dbo_tb_teacher_CT

 SELECT * FROM cdc.dbo_tb_teacher_CT

Fügen Sie hier eine Bildbeschreibung ein

Anhand der Abfrageergebnisse können wir erkennen, dass cdc.dbo_tb_teacher_CTin der Systemtabelle kein Datensatz vorhanden ist. Da die Tabelle gerade erst erstellt wurde, dbo.tb_teacherwurden an der Originaltabelle keine Ergänzungen, Löschungen oder Änderungen vorgenommen.

8.2 tb_teacherDatensätze in die Tabelle einfügen und erneut abfragencdc.dbo_tb_teacher_CT

Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein
Nachdem Sie Daten in die Tabelle eingefügt haben , fragen Sie tb_teacherdie Systemtabelle ab, und Sie können sehen, dass es einen weiteren Datensatz gibt. cdc.dbo_tb_teacher_CTIn Kombination mit 7.4 können Sie tb_teachereinen Datensatz in die Datentabelle einfügen und aktualisieren.

Ich denke du magst

Origin blog.csdn.net/weixin_51571728/article/details/126535938
Empfohlen
Rangfolge