Change Tracking und Change Data Capture im Vergleich

Werbung
„Winds of Change“
Change Tracking
und
Change Data Capture im Vergleich
Referentin: Anne Apfel
Business Intelligence Consultant
Was sind Change Tracking
und Change Data Capture
Vorstellung der Verfahren
und Vergleich
Handling und
Funktionsweise
Einsatzszenarien und
Erfahrungen
Change Tracking und
Change Data Capture
Was ist das?
•
Verfahren zum Registrieren und Nachverfolgen von Änderungen
an Daten
 Tracking von DML-Operation
„Wer hat wann was mit meinen Daten gemacht!“
•
mit Release des SQL Server 2008
 Built-In Features
•
typischer Einsatz in der BI
 Incremental Load
 Historisierung von Daten
Change Tracking
Funktionsweise
•
Tracking der Tatsache dass sich Daten geändert haben, aber
nicht wie oft und mit welchen Zwischenwerten
 Speichert Primärschlüssel und Art der Änderung
 keine Historisierung
•
Tracking der Änderungen, sowie Abfrage erfolgt per
Versionsnummer (DB-Transaktion)
•
Versionsnummern gültig für gesamte Datenbank
•
Speichert Nettoänderungen
•
Wird auf Datenbankebene, sowie Tabellenebene aktiviert
Change Tracking
Funktionsweise
•
Änderungen werden in internen Tabellen gespeichert
•
Möglichkeit Auto-Cleanup zu nutzen
•
Zugriff auf Änderungsinformationen mittels spezieller
Funktionen
Auf geänderte Daten selbst, mittels zusätzlichen Join auf
Originaltabelle
•
Voraussetzungen: - Tabelle muss Primärschlüssel besitzen
- empfohlenes Kompatibilitätslevel von min
90 empfohlen (SQL Server 2005)
- Snapshot Isolation ebenso
Change Tracking
•
Funktionsweise
Synchrones Tracking-Verfahren
SELECT * FROM SP.PRODUCT SP
RIGHT OUTER JOIN CHANGETABLE(CHANGES SP.PRODUCT, 300) AS CT
ON SP.ID = CT.ID
6 Zusätzliche Spalten:
- SYS_CHANGE_VERSION
- SYS_CHANGE_CREATION_VERSION
- SYS_CHANGE_OPERATION
- SYS_CHANGE_COLUMNS
- SYS_CHANGE_CONTEXT
- SYS_CHANGE_ID
Change Tracking
Vorteile
•
Keine Eigenentwicklung notwendig
 Verringert Entwicklerzeit
 Keine Änderungen am Datenbankschema notwendig
•
Automatischer Clean-Up Mechanismus verfügbar
•
Change-Tracking-Funktionen ermöglichen einfaches Handling
•
Geringerer Overhead als Eigenlösungen (bspw. Trigger)
•
Verlässliche Resultate bei Überlappenden und
Langzeittransaktionen
•
Über SQL-Server-Managementstudio-Oberfläche konfigurierbar
Change Data Capture
•
•
Funktionsweise
Trackt die Tatsache dass Änderungen am Datensatz passiert
sind und die Änderungen selbst
Bei Update in der Before-Update und After-Update-Version
 Historisierung
•
Aktivierung erfolgt auf Datenbankebene, Tabellenebene und
opt. für einzelne Spalten
•
Fügt neues Schema cdc hinzu
•
Änderungen werden in zugehörigen ChangeTables gespeichert
 enthalten zu trackende
Spalten, sowie weitere
Metadateninformationen
Change Data Capture
Funktionsweise
•
Speichert Änderungen per LSN, die gegen Zeitentabelle
gemappt werden können
•
Speichert Bruttoänderungen, Nettoänderungen können
abgefragt werden
•
Aktivieren von CDC generiert 2
SQL Server Agent Jobs
•
Voraussetzungen: - Enterprise oder Developer Edition
- SQL Server Agent aktiviert
Change Tracking
•
Funktionsweise
Asynchrones Tracking-Verfahren
5 zusätzliche Metadatenfelder:
__$start_lsn
__$end_lsn
__$seqval
__$operation
__$update_mask
__$operation  1 = Delete, 2 = Insert, 3 = Before Update, 4 = After Update
Change Data Capture
Vorteile
•
Keine Eigenentwicklung notwendig
 Verringert Entwicklerzeit
 Keine Änderungen am Datenbankschema notwendig
•
Automatischer Clean-Up Mechanismus verfügbar
•
zeigt Daten vor und nach dem Update
•
Geringer Overhead durch asynchrones Verfahren
•
Verlässliche Resultate bei Überlappenden und
Langzeittransaktionen
Change Tracking und
Change Data Capture
Vergleich
Change Tracking
synchron
Change Data Capture
asynchron
Änderungen am Datensatz aus
Ursprungstabelle
interessiert ob sich ein Datensatz verändert
hat, nicht wie
Benötigt keinen SQL-Server-Agent
Snapshot-Isolation empfohlen
Änderungen am Datensatz aus replizierter Tabelle
Clean-Up über Datenbankfeature
Änderungsdaten sofort abfragbar
Clean-Up über Agent Job
Änderungsdaten evt. leicht verzögert abfragbar
Abfrage der Daten anhand Versionsnummer
weniger Ressourcen beim Tracking (Storage)
Abfrage von Daten anhand einer
LogSequenceNummer
mehr Ressourcen beim Tracking (Storage)
mehr Ressourcen bei den SQL-Abfragen
nutzt TempDB
Tracking aller Änderungen
DDL Restriktionen
weniger Ressourcen bei SQL-Abfragen
nutzt TransactionLog
Tracking nur tatsächlicher Änderungen
Keine DDL Restriktionen
interessiert ob sich ein Datensatz verändert hat,
wie und das Ergebnis vor und nach der Änderung
Benötigt SQL-Server-Agent
Snapshot-Isolation nicht notwendig
Wem das noch nicht
reicht…

Links:
Change Tracking
http://msdn.microsoft.com/en-us/library/cc280462(v=sql.105).aspx
Change Data Capture
http://msdn.microsoft.com/en-us/library/bb522489(v=sql.105)
Vergleich und Übersicht
http://msdn.microsoft.com/en-us/library/cc280519(v=sql.105)
Change Tracking
Änderungen an Objekten
Vorgang
Aktivierte Änderungsnachverfolgung
DROP TABLE
Alle Änderungsnachverfolgungsinformationen für die gelöschte Tabelle werden entfernt.
ALTER TABLE DROP
CONSTRAINT
Ein Versuch, die PRIMARY KEY-Einschränkung zu löschen, schlägt fehl. Die Änderungsnachverfolgung muss
deaktiviert werden, damit eine PRIMARY KEY-Einschränkung gelöscht werden kann.
ALTER TABLE DROP
COLUMN
Ist eine gelöschte Spalte Bestandteil des Primärschlüssels, kann die Spalte nicht gelöscht werden, unabhängig
von der Änderungsnachverfolgung.
Ist die gelöschte Spalte kein Bestandteil des Primärschlüssels, kann die Spalte gelöscht werden. Es sollte jedoch
zuerst die Auswirkung auf eine beliebige Anwendung, die diese Daten synchronisiert, verstanden werden. Ist die
Spaltenänderungsnachverfolgung für die Tabelle aktiviert, kann die Spalte trotzdem als Bestandteil der
Änderungsnachverfolgungsinformationen zurückgegeben werden. Die Anwendung ist für die Behandlung der
gelöschten Spalte zuständig.
ALTER TABLE ADD
COLUMN
Wird der änderungsnachverfolgten Tabelle eine neue Spalte hinzugefügt, wird das Hinzufügen der Spalte nicht
verfolgt. Nur die Updates und Änderungen, die an der neuen Spalte vorgenommen werden, werden
nachverfolgt.
ALTER TABLE ALTER
COLUMN
Datentypänderungen einer Nicht-Primärschlüsselspalte werden nicht nachverfolgt.
ALTER TABLE SWITCH
Der Partitionswechsel schlägt fehl, wenn für eine oder beide Tabellen die Änderungsnachverfolgung aktiviert ist.
DROP INDEX oder
ALTER INDEX DISABLE
Der Index, der den Primärschlüssel erzwingt, kann nicht gelöscht oder deaktiviert werden.
TRUNCATE TABLE
Das Abschneiden einer Tabelle kann für eine Tabelle ausgeführt werden, für die die Änderungsnachverfolgung
aktiviert ist. Die mit dem Vorgang gelöschten Zeilen werden von dem Vorgang jedoch nicht nachverfolgt, und die
minimale gültige Version wird aktualisiert. Führt eine Anwendung eine Versionsprüfung durch, ergibt die
Prüfung, dass die Version zu alt ist und dass eine erneute Initialisierung erforderlich ist. Dies ist identisch mit der
Deaktivierung der Änderungsnachverfolgung und der anschließenden erneuten Aktivierung für die Tabelle.
Change Tracking
Funktionen und
Katalogsichten
Funktion
Beschreibung
Ruft Nachverfolgungsinformationen für alle Änderungen an einer Tabelle
ab, die seit einer angegebenen Version vorgenommen wurden, oder gibt
CHANGETABLE (Transact-SQL)
die aktuellen Änderungsnachverfolgungsinformationen für eine
bestimmte Zeile an.
Ruft die minimale Version ab, die zum Abrufen von
CHANGE_TRACKING_MIN_VALID
Änderungsnachverfolgungsinformationen aus einer bestimmten Tabelle
_VERSION (Transact-SQL)
gültig ist, wenn die CHANGETABLE-Funktion verwendet wird.
Ruft eine Version ab, die mit der letzten Transaktion, für die Commit
CHANGE_TRACKING_CURRENT_
ausgeführt wurde, verknüpft ist. Sie können diese Version verwenden,
VERSION (Transact-SQL)
wenn Sie das nächste Mal Änderungen mit CHANGETABLE aufzählen.
CHANGE_TRACKING_IS_COLUM Interpretiert den SYS_CHANGE_COLUMNS-Wert, der von der
N_IN_MASK (Transact-SQL)
CHANGETABLE(CHANGES …)-Funktion zurückgegeben wird.
WITH
Aktiviert die Spezifikation eines Änderungskontexts, z. B. eine AbsenderCHANGE_TRACKING_CONTEXT ID, wenn eine Anwendung Daten ändert.
Katalogsicht
Beschreibung
sys.change_tracking_databases
(Transact-SQL)
Gibt eine Zeile für jede Datenbank in der Instanz von SQL Server zurück,
für die die Änderungsnachverfolgung aktiviert ist.
sys.change_tracking_tables
(Transact-SQL)
Gibt eine Zeile für jede Tabelle in der aktuellen Datenbank zurück, für
die die Änderungsnachverfolgung aktiviert ist.
Change Data Capture
Funktionen
cdc.fn_cdc_get_all_changes_<capture_instance>
( from_lsn , to_lsn , '<row_filter_option>' )
Returns one row for each change applied to the
source table within the specified LSN
sys.fn_cdc_has_column_changed
( 'capture_instance','column_name' ,
update_mask )
Has captured column been updated
cdc.fn_cdc_get_net_changes_<capture instance>
( from_lsn , to_lsn , '<row_filter_option>' )
Returns one net change row for each source row
changed within the specified LSN
sys.fn_cdc_increment_lsn ( lsn_value )
Next LSN
sys.fn_cdc_decrement_lsn ( lsn_value )
Previous LSN
sys.fn_cdc_is_bit_set ( position , update_mask )
Has captured column been updated
sys.fn_cdc_get_column_ordinal
( 'capture_instance','column_name')
Returns the column ordinal of the specified column
sys.fn_cdc_map_lsn_to_time ( lsn_value )
Datetime value from the tran_end_time column in
the cdc.lsn_time_mapping table
sys.fn_cdc_get_max_lsn ()
Maximum LSN from the start_lsn column in the
cdc.lsn_time_mapping system table
sys.fn_cdc_map_time_to_lsn ( tracking_time)
LSN Value from the start_lsn column in the
cdc.lsn_time_mapping table
sys.fn_cdc_get_min_lsn ('capture_instance_name' )
Start LSN from Capture Instance
Change Data Capture
Tabellen
cdc.<capture_instance>_CT
Gibt eine Zeile für jede Änderung an einer aufgezeichneten Spalte in der zugeordneten
Quelltabelle zurück.
cdc.captured_columns
Gibt eine Zeile für jede in einer Aufzeichnungsinstanz nachverfolgten Spalte zurück.
cdc.change_tables
Gibt eine Zeile pro Änderungstabelle in der Datenbank zurück.
cdc.ddl_history
Gibt eine Zeile für jede Änderung an der Datendefinitionssprache (DDL) zurück, die an
Tabellen vorgenommen wurde, die für Change Data Capture aktiviert wurden.
cdc.lsn_time_mapping
Gibt eine Zeile für jede Transaktion zurück, für die Zeilen in einer Änderungstabelle
aufgezeichnet sind. Diese Tabelle wird verwendet, um die Commitwerte der
Protokollfolgenummer (LSN) mit dem Commitzeitpunkt der Transaktion zu verknüpfen.
cdc.index_columns
Gibt eine Zeile für jede Indexspalte zurück, die einer Änderungstabelle zugeordnet ist.
dbo.cdc_jobs (Transact-SQL)
Gibt die Konfigurationsparameter für Change Data Capture-Agent-Aufträge zurück.
Herunterladen