V této chvíli máme databázi myCDC s povolenou funkcí CDC a definované oblasti pro data a indexy CDC.
Pro konfiguraci zaznamenávání změn požijeme nástroj OE Explorer s volbou Database Administration.
V levém sloupci Storage Management jsou volby, ve kterých můžeme upravit seznam tabulek nebo vytvořit / upravit
pravidla CDC (CDC policy).
V pravém sloupci Data Administration jsou volby pro export a import pravidel CDC.
Při vytváření pravidel CDC musíme zadat úroveň (level), která určuje množství dat, která mají být uložena. To je ilustrováno v následující tabulce:
Úroveň |
Popis |
Fieldmap |
Možnost změny |
0 |
Ukládání dat pouze v Tracking Table. |
NA |
Ne |
1 |
Ukládání dat pouze v Tracking Table. Zahrnuje Fieldmap. |
Obsahuje pouze informaci o poli po aktualizaci |
Ano |
2 |
Zápis hodnot po aktualizaci pro všechny operace (Create, Update, Delete) |
Obsahuje pouze informaci o poli po aktualizaci |
Ano |
3 |
Zápis hodnot před i po aktualizaci pro všechny operace (Create, Update, Delete) |
Obsahuje pouze informaci o poli po aktualizaci |
Ano |
Fieldmap se použije tehdy, když nás zajímá pouze která pole byla změněna, ale nezajímají nás aktuální hodnoty.
Nyní vytvoříme pravidlo CDC 2. úrovně.
Ve sloupci Storage Management vybereme volbu Create Change Data Capture policy.
Zadáme údaje:
Policy name |
CustomerPolicy |
Table |
PUB.Customer |
Level |
Medium(2) |
Pole State ponecháme Inactive, pravidlo aktivujeme
později.
V poli Data area a Index area zadáme názvy definovaných oblastí, které jsme vytvořili v prvním článku.
Pokud nezadáme tabulku Change table, bude mít výchozí název s předponou CDC_, v našem případě CDC_Customer. Hodnota pole Change table owner bude nastavena na PUB.
Výběr jednotlivých polí (sloupců), jejichž změny budou zaznamenávány, je volitelný. Chceme-li vybrat pole, jejichž změny budou zaznamenávány, vybereme položku Identifying fields.
Ze seznamu polí vybereme zaškrtnutím políčka v levém sloupci pole City, Country, CustNum, Name. Pro pole CustNum vybereme v sloupci Enable identifying field hodnotu YES, a ve sloupci Field order hodnotu 1. Na tomto poli bude v Change Table definován index.
Volbou tlačítka SUBMIT (v horní části stránky) vytvoříme pravidlo CDC, které se zobrazí v následujícím okně.
Volbou Database Administration a Go to Database Administration si můžeme zobrazit seznam CDC Tables.
V okně vidíme pravidla CDC pro tabulku Customer. Ve sloupci Policy state je hodnota No Current Policy, protože jsme tuto politiku dosud nekativovali. Klikneme na hodnotu CustomerPolicy ve sloupci Pending policy.
Volbou hodnoty Active v přepínači State a tlačítkem SUBMIT pravidlo aktivujeme.
Pravidlo CustomerPolicy je nyní aktivováno. Je samozřejmě možné aktivovat pravidlo již při jeho definici. Nyní si již vystačíme s dobře známým ABL. Ukážeme si, jak nástroj CDC prakticky funguje a jak můžeme změny v tabulkách sledovat.
Jednoduchým ABL programem s příkazem CREATE customer a dosazením několika základních hodnot založíme nového zákazníka.
Programem Customer_CTT.p si zobrazíme záznamy tabulky 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. |
Vidíme, že operace 1 (Create) byla zaznamenána v Change Tracking Table. Všimněme si, že v Change Tracking Table se zaznamenávají informace o všech změněných tabulkách a operace je v tabulce zaznamenána jako číslo 1-4.
Procedura Customer_CT.p zobrazuje data přímo z Change table CDC_Customer. Podíváme se tedy přímo na data, která byla změněna, a to pouze na nové hodnoty.
Programem Customer_CTT.p si zobrazíme záznamy tabulky Change Tracking Table.
FOR EACH CDC_customer : DISPLAY _operation country city custNum name. end. |
Všimněme si, že Change table kopíruje sloupce z originální tabulky, a to pouze ty sloupce, jejichž změny mají být zaznamenávány. Jsou zaznamenávány i hodnoty, které byly při vytvoření dosazeny automaticky, např. Cust Num.
Nyní jednoduchým ABL programem změníme jméno libovolného zákazníka z tabulky Customer. Výstup
z procedury Customer_CTT.p bude vypadat takto:
A z procedury Customer_CT.p takto:
Vidíme novou hodnotu pole Name a hodnotu CustNum (toto pole je součástí indexu). Hodnoty ostatních polí se nezměnily a jsou zobrazeny jako ? (neznámá hodnota).
Výše uvedené příklady jednoduchých programů ilustrují způsob čtení zaznamenaných dat pro pravidlo na úrovni 2. V ostatních úrovních je použití analogické, jen je třeba mít na paměti, že v úrovni 1 se změny zaznamenávají pouze do Change Tracking Table. Získané údaje mohou sloužit různým účelům. Může to být prvek systému ETL (který jsem zmínil v prvním článku) nebo například váš vlastní systém pro replikaci vybraných informací.
Autoři: Michal Džmuráň volně dle Piotr Tucholski.