Oracle Change Data Capture
2008. március 30., vasárnap by Zoltan Tanczos
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