Oracle CDC-Datenbanken

Eine Oracle CDC-Instanz wird einer SQL Server -Datenbank mit dem gleichen Namen auf der SQL Server -Zielinstanz zugeordnet. Diese Datenbank wird als Oracle CDC-Datenbank (oder kurz CDC-Datenbank) bezeichnet.

Die CDC-Datenbank wird mit der Oracle CDC Designer Console erstellt und konfiguriert und enthält die folgenden Elemente:

  • Ein cdc -Schema, das erstellt wird, indem die Datenbank für SQL Server CDC aktiviert wird.

  • Ein Satz von cdc.xdbcdc_xxxx -Tabellen, die von der Oracle CDC-Instanz verwendet werden.

  • Ein Satz leerer Spiegeltabellen mit den Definitionen der aufgezeichneten Tabellen in der Oracle-Quelldatenbank.

  • Einen Satz von Änderungstabellen und Änderungszugriffsfunktionen, die vom SQL Server CDC-Mechanismus generiert werden und identisch mit den Elementen sind, die beim normalen SQL Server CDC-Vorgang (nicht Oracle) verwendet werden.

Anfänglich können nur die Mitglieder der festen Datenbankrolle cdc dbowner auf das -Schema zugreifen. Der Zugriff auf die Änderungstabellen und Änderungsfunktionen wird über das gleiche Sicherheitsmodell wie für SQL Server CDC gesteuert. Weitere Informationen zum Sicherheitsmodell finden Sie unter Sicherheitsmodell.

Erstellen der CDC-Datenbank

In den meisten Fällen wird die CDC-Datenbank über die CDC Designer Console erstellt, aber sie kann auch mithilfe eines CDC-Bereitstellungsskripts erstellt werden, das mit der CDC Designer Console generiert wird. Der SQL Server -Systemadministrator kann die Datenbankeinstellungen bei Bedarf ändern (z. B. in Bezug auf Speicherung, Sicherheit oder Verfügbarkeit).

Weitere Informationen zum Erstellen der Datenbanktabellen und der erforderlichen Skripts mithilfe der CDC Designer Console finden Sie unter Verwenden des Assistenten für neue Instanzen.

Rollen von CDC-Datenbankbenutzern

Wenn eine CDC-Datenbank erstellt und für CDC aktiviert wird, wird in der CDC-Datenbank ein Datenbankbenutzer mit dem Namen cdc_service erstellt und der SQL Server -Anmeldung zugeordnet, mit der der Oracle CDC Service konfiguriert wurde. Dieser Benutzer wird zum Mitglied der Datenbankrollen db_datareader, db_datawriterund db_ddladmin gemacht. Wenn die SQL Server -Anmeldung auch dem dbo -Benutzer zugeordnet ist, wird der cdc_service nicht erstellt.

Diese Rollenzuweisung ermöglicht es dem Oracle CDC Service, die Tabellen unter dem cdc -Schema mit aufgezeichneten Daten und Steuerinformationen zu aktualisieren.

Wenn eine CDC-Datenbank erstellt wird und Oracle CDC-Quelltabellen eingerichtet werden, kann der CDC-Datenbankbesitzer die SELECT-Berechtigung für Spiegeltabellen gewähren und SQL Server CDC-Gatingrollen definieren, um zu steuern, welche Benutzer auf die Änderungsdaten zugreifen können.

Spiegeltabellen

Für jede aufgezeichnete Tabelle der Form <Schemaname>.<Tabellenname> in der Oracle-Quelldatenbank wird in der CDC-Datenbank eine ähnliche leere Tabelle erstellt, die das gleiche Schema und den gleichen Tabellennamen aufweist. Oracle-Quelltabellen mit dem Schemanamen cdc (Groß-/Kleinschreibung nicht berücksichtigt) können nicht aufgezeichnet werden, da das Schema cdc unter SQL Server für die SQL Server CDC reserviert ist.

Die Spiegeltabellen sind leer. Darin werden keine Daten gespeichert. Sie werden verwendet, um die standardmäßige SQL Server CDC-Infrastruktur zu aktivieren, die von der Oracle CDC-Instanz verwendet wird. Um zu verhindern, dass Daten in die Spiegeltabellen eingefügt oder darin aktualisiert werden, werden alle UPDATE-, DELETE- und INSERT-Vorgänge für PUBLIC verweigert. Dadurch wird sichergestellt, dass die Daten nicht geändert werden können.

Zugreifen auf Änderungsdaten

Aufgrund des SQL Server -Sicherheitsmodells, das zur Erlangung des Zugriffs auf die Änderungsdaten verwendet wird, die einer Aufzeichnungsinstanz zugeordnet sind, muss dem Benutzer der select -Zugriff auf alle aufgezeichneten Spalten der zugeordneten Spiegeltabelle gewährt werden (Zugriffsberechtigungen für die ursprünglichen Oracle-Tabellen bieten keinen Zugriff auf die Änderungstabellen in SQL Server). Informationen zum SQL Server -Sicherheitsmodell finden Sie unter Sicherheitsmodell.

Wenn bei Erstellung der Aufzeichnungsinstanz eine Gatingrolle angegeben wird, muss der Aufrufer außerdem Mitglied der angegebenen Gatingrolle sein. Andere allgemeine Change Data Capture-Funktionen für den Zugriff auf Metadaten stehen für alle Datenbankbenutzer mit der Rolle PUBLIC zur Verfügung. Der Zugriff auf die zurückgegebenen Metadaten wird jedoch in der Regel auch hier durch die Zugriffsberechtigungen auf die zugrunde liegenden Quelltabellen und die Mitgliedschaft in definierten Gatingrollen beschränkt.

Änderungsdaten können gelesen werden, indem spezielle tabellenbasierte Funktionen aufgerufen werden, die von der SQL Server CDC-Komponente beim Erstellen einer Aufzeichnungsinstanz generiert werden. Weitere Informationen zu diesen Funktionen finden Sie unter Change Data Capture-Funktionen (Transact-SQL).

Der Zugriff auf die CDC-Daten über die Integration Services CDC-Quellkomponente unterliegt den gleichen Regeln.

CDC-Datenbanktabellen

In diesem Abschnitt werden die folgenden Tabellen in der CDC-Datenbank beschrieben.

Änderungstabellen (_CT)

Die Änderungstabellen werden aus den Spiegeltabellen erstellt. Sie enthalten die Änderungsdaten, die in der Oracle-Datenbank aufgezeichnet werden. Die Tabellen werden nach der folgenden Konvention benannt:

[cdc].[<Erfassungsinstanz>_CT]

Wenn die Aufzeichnung anfänglich für die Tabelle <schema-name>.<table-name>aktiviert ist, ist der Standardname der Aufzeichnungsinstanz <schema-name>_<table-name>. Der Standardname der Aufzeichnungsinstanz für die Oracle-Tabelle HR.EMPLOYEES ist z. B. HR_EMPLOYEES, und die zugeordnete Änderungstabelle ist [cdc]. [HR_EMPLOYEES_CT].

In die Aufzeichnungstabellen wird von der Oracle CDC-Instanz geschrieben. Sie werden mit speziellen Tabellenwertfunktionen gelesen, die von SQL Server beim Erstellen der Aufzeichnungsinstanz generiert werden. Beispiel: fn_cdc_get_all_changes_HR_EMPLOYEES. Weitere Informationen zu diesen CDC-Funktionen finden Sie unter Change Data Capture-Funktionen (Transact-SQL).

cdc.lsn_time_mapping

Die Tabelle [cdc].[lsn_time_mapping] wird von der SQL Server-CDC-Komponente generiert. Sie wird in Verbindung mit Oracle CDC anders als sonst verwendet.

Für Oracle CDC basieren die in dieser Tabelle gespeicherten LSN-Werte auf dem Oracle System Change Number (SCN)-Wert, der der Änderung zugeordnet ist. Die ersten 6 Bytes des LSN-Werts stehen für die ursprüngliche Oracle SCN-Nummer.

In den Zeitspalten (tran_begin_time und tran_end_time) wird auch bei Verwendung von Oracle CDC die UTC-Zeit der Änderung gespeichert, und nicht die Ortszeit, wie dies bei der normalen SQL Server CDC der Fall ist. Dadurch wird sichergestellt, dass sich Sommerzeitänderungen nicht auf die unter lsn_time_mapping gespeicherten Daten auswirken.

cdc.xdbcdc_config

Diese Tabelle enthält die Konfigurationsdaten für die Oracle CDC-Instanz. Sie wird mit der CDC Designer Console aktualisiert. Diese Tabelle hat nur eine Zeile.

In der folgenden Tabelle werden die Spalten der Tabelle cdc.xdbcdc_config beschrieben.

Element BESCHREIBUNG
version Hiermit wird die Version der CDC-Instanzkonfiguration verfolgt. Sie wird bei jeder Aktualisierung der Tabelle und bei jeder Hinzufügung einer neuen Aufzeichnungsinstanz oder Entfernung einer vorhandenen Aufzeichnungsinstanz aktualisiert.
connect_string Eine Oracle-Verbindungszeichenfolge. Ein grundlegendes Beispiel ist:

<server>:<port>/<instance> (z. B. erp.contoso.com:1521/orcl).

In der Verbindungszeichenfolge kann auch ein Oracle Net-Verbindungsdeskriptor angegeben werden, z. B. (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp) (HOST=erp.contoso.com) (PORT=1521)) (CONNECT_DATA=(SERVICE_NAME=orcl))).

Wenn Sie einen Verzeichnisserver oder tnsnames verwenden, kann die Verbindungszeichenfolge der Name der Verbindung sein.

Weitere Informationen zu Oracle-Verbindungszeichenfolgen finden Sie unter https://go.microsoft.com/fwlink/?LinkId=231153. Sie erhalten dort ausführliche Informationen zu Verbindungszeichenfolgen der Oracle-Datenbank für den Oracle Instant Client, der von Oracle CDC Service verwendet wird.
use_windows_authentication Ein boolescher Wert, der die folgenden Werte haben kann:

0: Ein Oracle-Benutzername und ein dazugehöriges Kennwort werden zur Authentifizierung bereitgestellt (Standardeinstellung).

1: Zum Herstellen einer Verbindung mit der Oracle-Datenbank wird die Windows-Authentifizierung verwendet. Sie können diese Option nur verwenden, wenn die Oracle-Datenbank für die Nutzung der Windows-Authentifizierung konfiguriert ist.
username Der Name des Oracle-Datenbankbenutzers mit Log Mining-Berechtigung. Diese Angabe ist nur obligatorisch, wenn Folgendes gilt: use_windows_authentication = 0.
password Das Kennwort für den Oracle Datenbankbenutzer mit Log Mining-Berechtigung. Diese Angabe ist nur obligatorisch, wenn Folgendes gilt: use_windows_authentication = 0.
transaction_staging_timeout Der Zeitraum in Sekunden, während dessen eine nicht mit Commit bestätigte Oracle-Transaktion im Arbeitsspeicher verbleibt, bevor sie in die Tabelle cdc.xdbcdc_staged_transactions geschrieben wird. Der Standardwert ist 120 Sekunden.
memory_limit Der Arbeitsspeicher-Höchstwert in MB, der zum Zwischenspeichern von Daten im Arbeitsspeicher verwendet werden kann. Ein niedrigere Einstellung führt dazu, dass mehr Transaktionen in die Tabelle cdc.xdbcdc_staged_transactions geschrieben werden. Die Standardeinstellung ist 50 MB.
Optionen Eine Liste der Optionen der Form name[=value][; ]. Wird zum Angeben von sekundären Optionen verwendet (z. B. Ablaufverfolgung, Optimierung). Eine Beschreibung der verfügbaren Optionen finden Sie unten in der Tabelle.

In der folgenden Tabelle werden die verfügbaren Optionen beschrieben.

Name Standard Min Max statischen BESCHREIBUNG
Ablaufverfolgung False - - False Die verfügbaren Werte sind:

True

False

on

aus
cdc_update_state_interval 10 1 120 False Die Größe von Arbeitsspeichersegmenten (in KB), die für eine Transaktion zugeordnet werden (eine Transaktion kann mehr als ein Segment zuordnen). Siehe Spalte „memory_limit“ in der cdc.xdbcdc_config -Tabelle.
target_max_batched_transactions 100 1 1000 True Die maximale Anzahl von Oracle-Transaktionen, die beim Update von SQL Server CT-Tabellen zusammengefasst zu einer Transaktion verarbeitet werden können.
target_idle_lsn_update_interval 10 0 1 False Das Intervall (in Sekunden) zum Aktualisieren der Tabelle lsn_time_mapping , wenn die aufgezeichneten Tabellen keine Aktivität aufweisen.
trace_retention_period 24 1 24*31 False Der Zeitraum (in Stunden), wie lange Meldungen in der Ablaufverfolgungstabelle beibehalten werden.
sql_reconnect_interval 2 2 3600 False Der Zeitraum (in Sekunden), wie lange gewartet wird, bevor eine neue Verbindung zu SQL Serverhergestellt wird. Dieses Intervall wird zusätzlich zum Verbindungstimeout des SQL Server -Clients verwendet.
sql_reconnect_limit -1 -1 -1 False Die maximale Anzahl von erneuten SQL Server -Verbindungsversuchen. Die Standardeinstellung -1 bedeutet, dass der Prozess so lange versucht, erneut eine Verbindung herzustellen, bis er beendet wird.
cdc_restart_limit 6 -1 3600 False In den meisten Fällen startet der CDC-Dienst eine abnormal beendete CDC-Instanz automatisch neu. Diese Eigenschaft definiert, nach wie vielen Fehlern pro Stunde der Dienst das Neustarten der Instanz beendet. Der Wert -1 bedeutet, dass die Instanz immer neu gestartet werden soll.

Der Dienst fährt dann nach jedem Update der Konfigurationstabelle damit fort, die Instanz neu zu starten.
cdc_memory_report 0 0 1000 False Wenn der Wert des Parameters geändert wurde, gibt die CDC-Instanz den zugehörigen Arbeitsspeicherbericht in der Ablaufverfolgungstabelle aus.
target_command_timeout 600 1 3600 False Befehlstimeout bei Verwendung von SQL Server.
source_character_set - - - True Kann auf eine bestimmte Oracle-Codierung festgelegt werden, die anstelle der Codepage der Oracle-Datenbank verwendet werden soll. Dies kann nützlich sein, wenn sich die tatsächliche Codierung, die für die Zeichendaten verwendet wird, von der Codierung unterscheidet, die von der Codepage der Oracle-Datenbank vorgegeben wird.
source_error_retry_interval 30 1 3600 False Wird bei mehreren Fehlern verwendet, z. B. einem Verbindungsfehler oder einer vorübergehenden fehlenden Synchronisierung zwischen Systemtabellen, bevor der Vorgang wiederholt wird.
source_prefetch_size 100 1 10000 True Größe des Vorabruf-Batch.
source_max_tables_in_query 100 1 10000 True Maximale Anzahl von Tabellen in der WHERE-Klausel, bevor zum Lesen des Oracle-Protokolls ohne Tabellenfilterung gewechselt wird.
source_read_retry_interval 2 1 3600 False Der Zeitraum, wie lange die Quelle wartet, bis sie versucht, die Oracle-Transaktionsprotokolle bei EOF erneut zu lesen.
source_reconnect_interval 30 1 3600 False Der Zeitraum (in Sekunden), wie lange vor dem Versuch, eine neue Verbindung mit der Quelldatenbank herzustellen, gewartet wird.
source_reconnect_limit -1 -1 False Die maximale Anzahl der versuchten Verbindungsversuche mit der Quelldatenbank. Die Standardeinstellung -1 bedeutet, dass der Prozess so lange versucht, erneut eine Verbindung herzustellen, bis er beendet wird.
source_command_timeout 30 1 3600 False Verbindungstimeout beim Verwenden von Oracle.
source_connection_timeout 30 1 3600 False Verbindungstimeout bei Verwendung von SQL Server.
trace_data_errors True - - False Boolesch. True gibt an, dass Fehler beim Konvertieren und Abschneiden von Daten protokolliert werden.
CDC_stop_on_breaking_schema_changes False - - False Boolesch. True gibt an, dass der Vorgang beendet werden soll, wenn fehlerhafte Schemaänderungen erkannt werden.

False gibt an, dass die Spiegeltabelle und die Aufzeichnungsinstanz gelöscht werden sollen.
source_oracle_home - - False Kann auf einen bestimmten Oracle Home-Pfad oder einen Oracle Home-Namen festgelegt werden, der von der CDC-Instanz zum Herstellen einer Verbindung zu Oracle verwendet wird.

cdc.xdbcdc_state

Diese Tabelle enthält Informationen zum permanenten Status der Oracle CDC-Instanz. Der Aufzeichnungsstatus wird bei Wiederherstellungs- und Failoverszenarien sowie für die Systemüberwachung verwendet.

In der folgenden Tabelle werden die Spalten der Tabelle cdc.xdbcdc_state beschrieben.

Element BESCHREIBUNG
status Der aktuelle Statuscode für die aktuelle Oracle CDC-Instanz. Der Status beschreibt den aktuellen Zustand für die CDC.
sub_status Status der zweiten Ebene, der zusätzliche Informationen zum aktuellen Status liefert.
aktiv Ein boolescher Wert, der die folgenden Werte haben kann:

0: Der Oracle CDC-Instanzprozess ist nicht aktiv.

1: Der Oracle CDC-Instanzprozess ist aktiv.
error Ein boolescher Wert, der die folgenden Werte haben kann:

0: Der Oracle CDC-Instanzprozess befindet sich nicht in einem Fehlerzustand.

1: Die Oracle CDC-Instanz befindet sich in einem Fehlerzustand.
status_message Eine Zeichenfolge, die eine Beschreibung des Fehlers oder des Status darstellt.
timestamp Der Zeitstempel mit der Uhrzeit (UTC), zu der der Aufzeichnungsstatus zuletzt aktualisiert wurde.
active_capture_node Der Name des Hosts (der Host kann ein Knoten auf einem Cluster sein), auf dem momentan der Oracle CDC Service und die Oracle CDC-Instanz (auf der die Oracle-Transaktionsprotokolle verarbeitet werden) ausgeführt werden.
last_transaction_timestamp Ein Zeitstempel mit der Uhrzeit (UTC), zu der die letzte Transaktion in die Änderungstabellen geschrieben wurde.
last_change_timestamp Ein Zeitstempel mit der Uhrzeit (UTC), zu der der letzte Änderungsdatensatz aus dem Oracle-Quelltransaktionsprotokoll gelesen wurde. Anhand dieses Zeitstempels können Sie die aktuelle Latenzzeit des CDC-Prozesses ermitteln.
transaction_log_head_cn Die letzte Änderungsnummer (CN), die aus dem Oracle-Transaktionsprotokoll gelesen wurde.
transaction_log_tail_cn Die Änderungsnummer (CN) im Oracle-Transaktionsprotokoll, auf das die Oracle CDC-Instanz bei einem Neustart oder einer Wiederherstellung zurückgreift.
current_cn Die letzte bekannte Änderungsnummer (CN) in der Quelldatenbank.
software_version Die interne Version des Oracle CDC Service.
completed_transactions Die Anzahl der Transaktionen, die seit der letzten CDC-Zurücksetzung verarbeitet wurden.
written_changes Die Anzahl der Änderungsdatensätze, die in die SQL Server -Änderungstabellen geschrieben werden.
read_changes Die Anzahl der Änderungsdatensätze, die aus dem Oracle-Quelltransaktionsprotokoll gelesen werden.
staged_transactions Die Anzahl der momentan aktiven Transaktionen, die in der Tabelle cdc.xdbcdc_staged_transactions bereitgestellt werden.

cdc.xdbcdc_trace

Diese Tabelle enthält Informationen zum Betrieb der CDC-Instanz. Zu den in dieser Tabelle gespeicherten Informationen zählen Fehlerdatensätze, wichtige Statusänderungen und Ablaufverfolgungsdatensätze. Fehlerinformationen werden auch in das Windows-Ereignisprotokoll geschrieben, um sicherzustellen, dass auf die Informationen zugegriffen werden kann, wenn die Tabelle cdc.xcbcdc_trace nicht verfügbar ist.

In der folgenden Tabelle werden die Spalten der Tabelle cdc.xdbcdc_trace beschrieben.

Element BESCHREIBUNG
timestamp Der genaue UTC-Zeitstempel mit der Uhrzeit, zu der der Ablaufverfolgungsdatensatz geschrieben wurde.
type Enthält einen der folgenden Werte.

ERROR

INFO

TRACE
Knoten Der Name des Knotens, unter dem der Datensatz geschrieben wurde.
status Der Statuscode, der von der Statustabelle verwendet wird.
sub_status Der Unterstatuscode, der von der Statustabelle verwendet wird.
status_message Die Statusmeldung, die von der Statustabelle verwendet wird.
data Zusätzliche Daten für Fälle, in denen der Fehler oder der Ablaufverfolgungsdatensatz eine Nutzlast enthält (z. B. einen beschädigten Protokolldatensatz).

cdc.xdbcdc_staged_transactions

In dieser Tabelle werden Änderungsdatensätze für große Transaktionen oder Transaktionen mit langer Laufzeit gespeichert, bis der Transaktionscommit oder das Rollbackereignis aufgezeichnet wird. Der Oracle CDC Service sortiert aufgezeichnete Protokolldatensätze für jede Transaktion nach Transaktionscommit-Zeitpunkt und dann nach der chronologischen Reihenfolge. Protokolldatensätze für dieselbe Transaktion werden im Arbeitsspeicher gespeichert, bis die Transaktion endet, und dann in die Änderungszieltabelle geschrieben oder verworfen (bei einem Rollback). Da nur eine begrenzte Menge an Arbeitsspeicher vorhanden ist, werden große Transaktionen in die Tabelle cdc.xdbcdc_staged_transactions geschrieben, bis die Transaktion abgeschlossen ist. Transaktionen werden auch in die Stagingtabelle geschrieben, wenn die Ausführung lange dauert. Daher müssen die alten Änderungen beim Neustarten der Oracle CDC-Instanz nicht neu aus den Oracle-Transaktionsprotokollen gelesen werden.

In der folgenden Tabelle werden die Spalten der Tabelle cdc.xdbcdc_staged_transactions beschrieben.

Element BESCHREIBUNG
transaction_id Der eindeutige Transaktionsbezeichner der bereitgestellten Transaktion.
seq_num Die Nummer der Zeile xcbcdc_staged_transactions für die aktuelle Transaktion (beginnend mit 0).
data_start_cn Die Änderungsnummer (CN) für die erste Änderung der Daten in dieser Zeile.
data_end_cn Die Änderungsnummer (CN) für die letzte Änderung der Daten in dieser Zeile.
data Die bereitgestellten Änderungen für die Transaktion in BLOB-Form.

Weitere Informationen

Change Data Capture Designer für Oracle von Attunity