Change Data Capture cz. II
Kontynuujemy temat związany z praktycznym wykorzystaniem technologii Change Data Capture opisanej w poprzednim artykule.
Mamy zatem bazę danych myCDC z włączoną funkcją CDC i zdefiniowanymi obszarami dla danych i indexów CDC.
Wejdżmy jeszcze raz w OE Explorerze w opcję Database Administration.

W sekcji Storage Management znajdziemy opcje, w których możemy zmodyfikować listę tabel lub stworzyć/zmodyfikować zasady CDC (CDC policy).
W sekcji Data Administration znajdują się opcje dla zrzucenia lub załadowania zdefiniowanych zasad CDC.
Podczas tworzenia zasad CDC należy określić poziom (Level), który określa ilość zapisywanych danych. Ilustruje to poniższa tabela.
| Poziom | Opis | Fieldmap | Czy można zmienić poziom? |
| 0 | Przechowywanie danych tylko w Tracking Table | Brak | Nie |
| 1 | Przechowywanie danych tylko w Tracking Table. Zawiera Fieldmap | Odzwierciedla zmienione pola tylko dla aktualizacji | Tak |
| 2 | Zapis aktualnych wartości (after) dla wszystkich operacji CUD (Create, Update, Delete) | Odzwierciedla zmienione pola tylko dla aktualizacji | Tak |
| 3 | Zapis aktualnych wartości (after) oraz poprzednich (before) dla wszystkich operacji CUD |
Odzwierciedla zmienione pola tylko dla aktualizacji | Tak |
Pole Fieldmap jest wykorzystywane wtedy gdy interesuje nas, które pola zastały zmienione, ale nie interesują nas same wartości.
Utwórzmy teraz zasadę CDC poziom 2.
Na stronie Data Administration, w sekcji Storage Management, wybieramy Create Change Data Capture policy.
Wprowadzamy dane: Policy name: CustomerPolicy, Table: PUB.Customer, Level: Medium(2). Wartość State zostawiamy jako Inactive. Zasadę uaktywnimy później.

W polach Data area i Index area podajemy nazwy zdefiniowanych w bazie obszarów, jak na powyższym rysunku.
Jeśli nie podamy wartości Change table, to przyjmie ono domyślna nazwę, tutaj: CDC_Customer. Wartośc pola Change table owner przyjmie wartość pub.
Jeśli chcemy wybrać pola, których wartości mają być przechwytywane, zaznaczamy Identifying fields.
Z listy poniższych pól wybieramy: City, Country, CustNum, Name (zaznaczamy checkbox w pierwszej kolumnie). Dla pola CustNum w kolumnie Enable identifying field wybieramy YES, a wartość pola Field order ustawiamy 1. Dla tego pola zostanie utworzony index w tabeli Change Table.

Przyciskiem SUBMIT (na górze strony) tworzymy zasadę CDC.
Powinniśmy teraz widzieć poniższy ekran.

Wybieramy w górnym menu: Database Administration i Go to Database Administration.

Widzimy zdefiniowaną zasadę CDC dla tabeli Customer. W kolumnie Policy state widać No Current Policy ponieważ nie uaktywniliśmy jeszcze tej zasady. Klikamy na nazwę CustomerPolicy w polu Pending policy.

Zaznaczamy Active i przycisk SUBMIT.

Zasada CustomerPolicy jest już aktywna. Zasadę mogliśmy uaktywnić oczywiście wcześniej, podczas definiowania.
Pora napisać jakiś program. Otwieramy klienta podłączonego do bazy myCDC (np. komenda prowin myCDC) i uruchamiamy “skomplikowany” program składający się z instrukcji CREATE customer.
Następnie uruchamiamy program Customer_CTT.p oparty na schemacie z tablicy Change Tracking Table.
// Customer_CTT.p
FOR EACH _file, each _cdc-change-tracking WHERE _file._file-number =
_cdc-change-tracking._source-table-number AND _file._file-name="customer":
CASE _operation:
WHEN 1 THEN
DISPLAY "Create" _operation _file._FILE-NAME.
WHEN 2 THEN
DISPLAY "Delete" _operation _file._FILE-NAME.
WHEN 3 THEN
DISPLAY "Before Update" _operation _file._FILE-NAME.
WHEN 4 THEN
DISPLAY "After Update" _operation _file._FILE-NAME.
END CASE.
END.
Widzimy informację, że została wykonana operacja 1 (Create) i utworzony został jeden rekord Customer.

W drugim przykładzie Customer_CT.p korzystamy z danych zapisanych do Change table CDC_Customer.
// Customer_CT.p FOR EACH cdc_customer : DISPLAY _operation country city custNum name. end.
W Change table zapisywane są jedynie pola wybrane podczas tworzenia zasady (wartości pól CustNum i Country ustawiane są przez tryger Create).

Wprowadźmy następną zmianę w danych.np. pole name dla pierwszego Customera = “Lift Tours Corp.”.
Customer_CTT.p

Mamy tu już dwie operacje na tablicy Customer: Create i After Update.
Customer_CT.p

Widzimy nową wartość pola Name oraz wartość CustNum (jest to Identifying field). Wartości pozostałych pól nie zmieniły się i są wyświetlone jako ?.
Powyższe przykładowe proste programy ilustrują sposób odczytu zmodyfikowanych danych dla zasady na poziomie 2. Poziom można ustawić w zależności od potrzeb. Tak uzyskane dane moga słuzyć różnym celom. Może to być element systemu ETL (o czym wspomniałem w pierwszej części) czy np. naszego własnego systemu do replikacji wybranych informacji.