Die Oracle CDC-Datenbanken

Von Bedeutung

Change Data Capture für Oracle von Attunity ist inzwischen veraltet. Weitere Details finden Sie in der Ankündigung.

Eine Oracle CDC-Instanz ist einer SQL Server-Datenbank mit demselben Namen in der SQL Server-Zielinstanz zugeordnet. Diese Datenbank wird als Oracle CDC-Datenbank (oder CDC-Datenbank) bezeichnet.

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

  • Ein cdc Schema, das durch Aktivieren der Datenbank für SQL Server CDC erstellt wurde.

  • Eine Reihe von cdc.xdbcdc_xxxx Tabellen, die von der Oracle CDC-Instanz verwendet werden.

  • Eine Reihe leerer Spiegeltabellen mit den Definitionen der erfassten Tabellen in tuphe Source Oracle-Datenbank.

  • Eine Reihe von Änderungstabellen und Änderungszugriffsfunktionen, die vom SQL Server CDC-Mechanismus generiert werden und mit denen identisch sind, die im regulären, nicht Oracle, SQL Server CDC verwendet werden.

Das cdc Schema ist zunächst nur für die Mitglieder der festen Datenbankrolle "dbowner " zugänglich. Der Zugriff auf die Änderungstabellen und Änderungsfunktionen wird durch dasselbe Sicherheitsmodell wie das SQL Server CDC bestimmt. Weitere Informationen zum Sicherheitsmodell finden Sie unter "Sicherheitsmodell".

Erstellen der CDC-Datenbank

In den meisten Fällen wird die CDC-Datenbank mithilfe der CDC Designer Console erstellt, kann aber auch mit einem CDC-Bereitstellungsskript erstellt werden, das mit der CDC Designer-Konsole generiert wird. Der SQL Server-Systemadministrator kann die Datenbankeinstellungen bei Bedarf ändern (z. B. für Speicher, Sicherheit oder Verfügbarkeit).

Weitere Informationen zur Verwendung der CDC Designer-Konsole zum Erstellen der Datenbanktabellen und der erforderlichen Skripts finden Sie unter Verwenden des Assistenten für neue Instanzen.

CDC-Datenbankbenutzerrollen

Wenn eine CDC-Datenbank für CDC erstellt und aktiviert wird, wird ein Datenbankbenutzer namens cdc_service in der CDC-Datenbank erstellt und der SQL Server-Anmeldung zugeordnet, mit der der Oracle CDC Service konfiguriert wurde. Dieser Benutzer wird zu einem Mitglied der db_datareader-, db_datawriter- und db_ddladmin-Datenbankrollen. Wenn die SQL Server-Anmeldung auch dem Benutzer zugeordnet dbo ist, wird die 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 (ohne Groß-/Kleinschreibung) können nicht erfasst werden, da das cdc Schema in SQL Server für das SQL Server CDC reserviert ist.

Die Spiegeltabellen sind leer; in ihnen 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 keine Daten in die Spiegeltabellen eingefügt oder aktualisiert werden, sind für PUBLIC alle UPDATE-, DELETE- und INSERT-Vorgänge verboten. Dadurch wird sichergestellt, dass sie nicht geändert werden können.

Zugriff auf Änderungsdaten

Aufgrund des SQL Server-Sicherheitsmodells, das verwendet wird, um Zugriff auf die Änderungsdaten zu erhalten, die einer Erfassungsinstanz zugeordnet sind, muss dem Benutzer Zugriff auf alle erfassten Spalten der zugeordneten Spiegeltabelle gewährt select 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 Security Model.

Wenn bei Erstellung der Aufzeichnungsinstanz eine Gatingrolle angegeben wird, muss der Aufrufer außerdem Mitglied der angegebenen Gatingrolle sein. Andere allgemeine Änderungsdatenerfassungsfunktionen für den Zugriff auf Metadaten sind für alle Datenbankbenutzer über die ÖFFENTLICHE Rolle zugänglich, obwohl der Zugriff auf die zurückgegebenen Metadaten in der Regel mithilfe des ausgewählten Zugriffs auf die zugrunde liegenden Quelltabellen und durch die Mitgliedschaft in definierten Gating-Rollen erfolgt.

Änderungsdaten können gelesen werden, indem spezielle tabellenbasierte Funktionen aufgerufen werden, die von der SQL Server CDC-Komponente generiert werden, wenn eine Aufnahmeinstanz erstellt wird. Weitere Informationen zu dieser Funktion finden Sie unter Change Data Capture Functions (Transact-SQL).

Der Zugriff auf CDC-Daten über die CdC-Quellkomponente für Integrationsdienste unterliegt den gleichen Regeln.

Die CDC-Datenbanktabellen

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

Tabellen ändern (_CT)

Die Änderungstabellen werden aus den Spiegeltabellen erstellt. Sie enthalten die Änderungsdaten, die aus der Oracle-Datenbank erfasst werden. Die Tabellen werden gemäß der folgenden Konvention benannt:

[cdc].[<Erfassungsinstanz>_CT]

Wenn die Erfassung anfänglich für die Tabelle <schema-name>.<table-name>aktiviert ist, lautet <schema-name>_<table-name>der Standardname der Aufnahmeinstanz. 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 generiert werden, wenn die Aufnahmeinstanz erstellt wird. Beispiel: fn_cdc_get_all_changes_HR_EMPLOYEES. Weitere Informationen zu diesen CDC-Funktionen finden Sie unter Change Data Capture Functions (Transact-SQL).

cdc.lsn_time_mapping

Die [cdc].[lsn_time_mapping]-Tabelle wird von der SQL Server CDC-Komponente generiert. Seine Verwendung im Falle von Oracle CDC unterscheidet sich von der normalen Verwendung.

Für das 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 sind die ursprüngliche Oracle SCN-Zahl.

Auch bei Verwendung des Oracle CDC speichern die Zeitspalten (tran_begin_time und tran_end_time) die UTC-Zeit der Änderung anstelle der lokalen Uhrzeit wie bei der regulären SQL Server CDC. Dadurch wird sichergestellt, dass Sommerzeitumstellungen die im lsn_time_mapping gespeicherten Daten nicht beeinträchtigen.

cdc.xdbcdc_config

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

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

Element BESCHREIBUNG
version Dadurch wird die Version der CDC-Instanzkonfiguration nachverfolgt. Sie wird jedes Mal aktualisiert, wenn die Tabelle aktualisiert wird, und jedes Mal, wenn eine neue Aufnahmeinstanz hinzugefügt wird oder eine vorhandene Aufnahmeinstanz entfernt wird.
connect_string Eine Oracle-Verbindungszeichenfolge. Ein einfaches Beispiel ist:

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

Die Verbindungszeichenfolge kann auch einen Oracle Net Connect-Deskriptor angeben, (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp) (HOST=erp.contoso.com) (PORT=1521)) (CONNECT_DATA=(SERVICE_NAME=orcl)))z. B. .

Bei Verwendung eines Verzeichnisservers oder tnsnames kann die Verbindungszeichenfolge der Name der Verbindung sein.

Weitere Informationen zu Oracle-Verbindungszeichenfolgen finden Sie im Call Interface Programmer es Guide, der detaillierte Informationen zu Oracle-Datenbankverbindungszeichenfolgen für den Oracle Instant Client bereitstellt, der vom Oracle CDC Service verwendet wird.
use_windows_authentication Ein boolescher Wert, der folgendes sein kann:

0: Ein Oracle-Benutzername und ein Kennwort werden für die Authentifizierung bereitgestellt (Standardeinstellung)

1: Die Windows-Authentifizierung wird verwendet, um eine Verbindung mit der Oracle-Datenbank herzustellen. Sie können diese Option nur verwenden, wenn die Oracle-Datenbank für die Verwendung der Windows-Authentifizierung konfiguriert ist.
Benutzername Der Name des Log-Mining-Oracle-Datenbankbenutzers. Dies ist nur obligatorisch , wenn use_windows_authentication = 0.
Kennwort Das Kennwort für den Log-Mining-Oracle-Datenbankbenutzer. Dies ist nur obligatorisch, wenn use_windows_authentication = 0.
transaction_staging_timeout Die Zeit in Sekunden, in der eine nicht abgeschlossene Oracle-Transaktion im Arbeitsspeicher gehalten wird, bevor sie in die cdc.xdbcdc_staged_transactions Tabelle geschrieben wird. Der Standardwert ist 120 Sekunden.
Speicherbegrenzung Der Grenzwert für die Speichermenge in MB, die zum Zwischenspeichern von Daten im Arbeitsspeicher verwendet werden kann. Eine niedrigere Einstellung bewirkt, dass mehr Transaktionen in die cdc.xdbcdc_staged_transactions Tabelle geschrieben werden. Der Standardwert 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 in der folgenden Tabelle.

Die verfügbaren Optionen werden in der folgenden Tabelle beschrieben.

Name Standard Min Max. Statisch BESCHREIBUNG
Ablaufverfolgung Falsch - - Falsch Die verfügbaren Werte sind:

Richtig

Falsch

on

Aus
cdc_update_state_interval 10 1 120 Falsch Die Größe (in Kbyte) von Speicherblöcken, die einer Transaktion zugeordnet sind (eine Transaktion kann mehrere Blöcke zuordnen). Sehen Sie die memory_limit-Spalte in der Tabelle cdc.xdbcdc_config an.
target_max_batched_transactions 100 1 1000 Richtig Die maximale Anzahl von Oracle-Transaktionen, die als eine einzige Transaktion bei der Aktualisierung von SQL Server CT-Tabellen verarbeitet werden können.
target_idle_lsn_update_interval 10 0 1 Falsch Das Intervall (in Sekunden) zum Aktualisieren der lsn_time_mapping Tabelle, wenn die erfassten Tabellen keine Aktivität aufweisen.
trace_retention_period 24 1 24*31 Falsch Der Zeitraum (in Stunden), wie lange Meldungen in der Ablaufverfolgungstabelle beibehalten werden.
sql_reconnect_interval (SQL-Wiederverbindungsintervall) 2 2 3600 Falsch Die Zeitspanne (in Sekunden), die gewartet werden soll, bevor die Verbindung mit SQL Server erneut hergestellt wird. Dieses Intervall wird zusätzlich zum Verbindungstimeout des SQL Server-Clients verwendet.
sql_reconnect_limit -1 -1 -1 Falsch Die maximale Anzahl von SQL Server-Erneutverbindungen. Der Standard--1 bedeutet, dass der Prozess versucht, die Verbindung wiederherzustellen, bis die Verbindung beendet wird.
cdc_restart_limit 6 -1 3600 Falsch In den meisten Fällen startet der CDC-Dienst automatisch eine ungewöhnlich beendete CDC-Instanz 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 kehrt zurück, um die Instanz nach einer Aktualisierung der Konfigurationstabelle neu zu starten.
cdc_memory_report 0 0 1000 Falsch 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 Falsch Befehlstimeout bei Verwendung von SQL Server.
source_character_set - - - Richtig Kann auf eine bestimmte Oracle-Codierung festgelegt werden, die anstelle der Oracle-Datenbankcodepage verwendet werden soll. Dies kann verwendet werden, wenn sich die tatsächliche Codierung der Zeichendaten von der Oracle-Datenbankcodepage unterscheidet.
source_error_retry_interval 30 1 3600 Falsch Wird vor dem Neustarten bei mehreren Fehlern verwendet, wie beispielsweise einem Verbindungsfehler oder einem temporären Mangel an Synchronisierung zwischen den Systemtabellen.
source_prefetch_size 100 1 10.000 Richtig Größe des Vorabruf-Batch.
source_max_tables_in_query 100 1 10.000 Richtig Maximale Anzahl von Tabellen in WHERE-Klausel, bevor Sie zum Lesen des Oracle-Protokolls ohne Tabellenfilterung wechseln.
source_read_retry_interval 2 1 3600 Falsch Der Zeitraum, wie lange die Quelle wartet, bis sie versucht, die Oracle-Transaktionsprotokolle bei EOF erneut zu lesen.
source_reconnect_interval 30 1 3600 Falsch Wie lange (in Sekunden) gewartet werden soll, bevor versucht wird, eine Erneute Verbindung mit der Quelldatenbank herzustellen.
source_reconnect_limit -1 -1 Falsch Die maximale Anzahl der erneuten Verbindungen der Quelldatenbank. Der Standard--1 bedeutet, dass der Prozess versucht, die Verbindung erneut herzustellen, bis er beendet wird.
source_command_timeout 30 1 3600 Falsch Verbindungstimeout bei der Arbeit mit Oracle.
source_connection_timeout 30 1 3600 Falsch Verbindungstimeout bei der Arbeit mit SQL Server.
Datenfehler verfolgen Richtig - - Falsch Boolesch. True gibt an, dass Datenkonvertierungs- und Abkürzungsfehler protokolliert werden.
CDC_stop_on_breaking_schema_changes Falsch - - Falsch 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 - - Falsch Kann auf einen bestimmten Oracle Home-Pfad oder einen Oracle Home Name festgelegt werden, den die CDC-Instanz zum Herstellen einer Verbindung mit Oracle verwendet.

cdc.xdbcdc_state

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

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

Element BESCHREIBUNG
status Der aktuelle Statuscode für die aktuelle Oracle CDC-Instanz. Der Status beschreibt den aktuellen Zustand für das CDC.
sub_status Ein Status der zweiten Ebene, der zusätzliche Informationen zum aktuellen Status bereitstellt.
active Ein boolescher Wert, der folgendes sein kann:

0: Der Oracle CDC Instance-Prozess ist nicht aktiv.

1: Der Oracle CDC Instance-Prozess ist aktiv.
Fehler Ein boolescher Wert, der folgendes sein kann:

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

1: Die Oracle CDC-Instanz befindet sich in einem Fehlerzustand.
Statusnachricht Eine Zeichenfolge, die eine Beschreibung des Fehlers oder Status bereitstellt.
Zeitstempel Der Zeitstempel mit der Uhrzeit (UTC), zu der der Aufnahmestatus zuletzt aktualisiert wurde.
active_capture_node Der Name des Hosts (der Host kann ein Knoten in einem Cluster sein), der derzeit den Oracle CDC Service und die Oracle CDC-Instanz ausführt (die die Oracle-Transaktionsprotokolle verarbeitet).
Zeitstempel_der_letzten_Transaktion Ein Zeitstempel mit der Uhrzeit (UTC), zu der die letzte Transaktion in die Änderungstabellen geschrieben wurde.
letzte_Änderungszeitstempel Ein Zeitstempel mit der Uhrzeit (UTC), als der letzte Änderungsdatensatz aus dem Oracle-Quelltransaktionsprotokoll gelesen wurde. Dieser Zeitstempel hilft dabei, die aktuelle Latenz des CDC-Prozesses zu identifizieren.
transaction_log_head_cn Die letzte aus dem Oracle-Transaktionsprotokoll gelesene Änderungsnummer (CN).
transaction_log_tail_cn Die Änderungsnummer (CN) im Oracle-Transaktionsprotokoll, in dem die Oracle CDC-Instanz bei einem Neustart oder einer Wiederherstellung neu positioniert wird.
current_cn Die letzte Änderungsnummer (CN), die in der Quelldatenbank enthalten ist.
software_version Die interne Version des Oracle CDC Service.
abgeschlossene Transaktionen 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 wurden.
read_changes Die Anzahl der Änderungsdatensätze, die aus dem Oracle-Quelltransaktionsprotokoll gelesen werden.
inszenierte_Transaktionen Die Anzahl der momentan aktiven Transaktionen, die in der Tabelle cdc.xdbcdc_staged_transactions bereitgestellt werden.

cdc.xdbcdc_trace

Diese Tabelle enthält Informationen über den 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 die Informationen verfügbar sind, wenn die cdc.xcbcdc_trace Tabelle nicht verfügbar ist.

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

Element BESCHREIBUNG
Zeitstempel Der genaue UTC-Zeitstempel, zu dem der Protokolldatensatz geschrieben wurde.
Typ Enthält einen der folgenden Werte.

FEHLER

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.
Statusnachricht Die Statusmeldung, die von der Statustabelle verwendet wird.
Daten 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 oder lange ausgeführte Transaktionen gespeichert, bis das Transaktions-Commit- oder Rollbackereignis erfasst wird. Der Oracle CDC Service bestellt Protokolldatensätze nach Transaktions-Commit-Zeit und dann nach chronologischer Reihenfolge für jede Transaktion. 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 ein begrenzter Arbeitsspeicher verfügbar ist, werden große Transaktionen in die cdc.xdbcdc_staged_transactions Tabelle geschrieben, bis die Transaktion abgeschlossen ist. Transaktionen werden auch in die Stagingtabelle geschrieben, wenn die Ausführung lange dauert. Wenn die Oracle CDC-Instanz neu gestartet wird, müssen die alten Änderungen daher nicht aus den Oracle-Transaktionsprotokollen erneut gelesen werden.

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

Element BESCHREIBUNG
Transaktions-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 in den Daten in dieser Zeile.
data_end_cn Die Änderungsnummer (CN) für die letzte Änderung in den Daten in dieser Zeile.
Daten Die bereitgestellten Änderungen für die Transaktion in BLOB-Form.

Siehe auch

Ändern des Datenerfassungs-Designers für Oracle durch Attunity