Oracle Change Data Capture

Az adattárházakba bizonyos időközönként (tipikusan éjszaka, amikor az OLTP rendszerekre kisebb, vagy épp semmi terhelés jut) be kell tölteni az újonnan keletkezett vagy módosult adatokat. Tehát fontos feladat az új/módosult adatok azonosítása a forrásadatbázisokban. Ennek a megoldásában nyújthat segítséget a CDC (Change Data Capture).

CDC nélkül két féle módon juthatunk hozzá a változott adatokhoz:

  • Különbségképzés (table differencing): a forrásadatbázisból a tábla teljes tartalmát a staging adatbázisba másoljuk, ahol az SQL MINUS operátorával lekérdezhetjük az újonnan beinsert-ált, illetve update-elt sorokat:

SELECT * FROM new_version

MINUS SELECT * FROM old_version


Vagy, ha a kitörölt sorokra vagyunk kiváncsiak:


SELECT * FROM old _version

MINUS SELECT * FROM new_version


Ennek a megközelítésnek a problémái nyilvánvalóak:

    • Mivel a tábla teljes tartalmát át kell másolni a két adatbázis között, ez hatalmas overhead-del jár.

    • Magának a MINUS operátor elvégzésének a számítási költsége is rendkívül nagy.

    • Nem lehet azonosítani a megváltoztatott, majd az eredeti értékre visszaállított adatokat.

    • Nem lehet megállapítani, hogy milyen változtatások történtek egy tranzakción belül.


  • Change-value selection: egy, a forrástáblában levő speciális oszlop segítségével csak az előző betöltés óta megváltozott/újonnan létrehozott sorokat választjuk ki. Egy ilyen oszlop tipikusan valamilyen időpontot tárol, pl.: LAST_UPDATE_DATE.

Ezzel a következő problémák vannak:

    • A megváltozott adatok azonosításával járó overhead a forrásadatbázist terheli.

    • Ezzel a módszerrel sem lehet megállapítani, hogy milyen változtatások történtek egy tranzakcióban.

    • A change-value alapján történő felosztás finomsága nem feltétlen megfelelő: például, ha másodperc finomságú, és az előző kinyerés mondjuk 10:15:33-kor történt, akkor a következő kinyeréskor a 10:15:33 utáni rekordokat fogjuk csak kiválasztani. Tehát ha ugyanabban a másodpercben történt módosítás, akkor az el fog veszni.

    • Gyakorlati szempontból talán a legnagyobb hátrány az, hogy a kinyerő mechanizmust figyelembe véve kell megtervezni a forrástáblákat is, amik legtöbbször 3rd party adatbázisokban szerepelnek.

Megváltozott adatok kinyerése CDC-vel

Az Oracle CDC másfajta megközelítést követ: az INSERT, UPDATE, és DELETE utasítások következtében beállt változásokat rögzíti egy ún. change-table-ben, amiket utána ellenőrzött módon bocsát az alkalmazások számára.

A CDC-t két különböző módon lehet használni:

  • Szinkron: a forrástáblákra elhelyezett triggerek segítségével a DML utasítások eredményét a módosítás tranzakciójának részeként rögzíti.

  • Aszinkron: az elcommit-ált módosításokat tartalmazó redo log file alapján nyeri ki a módosult adatokat. Aszinkron módon háromféleképpen lehet a CDC-t megvalósítani: HotLog, Distributed HotLog, AutoLog.

Ezekről a módokról a későbbiekben részletesen be fogok számolni.

Forrás: Oracle Data Warehousing Guide

0 megjegyzés: