Change Data Capture Service for Oracle–Teil 1

sql_200x200Mit dem SQL Server 2012 hat Microsoft den Integration Services eine CDC Unterstützung für SQL Server und für Oracle über eine ordentliche GUI und ein paar SSIS Komponenten spendiert. Grundsätzlich ist Change Data Capture ja bereits seit der Version 2008 Bestandteil des SQL Server, jedoch rein über T-SQL und dies ist von der Konfiguration her innerhalb der Integration Services nicht immer sehr einfach oder komfortabel gewesen. Eine gute GUI für den SQL Server gab es hier schon seit längerem von Attunity, der Zugriff auf Oracle allerdings war bisher nur über die komerziellen Komponenten von Attunity möglich.

Attunity

 

Mit dem SQL Server 2012 hat Microsoft die CDC Komponenten für Oracle und den SQL Server von Attunity lizensiert und mit in den Funktionsumfang des SQL Server (ab der Enterprise Edition) aufgenommen. Die Integration Services verfügen damit nun über einen CDC Control Task, sowie einer CDC Source und einem CDC Splitter. Alle 3 Komponenten können dabei sowohl für den SQL Server wie auch für Oracle eingesetzt werden. Für Oracle existieren mit den Oracle CDC Service Configuration und den Oracle CDC Designer Configuration zusätzlich noch zwei weitere Programme zur Konfiguration des CDC.

Während für Change Data Capture mit dem SQL Server direkt gestartet werden kann, sind für Oracle jedoch ein paar weitere Schritte notwendig. Im Folgenden gehe ich kurz auf die vorgehensweise zur Konfiguration von CDC für Oracle näher ein. Wer wissen möchte wie CDC für den SQL Server eingesetzt wird, dem empfehle ich den Artikel CDC in SSIS for SQL Server 2012 von Matt Masson.

 

Installation der CDC Komponenten

Für die Konfiguration von CDC für Oracle gibt es die beiden angesprochenen zusätzlichen Programme, die außerhalb der SQL Server Data Tools zur Verfügung stehen: die Oracle CDC Service Configuration und die Oracle CDC Designer Configuration. Wer nun nach der Installation des SQL Server 2012 verzweifelt nach diesen beiden Produkten sucht, der wird nicht fündig werden. Beide Programme müssen explizit von der SQL Server 2012 CD nachinstalliert werden, dies geht nicht über den Standard SQL Server Installations Dialog.

Hierfür finden sich im Verzeichnis ToolsAttunityCDCOracle jeweils für x86 wie auch für x64 die entsprechenden Installationsdateien AttunityOracleCdcDesigner.msi und AttunityOracleCdcService.msi. Nach der Installation beider Programme befindet sich im Startmenü ein neues Verzeichnis Change Data Capture for Oracle by Attunity in dem Verknüpfungen zu den beiden neuen Programmen zu finden sind.

 

Oracle CDC Service Configuration

Als erstes wird nun ein neuer CDC Service konfiguriert werden. Hierfür wird der Change Data Capture Service Configuration for Oracle by Attunity gestartet, der sich wie bei Attunity üblich als MMC präsentiert.

imageNun wird der SQL Server für die Verwendung von Oracle CDC vorbereitet. Dies klingt im ersten Moment vielleicht etwas merkwürdig, da ja Oracle CDC konfiguriert und verwendet werden soll und nicht Microsoft SQL Server. Für die Verwendung der Oracle CDC werden jedoch 2 Datenbanken auf dem SQL Server benötigt. Zum einen wird eine Konfigurationsdatenbank benötigt, in der sämtliche Informationen zu den erstellten Oracle CDC Services gespeichert werden. Diese Datenbank wird mit diesem Schritt erstellt. Zum anderen wird, um auf die Daten aus dem Oracle Tranaktionslog per Integration Services sauber zugreifen zu können, eine Datenbank benötigt, in der diese Daten zwischengespeichert werden. Auch hierfür wird ein SQL Server verwendet. Diese Datenbank wird jedoch erst im nächsten Schritt Oracle CDC Designer Configuration erstellt.

Um den SQL Server nun für die CDC Services vorzubereiten, wird die Aktion Prepare SQL Server ausgeführt. Diese Aktion legt auf dem SQL Server die Datenbank MSXDBCDC an. Wie bei Attunity an vielen Stellen üblich, kann man sich das genaue T-SQL Script an dieser Stelle auch anzeigen lassen oder dieses speichern.

image

image

Nachdem der SQL Server entsprechend vorbereitet worden ist, kann nun der CDC Service konfiguriert werden. Hierfür wird aus dem oben gezeigten Scrennshot der Punkt New Services ausgewählt. Für die Konfiguration muss nun ein Service Account definiert werden unter dem der Oracle CDC Service läuft, einen entsprechend Login für den SQL Server und ein CDC Service master password. Als Service Account verwende ich für diese Demo einfachheitshalber den Local System account, als SQL Login die Windows Authentifizierung. 

Das Master Password wird dafür verwendet die Oracle credentials die vom CDC Service im SQL Server abeglegt werden zu verschlüsseln.

image

Nach erfolgreichem Abschluss des konfigurationeditors erscheint im linken Bereich der MMC als neuer Knotepunkt unterhalb von Local CDC Service der nun neu konfigurierte CDC Service OracleCDCService.

 

Oracle CDC Designer Configuration

Im nächsten Schritt wird nun der CDC Designer aufgerufen und eine entsprechende CDC Instanz erstellt. Beim Aufrufen des CDC Designer wird sich dafür mit der SQL Server Instanz verbunden, auf der zuvor die CDC Service Configuration stattgefunden hat, und der entsprechende CDC Service erscheint innerhalb des CDC Designers. Über die Aktion New Oracle CDC Instance wird der Wizard zum Konfigurieren der CDC Instanz aufgerufen.

image

Jede CDC Instanz verwendet eine eigene Datenbank, der Name ergibt sich aus dem jeweilgen Namen der CDC Instanz. Auch wenn es sich hier um einen Wizard handelt mit dem die CDC Instanz konfiguriert wird, muss die Datenbank explizit über den Button Create Database angelegt werden, vorher kann nicht zum nächsten Schritt übergegangen werden.

Im nächsten Schritt kommt für den SQL Server Developer der mit Sicherheit bisher schwierigste Schritt, der Connection String zur Oracle Datenbank.

An dieser Stelle ist es wichtig, dass auf dem entsprechenden SQL Server, auf dem CDC Instanz konfiguriert wird, auch die entsprechenden Client Tools für den Zugriff auf Oracle im richtigen Mouds (x86/x64) installiert sind. Sind falsche Versionen installiert, lassen sich jedoch die Client Tools in der richtigen Version nachinstallieren.

imageimage

Den Connection String zum Oracle Server bekommt man am einfachsten aus der tnsnames.ora heraus, diese liegt normalerweise im Verzeichnis $ORACLE_HOMEnetworkadmin.

Für meine Version ist der folgende Eintrag in der tnsnames.ora enthalten:

XE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = AttunityReplicate)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
)

Die für den ConnectionString relavten Parts sind farbig hervorgehoben. Somit lautet der Connection String zu meiner Oracle XE AttunityReplicate:1521/XE.

image

Im nächsten Schritt werden dann die zu “überwachenden” Tabellen ausgewählt.

image image

Es können mehrere Tabellen aus verschiedenen Schemata zur Überwachung innerhalb einer CDC Instanz ausgewählt werden. In meinem Beispiel wähle ich die Tabellen DEMO_CUSTOMERS, DEMO_ORDERS und DEMO_ORDERS_ITEMS jeweils aus dem Schema ATTUNITY aus. Bei diesen Daten handelt es sich um eine mit der Oracle XE Edition erstellte Demo Anwendung, die ich im zweiten Teil dieser Beitrags noch einmal kurz vorstellen werde.

Um die entsprechenden Tabellen innerhalb der Oracle Datenbank für das CDC vorzubereiten, müssen noch ein paar SQL Scripte für die jeweiligen Tabellen auf der Oracle Datenbank ausgeführt werden. Auch diese Scripte können wieder direkt aus dem Wizard heraus ausgeführt oder gespeichert werden. Werden diese Scripte aus dem Wizard heraus ausgeführt, so muss man sich noch einmal an der Oracle Datenbank mit einem User der über entsprechende Berechtigungen zum Ausführen der Scripte verfügt anmelden.

Im letzten Schritt wird die Oracle CDC Instanz endgültig konfiguriert und entsprechende Mirror Tables auf der SQLS Server CDC Datenbank erstellt…sofern alles richtig konfiguriert ist.

imageimageimageimage

Die Oracle Datenbank benötigt vor der Ausführung der entsprechenden Scripte weitere grundlegende Konfigurationseigenschaften. In der (ursprünglichen) kommerziellen Version von Attunity waren auch diese Schritte über den Wizard konfigurierbar bzw. ausführbar. Der Wizard gibt hier zwar sehr deutliche Fehlermeldung inkl. der entsprechenden SQL Scripte aus, die dann manuell auf der Oracle Datenbank ausgeführt werden müssen, jedoch fehlen in den meisten Umgebungen noch ein paar zusätzliche Schritte/Befehle.

Der erste Befehl ALTER DATABASE ADD SUPPLEMENTAL LOG DATA aktiviert das supplemental logging auf der Oracle Datenbank, dies ist das eigentlich CDC seitens Oracle. Mit dem zweiten Befehl ALTER DATABASE ARCHIVELOG wird die Datenbank so konfiguriert, dass die Redo Logs, aus dem sich der CDC Prozess die eigentlichen Änderungen holt, nicht mehr überschrieben, sondern archiviert werden. Für die Ausführung der Befehle werden spezielle Berechtigungen benötigt und die Datenbank muss vor dem setzen des Archivelogs angehalten werden. Diese zusätzlichen Befehle werden an dieser Stelle nicht mit angegeben. Um die Datenbank sauber zu konfigurieren werden am besten die folgenden Befehle mit SQLPlus oder dem Programm SQL Command Line der XE Edition ausgeführt:

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

SHUTDOWN IMMEDIATE;

STARTUP MOUNT;

ALTER DATABASE ARCHIVELOG;

ALTER DATABASE OPEN;

Zum Ausführen der der Befehle muss mann SYSDBA sein, dies erreicht man z.B. mit dem Befehl CONNECT SYSTEM AS SYSDBA.

image

Nach diesen Änderungen laufen die Scripte zum Erstellen der CDC Instanz einwandfrei durch. Sollte das Anlegen der CDC Instanz vorher bereits fehlgeschlagen sein, so kann die entsprechende Instanz über den Change Data Capture Designer einfach gelöscht und mit dem Wizard wieder neu erstellt werden. Nach dem Erstellen muss die Instanz noch manuell gestartet werden. Dies kann unter umständen ein bisschen Zeit in Anspruch nehmen, hier also nicht nervös werden.

imageimage

imageimage

In meinem nächsten Beitrag werde ich die Konfiguration des CDC Services innerhalb der Integration Services vorstellen und zeigen wie mit SSIS Daten aus dem Oracle System geladen werden können.

Wer im Übrigen neben Oracle oder SQL Server noch andere Datenbanken “im Keller” stehen hat, oder CDC for SSIS nicht unbedingt auf einem SQL Server 2012 einsetzen kann/möchte, sollte sich die weiteren Möglichkeiten von Attunity CDC for SSIS näher anschauen.