V předchozím článku jsme představili novou vlastnost progressovské databáze Progress OpenEdge Change Data Capture (CDC)  a ukázali jsme si, jak se databáze nastaví pro použití této vlastnosti. Dnes se blíže podíváme na konfiguraci funkcí nástroje.

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.

dbadmin_CDC2.png

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.

defineTablesCDC2.png

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.

fieldDefinition.png

Volbou tlačítka SUBMIT (v horní části stránky) vytvoříme pravidlo CDC, které se zobrazí v následujícím okně.

TabelSummaryCDC2.png

Volbou Database Administration a Go to Database Administration si můžeme zobrazit seznam CDC Tables.

CDCTablesListCDC2.png

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.

policyActivationCDC.png

Volbou hodnoty Active v přepínači State a tlačítkem SUBMIT pravidlo aktivujeme.

policyActivated.png

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.

createCustomerCTTCDC.png

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.

CDCCustomerCDC.png

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:

customerUpdateCDC.png

A z procedury Customer_CT.p takto:

CDCCustomerUpdateCDC.png

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.


Nahoru