Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Azure SQL Managed Instance
A változás tábla, amikor a változásadat-rögzítés engedélyezve van a forrástáblán. A tábla minden beépítési és törlési művelethez egy sort ad vissza, amelyet a forrástáblán végeznek, és két sort minden frissítési művelethez a forrástáblával szemben. Ha a változtató tábla neve nincs megadva, amikor a forrástábla engedélyezik, a név származik. A név formátuma: cdc. capture_instance_CT ahol capture_instance a forrástábla séma neve és a forrástábla neve a schema_table formátumban. Például, ha az AdventureWorks mintaadatbázisban a Person.Address tábla engedélyezve van a változásadat rögzítésére, akkor a levezetett változtatási tábla neve cdc.Person_Address_CT lesz.
Javasoljuk, hogy ne kérdezze közvetlenül a rendszertáblákat. Ehelyett hajtsd végre a cdc.fn_cdc_get_all_changes_<capture_instance> és cdc.fn_cdc_get_net_changes_<capture_instance> funkciókat.
| Oszlop név | Adattípus | Description |
|---|---|---|
| __$start_lsn | binary(10) | A változás commitációs tranzakciójához tartozó napló sorozatszám (LSN). Minden ugyanabban a tranzakcióban elkövetett változás ugyanazt a commit LSN-t osztja meg. Például, ha a forrástáblán egy törlési művelet eltávolít két sort, a változtató táblázat két sort tartalmaz, mindegyik ugyanazzal a __$start_lsn értékkel. |
| __$end_lsn | binary(10) | Csak tájékoztatási célokra van meghatározva. Nem támogatott. A jövőbeli kompatibilitás nem garantált. Az SQL Server 2012-ben (11.x) ez az oszlop mindig NULL. |
| __$seqval | binary(10) | A művelet sorrendje, ahogy az a tranzakciónaplóban szerepel. Nem szabad rendelésre használni. Helyette használd a __$command_id oszlopot. |
| __$operáció | int | Azonosítja a változáshoz kapcsolódó adatkezelő nyelv (DML) műveletet. A következők egyike lehet: 1 = törlés 2 = beillesztés 3 = frissítés (régi értékek) Az oszlopadatoknak sorértékei vannak a frissítés utasítás végrehajtása előtt. 4 = frissítés (új értékek) Az oszlopadatok sorértékeket kapnak a frissítés utasítás végrehajtása után. |
| __$update_mask | varbinary(128) | Egy bitmaszk, amely a változástáblázat oszlopordinálisain alapul, és azokat az oszlopokat jelöli, amelyek megváltoztak. |
| <Rögzített forrástábla oszlopok> | varies | A változtatási táblázat többi oszlopa a forrástábla oszlopai, amelyeket a capture instance létrehozásakor lefoglalt oszlopként azonosítottak. Ha a rögzített oszloplistában nem volt oszlop, akkor a forrástábla összes oszlopa ebben a táblázatban található. |
| __$command_id | int | Követi a műveletek sorrendjét egy tranzakción belül. |
Megjegyzések
Az oszlopot __$command_id a 2012-től 2016-ig terjedő verziókban összesített frissítésben vezették be. A verzió és letöltés információért lásd a KB cikket 3030352 a FIX oldalon: A változtatási táblázat helytelenül van rendezve a frissített sorok esetén, miután engedélyezted a változásadat-rögzítést egy Microsoft SQL Server adatbázisban. További információért lásd: CDC funkciók meghibáskodhatnak SQL Server 2012, 2014 és 2016 legújabb CU-ra való frissítés után.
Rögzített oszlop adattípusok
A táblázatba belefoglalt rögzített oszlopok ugyanazt az adattípust és értéket kapják, mint a megfelelő forrásoszlopok, a következő kivételekkel:
Az időbélyeg-oszlopokatbináris(8) formátumban definiálják.
Az identitásoszlopokatint vagybigintként definiálják.
Azonban ezeknek az oszlopoknak az értékei megegyeznek a forrásoszlop értékeivel.
Nagy objektumadattípusok
Az image, text és ntext adattípusú oszlopoknak mindig NULL értéket kapnak, amikor __$művelet = 1 vagy __$művelet = 3. A varbinary(max), varchar(max) vagy nvarchar(max) adattípusú oszlopoknak NULL értéket kapnak, ha __$művelet = 3, hacsak az oszlop a frissítés során nem változott. Amikor __$művelet = 1, ezeknek az oszlopoknak a törlés idején értékük van. A lefoglalási példányban szereplő számítási oszlopok mindig NULL értéket kapnak.
Alapértelmezés szerint a maximális méret, amelyet egy INSERT, UPDATE, WRITETEXT vagy UPDATETEXT utasításban hozzáadható egy rögzített oszlophoz 65 536 bájt vagy 64 KB. A nagyobb LOB adatok támogatásához használd a Configure the max text repl size Server Configuration opciót a nagyobb maximális méret megadásához. További információért lásd: Konfigurálni a maximális szöveg repl méretű szerver konfiguráció opciót.
Adatdefiníciós nyelv módosításai
A forrástábla DDL módosításai, például oszlopok hozzáadása vagy kihagyása, a cdc.ddl_history táblázatban vannak rögzítve. Ezek a változtatások nem vonatkoznak a változtató táblára. Vagyis a változtatási táblázat definíciója állandó marad. Amikor sorokat helyezünk be a változtatási táblába, a capture folyamat figyelmen kívül hagyja azokat az oszlopokat, amelyek nem jelennek meg a forrástáblához tartozó rögzített oszloplistában. Ha egy oszlop megjelenik a rögzített oszloplistában, amely már nincs a forrástáblában, akkor az oszlopnak null értéket kap.
Az oszlop adattípusának megváltoztatása a forrástáblában szintén rögzíthető a cdc.ddl_history táblában. Ez a változás azonban megváltoztatja a változtatási táblázat definícióját. A változástáblázatban a rögzített oszlop adattípusa akkor változik, amikor a rögzítési folyamat találkozik a forrástáblán végrehajtott DDL módosítás naplóbejegyzésével.
Ha a forrástáblában egy elfoglalt oszlop adattípusát úgy kell módosítanod, hogy az csökkentse az adattípus méretét, használd az alábbi eljárást, hogy biztosítsd a változtatási táblázat megfelelő oszlopát sikeresen módosítani.
A forrástáblában frissítse az oszlop értékeit, amelyeket módosítani kell, hogy illeszkedjenek a tervezett adattípus méretéhez. Például, ha az adattípust az int-rőlsmallint-re változtatjuk, frissítsd az értékeket olyan méretre, ami a smallint tartományba illeszkedik, -32,768-tól 32,767-ig.
A változtatási táblában ugyanazt a frissítési műveletet hajtsa végre az egyenértékű oszlopba.
Változtasd meg a forrástáblát az új adattípus megadásával. Az adattípus-változtatás sikeresen továbbítódik a változás táblába.
Adatmanipulációs nyelv módosításai
Amikor a beillesztés, frissítés és törlés műveleteket egy módosítás-adat rögzítési engedélyezett forrástáblán végzik, ezeknek a DML-műveleteknek a nyilvántartása megjelenik az adatbázis tranzakciónaplójában. A változásadat-rögzítési folyamat visszanyeri az adatokat ezekről a változásokról a tranzakciónaplóból, és egy vagy két sort ad hozzá a változási táblához a változás rögzítéséhez. A bejegyzéseket ugyanabban a sorrendben adják fel a változtató táblába, ahogy a forrástáblában kötelezték be őket. Ugyanakkor a változástabel-bejegyzések köteleződését általában egy változtatáscsoporton kell végrehajtani, nem pedig minden bejegyzésre vonatkozóan.
Egy beillesztési művelet eredményeként egy sor kerül a változtató táblába; egy törlési művelet egy sort hozzáad a változtató táblához; ha az SQL Server egy frissítést "halasztott frissítésként" valósít meg, vagyis egy páros törlési és beillesztési műveletként, akkor a frissítési művelet két sort ad hozzá a változtató táblához: az első sor a rögzített adatok törlését, a második sor pedig a frissített, rögzített adatok beillesztését; ha az SQL Server nem valósít meg frissítést "halasztott frissítésként", a frissítési művelet két sort ad hozzá a változási táblához: az első sor a frissítés előtti rögzített adatokat tükrözi, a második sor pedig a frissítés után rögzített adatokat tükrözi.
A változástábla bejegyzésben a __$start_lsn oszlop rögzíti a forrástábla változásához tartozó LSN-t a commitációt, a __$command_id oszlopot a tranzakción belüli változtatás sorrendjére, a __$ művelet oszlop pedig a végrehajtott művelet rögzítésére szolgál. Ezek a metaadat-oszlopok együtt használhatók annak érdekében, hogy a forrásváltozások commit sorrendje megőrizze. Mivel a capture process a tranzakciónaplóból kapja meg a változási adatokat, fontos megjegyezni, hogy a change table bejegyzések nem jelennek meg szinkronban a megfelelő forrástábla-változásokkal. Ehelyett a megfelelő változások aszinkron módon jelennek meg, miután a capture folyamat feldolgozta a tranzakciónaplóból származó releváns változásbejegyzéseket.
A beadás és törlés műveletekhez a frissítés maszkjában lévő összes bit be van állítva. Frissítési műveletek esetén mind a régi frissítés, mind az új sor frissítési maszkja módosítódik, hogy tükrözze a frissítés során megváltozott oszlopokat.
Lásd még:
sys.sp_cdc_enable_table (Transact-SQL)
sys.sp_cdc_get_ddl_history (Transact-SQL)