Freigeben über


The Oracle CDC Service

Der Oracle CDC Service ist ein Windows-Dienst, der das Programm xdbcdcsvc.exeausführt. Der Oracle CDC-Dienst kann so konfiguriert werden, dass mehrere Windows-Dienste auf demselben Computer ausgeführt werden, jeweils mit einem anderen Windows-Dienstnamen. Das Erstellen mehrerer Oracle CDC Windows-Dienste auf einem einzelnen Computer erfolgt häufig, um eine bessere Trennung zwischen ihnen zu erzielen oder wenn jede mit einer anderen SQL Server-Instanz arbeiten muss.

Ein Oracle CDC Service wird mithilfe der Oracle CDC Service Configuration-Konsole erstellt oder über die Befehlszeilenschnittstelle definiert, die in das xdbcdcsvc.exe-Programm integriert ist. In beiden Fällen wird jeder erstellte Oracle CDC-Dienst einer einzelnen SQL Server-Instanz zugeordnet (die mit AlwaysOn-Setup gruppiert oder gespiegelt werden kann) und die Verbindungsinformationen (Verbindungszeichenfolge und Zugriffsanmeldeinformationen) sind Teil der Dienstkonfiguration.

Wenn ein Oracle CDC Service gestartet wird, versucht er, eine Verbindung mit der SQL Server-Instanz herzustellen, der sie zugeordnet ist, ruft die Liste der Oracle CDC-Instanzen ab, die er verarbeiten muss, und führt eine anfängliche Umgebungsüberprüfung durch. Fehler beim Starten des Diensts und alle Start-/Stopp-Informationen werden immer in das Ereignisprotokoll der Windows-Anwendung geschrieben. Wenn eine Verbindung mit SQL Server hergestellt wird, werden alle Fehler- und Informationsmeldungen in die dbo.xdbcdc_trace Tabelle in der MSXDBCDC-Datenbank der SQL Server-Instanz geschrieben. Eine der Während des Starts vorgenommenen Überprüfungen ist die Überprüfung, dass derzeit kein anderer Oracle CDC Service mit demselben Namen funktioniert. Wenn ein Dienst mit demselben Namen derzeit von einem anderen Computer verbunden ist, gibt der Oracle CDC-Dienst eine Warteschleife ein, und wartet, bis der andere Dienst getrennt wird, bevor die Oracle CDC-Arbeit verarbeitet wird.

Wenn der Oracle CDC Service alle Startüberprüfungen besteht, überprüft er die dbo.xdbcdc_databases Tabelle in der MSXDBCDC-Datenbank nach aktivierten Oracle CDC-Instanzen. Für jede aktivierte Oracle CDC-Instanz startet der Dienst einen Teilprozess, um diese Oracle CDC-Instanz zu verarbeiten.

Wenn eine Oracle CDC-Instanz gestartet wird, greift sie auf die SQL Server CDC-Datenbank mit demselben Namen wie die CDC-Instanz zu und ruft den Status aus der vorherigen Ausführung ab. Außerdem wird überprüft, ob alles ordnungsgemäß ausgeführt wird. Anschließend wird die Verarbeitung von Änderungen fortgesetzt; Lesen der Oracle-Transaktionsprotokolle und Schreiben von Änderungen an der CDC-Datenbank.

Der Oracle CDC Service überwacht in regelmäßigen Abständen die dbo.xdbcdc_tables Tabelle in der MSXDBCDC-Datenbank, um festzustellen, ob Konfigurationsänderungen an einer der Oracle CDC Instance-Konfigurationen vorgenommen wurden. Wenn eine Änderung gefunden wird, benachrichtigt der Oracle CDC Service die Oracle CDC-Instanz, dass sie die Konfiguration auf Änderungen überprüfen sollte. Die meisten Konfigurationsänderungen, z. B. das Hinzufügen und Entfernen von Aufnahmeinstanzen, können angewendet werden, während die Oracle CDC-Instanz aktiviert ist, andere erfordern, dass die Oracle CDC-Instanz neu gestartet wird.

Wenn Sie die Oracle CDC Designer-Konsole verwenden, werden Änderungen automatisch erkannt. Beim direkten Aktualisieren der Oracle CDC-Konfiguration mit SQL sollte das folgende Verfahren aufgerufen werden, damit der Oracle CDC Service die Konfigurationsänderung beachten kann:

DECLARE @dbname nvarchar(128) = 'HRcdc'  
EXECUTE [MSXDBCDC].[dbo].[xdbcdc_update_config_version] @dbname  
GO  
  

Der Oracle CDC Instance-Prozess aktualisiert seinen Status in der Systemtabelle cdc.xdbcdc_state und schreibt Fehlerinformationen in die cdc.xdbcdc_trace Tabelle. Die xdbcdc_state Tabelle ist nützlich, um den Status der Oracle CDC-Instanz zu überwachen. Es stellt up-to-Datumstatus, verschiedene Zähler bereit (z. B. Anzahl der von Oracle gelesenen Änderungen, Anzahl der Änderungen, die in SQL Server geschrieben wurden, Anzahl der in SQL Server geschriebenen bestätigten Transaktionen und die aktuelle Anzahl von laufenden Transaktionen) und bietet eine Latenzanzeige.

Die Oracle CDC Instance-Konfiguration wird in der tabelle cdc.xdbcdc_config gespeichert, bei der es sich um die Tabelle handelt, mit der die Oracle CDC Designer-Konsole verwendet wird. Da die gesamte Konfiguration einer Oracle CDC-Instanz in der SQL Server-Zielinstanz und CDC-Datenbank gefunden wird, ist es möglich, SQL Server-Bereitstellungsskripts für eine Oracle CDC-Instanz zu erstellen. Dies erfolgt mithilfe der Oracle CDC Service Configuration und Oracle CDC Designer Konsolen.

Sicherheitsüberlegungen

Im Folgenden werden die Sicherheitsanforderungen beschrieben, die für die Arbeit mit dem CDC Service für Oracle erforderlich sind.

Schutz von Oracle-Quelldaten

Der Oracle CDC-Dienst erfordert keinen Zugriff auf Oracle-Quelldaten und ist geschützt, indem sichergestellt wird, dass die Log-Mining-Anmeldeinformationen keine SELECT-Berechtigung für Kunden-Oracle-Tabellen erteilen.

Schutz der Oracle-Quelländerungsdaten

Der Oracle CDC-Dienst wird mit Log-Mining-Anmeldeinformationen bereitgestellt, mit denen der Dienst Änderungen erfassen kann, die an einer beliebigen Tabelle in der Oracle-Datenbank vorgenommen wurden. Änderungsdaten verfügen nicht über die granularen Zugriffsberechtigungen, die die regulären Tabellen besitzen, sodass der Zugriff auf Änderungsdaten die integrierten Oracle-Datenzugriffssteuerelemente umgeht.

Erfasste Oracle-Quelltabellen verfügen über leere Spiegeltabellen mit demselben Schema- und Tabellennamen in der CDC-Datenbank. Die erfassten Daten werden in SQL Server-Erfassungsinstanzen gespeichert und bieten den gleichen Schutz wie bei Änderungen, die aus der SQL Server-Datenbank erfasst werden. Um Zugriff auf die Änderungsdaten zu erhalten, die einer Aufnahmeinstanz zugeordnet sind, muss dem Benutzer der auswahlzugriff auf alle erfassten Spalten der zugeordneten Spiegeltabelle gewährt werden. Wenn beim Erstellen der Erfassungsinstanz eine Gatingrolle angegeben wird, muss der Aufrufer außerdem Mitglied der angegebenen Gatingrolle sein. Andere allgemeine Funktionen zur Erfassung von Änderungsdaten 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 auch durch spezielle Zugriffsberechtigungen auf die zugrunde liegenden Quelltabellen und durch die Mitgliedschaft in irgendwelchen definierten Gating-Rollen geregelt wird.

Dies bedeutet, dass Benutzer mit der festen Sysadmin-Serverrolle oder der db_owner festen Datenbankrolle (standardmäßig) vollzugriff auf die erfassten Daten haben und weiteren Zugriff entweder über Gating-Rollen oder durch Gewähren des ausgewählten Zugriffs auf die erfassten Spalten gewährt werden können.

Schutz von Oracle Log Mining-Anmeldeinformationen

Die Oracle CDC-Dienstkonfiguration, die in der CDC-Datenbank (in der cdc.xdbcdc_config Tabelle) gespeichert ist, enthält den Log Mining-Benutzernamen und das zugehörige Kennwort.

Das Protokollminingkennwort wird mithilfe eines asymmetrischen Schlüssels mit dem festen Namen xdbcdc_asym_key verschlüsselt, der automatisch mit dem folgenden Befehl erstellt wird:

USE [<cdc-database-name>]  
CREATE ASYMMETRIC KEY xdbcdc_asym_key  
    WITH ALGORITHM = RSA_1024  
    ENCRYPTION BY PASSWORD = '<cdc-database-name><asym-key-password>'  
  

Wenn ein anderer Algorithmus verwendet wird, kann dieser Schlüssel gelöscht werden und ein neuer mit demselben Namen und verschlüsselt mit demselben Kennwort erstellt werden.

Das asymmetrische Schlüsselkennwort ist das Masterkennwort, das in der Registrierung unter dem Pfad HKLM\Software\Microsoft\XDBCDCSVC\ gespeichert wird. Dieser Schlüssel ist nur für lokale Administratoren und für das Oracle CDC Windows-Dienstkonto zugänglich. Der Schlüssel enthält einen verschlüsselten Binärwert asymmetrischen Schlüsselpasswort, der das Kennwort des asymmetrischen Schlüssels speichert. Der Zugriff auf diesen Registrierungsschlüssel ist erforderlich, um auf die Oracle Log Mining-Anmeldeinformationen zugreifen zu können.

Um die ENCRYPTION BY PASSWORD-Klausel zu verwenden, muss das Kennwort die Windows-Kennwortrichtlinienanforderungen für den Computer erfüllen, auf dem die SQL Server-Instanz ausgeführt wird. Dazu wählen Sie das asymmetrische Schlüsselkennwort gemäß dieser Richtlinie aus.

Wenn das asymmetrische Schlüsselkennwort verloren geht, müssen die Protokoll-Mining-Anmeldeinformationen für jede oracle CDC-Instanz erneut im Oracle CDC Service Designer angegeben werden.

Der asymmetrische Schlüssel wird automatisch in der CDC-Datenbank erstellt, wenn der CDC-Dienst eine Oracle-Instanz-CDC-Datenbank erkennt, die nicht über diesen asymmetrischen Schlüssel verfügt oder wenn der Schlüssel vorhanden ist, aber das Kennwort nicht übereinstimmt.

Oracle-CDC-Dienst Windows-Dienstkonto

Das dienstkonto, das mit dem Oracle CDC Windows-Dienst verwendet wird, erfordert keine zusätzlichen Berechtigungen. Dieses Konto muss sowohl die Oracle Native Client-API als auch die SQL Server Native Client ODBC-API verwenden können. Sie muss auch in der Lage sein, auf den Dienstkonfigurationsschlüssel in der Registrierung zuzugreifen (diese CDC-Dienstkonfigurationskonsole richtet die ACL dafür ein).

In diesem Abschnitt

Siehe auch

So verwalten Sie einen lokalen CDC-Dienst
Verwalten eines Oracle CDC-Diensts