Kapitel 24
ETL in der Praxis
584
24.3 Change Data Capture (CDC)
Change Data Capture (CDC) ist eine effektive Methode zum Laden eines Data
Warehouse, wenn sich die Quelldaten in einer Oracle-Datenbank befinden und
der Anteil der Änderungen klein gegenüber dem Gesamtdatenbestand ist. In den
Quelldatenbanken werden die Änderungen seit der letzten Aktualisierung aufge-
fangen, zur Zieldatenbank transportiert und dort eingearbeitet.
Die Vorteile von CDC sind in den folgenden Punkten zusammengefasst.
Der Ladevorgang wird beschleunigt, da nur die Änderungen seit der letzten
Aktualisierung eingespielt werden.
Die Einarbeitung erfolgt direkt in die Zieldatenbank, ein Umweg über Flat Fi-
les entfällt.
Der Prozess ist sicher, es ist keine Individualprogrammierung erforderlich.
Die Änderungsdaten stehen sofort zur Verfügung.
In Oracle 12c gibt es die beiden Methoden synchrones und asynchrones CDC. Die
asynchrone Methode wurde in Oracle 10g neu eingeführt. Sie basiert auf der
Oracle Streams-Technologie. Synchrones CDC benutzt Trigger in der Quelldaten-
bank für das Mitschneiden von Änderungen.
CDC ist in der Lage, Ladeoperationen im Direct-Path-Modus durchzuführen. Neu
ist auch, dass die Änderungssätze durch Angabe eines Zeitraums gelöscht werden
können.
Beide Methoden verwenden ein Publish and Subscribe-Modell. Der Publisher regist-
riert die Änderungen für die ausgewählten Quelltabellen und bietet sie zur Weiter-
verarbeitung an. Subscriber erhalten Zugriff auf die Änderungsdaten. Für beide
Methoden ist eine Staging Area im Data Warehouse erforderlich, in der die Ände-
rungsdaten gespeichert werden. Die Struktur der Daten entspricht der Struktur
der Quelltabellen. Allerdings ist die Datenmenge in der Regel klein.
Bei synchronem CDC schreiben Trigger die Änderungsdaten in Änderungstabel-
len. Die Änderungstabellen werden über Subscriber-Views publiziert. Die Subscri-
ber benutzen die Views, um die Daten ins Data Warehouse zu laden.
4 FROM TABLE (AggrFacts(CURSOR(SELECT * FROM
5 ext_household_facts)));
4 Zeilen wurden erstellt.
Listing 24.5: Laden der aggregierten Tabelle mit einer Tabellenfunktion
Hinweis
Synchrones CDC hat einen größeren Einfluss auf die Performance der Quelldaten-
bank als asynchrones CDC. Eine Transaktion ist erst abgeschlossen, wenn die Trig-
ger ausgeführt wurden und die Daten in den Änderungstabellen gespeichert sind.
24.3
Change Data Capture (CDC)
585
Abb. 24.1: Die Architektur für synchrones Change Data Capture
Die folgenden Schritte liefern ein Beispiel für synchrones Change Data Capture.
Die Fact Table household_facts in einem Data Warehouse wird aus der Tabelle
accounts eines operativen Systems gefüllt. Da die Tabellen sehr groß sind, wäre ein
komplettes Neuladen sehr aufwendig. Die Tabelle accounts ist aus CDC-Sicht die
Quelltabelle. Zuerst muss durch den Publisher eine Änderungstabelle erstellt wer-
den. Der Publisher ist der DBA der operativen Datenbank.
Mit der Prozedur haben Sie die Änderungstabelle ct_accounts erstellt. Dabei sind
nur die Spalten account_id und balance für die Änderungen relevant. Der Parame-
ter capture_values legt fest, dass nur neue Daten in die Änderungstabelle geschrie-
SQL> EXEC dbms_cdc_publish.create_change_table (owner=>'DWH',
change_table_name=>'CT_ACCOUNTS', change_set_name =>'SYNC_SET',
source_schema=>'DWH', source_table=>'ACCOUNTS', column_type_list=>'account_id
NUMBER(14), balance NUMBER(10,2)', capture_values=>'new', rs_id=>'y',
row_id=>'y', user_id=>'n', timestamp=>'n', object_id=>'n', source_colmap=>'y',
target_colmap=>'y', options_string=>NULL);
PL/SQL-Prozedur wurde erfolgreich abgeschlossen.
Listing 24.6: Eine Änderungstabelle für CDC erstellen
Kapitel 24
ETL in der Praxis
586
ben werden sollen. Als Subscriber wurde der Benutzer dwh festgelegt. Mit der
Anweisung in Listing 24.7 gibt der Publisher dem Subscriber Lesezugriff auf die
Änderungstabelle.
Im weiteren Verlauf muss der Subscriber eine Subscription erwerben. Führen Sie
dazu die folgenden Schritte durch:
1. Der Subscriber muss herausfinden, welche Tabellen publiziert wurden.
2. Im nächsten Schritt muss der Subscriber ein sogenanntes Subscription Handle
erwerben.
3. Jetzt kann die Subscription für die Quelltabelle erworben werden. Dabei gibt der
Subscriber die Spalten an, die ihn interessieren. Um festzustellen, auf welche
Spalten Zugriff erteilt wurde, kann der View ALL_PUBLISHED_COLUMNS
abgefragt werden.
SQL> GRANT SELECT on ct_accounts TO dwh;
Benutzerzugriff (Grant) wurde erteilt.
Listing 24.7: Leseberechtigungen für die Änderungstabelle erstellen
SQL> SELECT * FROM all_source_tables;
SOURCE_SCHEMA_NAME SOURCE_TABLE_NAME
------------------------------ ------------------
DWH ACCOUNTS
SQL> SET SERVEROUTPUT ON
SQL> DECLARE
2 sub_handle NUMBER;
3 BEGIN
4 dbms_logmnr_cdc_subscribe. get_subscription_handle (change_set =>
'SYNC_SET', description => 'Data for DWH', subscription_handle =>
sub_handle);
5 DBMS_OUTPUT.PUT_LINE('Subscription Handle: ' ||
TO_CHAR(sub_handle));
6 END;
7 /
Subscription Handle: 1
PL/SQL-Prozedur wurde erfolgreich abgeschlossen.
SQL> DECLARE
2 sub_handle NUMBER;
3 BEGIN
4 sub_handle := 1;
5 dbms_cdc_subscribe.subscribe(
6 subscription_handle => sub_handle, source_schema =>
7 'dwh', source_table => 'accounts', column_list =>

Get Oracle 12c - Das umfassende Handbuch now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.