Megosztás a következőn keresztül:


Adatrögzítés (CDC) módosítása az Azure SQL Database-lel

A következőkre vonatkozik:Azure SQL Database

Ebből a cikkből megtudhatja, hogyan implementálható az Adatrögzítés (CDC) az Azure SQL Database-ben a táblák és sorok módosításakor az adatbázison végzett tevékenységek rögzítéséhez. A CDC szolgáltatással kapcsolatos részletekért, beleértve az SQL Serverben és a felügyelt Azure SQL-példányban való implementálását, olvassa el Mi az a változásadat-rögzítés (CDC)?

Áttekintés

Az Azure SQL Database-ben a változásadat-rögzítés ütemezője lecseréli azokat az SQL Server Agent-feladatokat, amelyek rögzítik és megtisztítják a forrástáblák változásadatait. Az ütemező automatikusan futtatja a rögzítési és törlési folyamatokat az adatbázis hatókörében, biztosítva a megbízhatóságot és a teljesítményt külső függőségek nélkül. A felhasználók fenntartják a lehetőséget, hogy szükség szerint manuálisan kezdeményezzék a rögzítési és törlési folyamatokat.

Jó példa arra, hogy a technológiát milyen adatfogyasztó alkalmazza, egy kinyerési, átalakítási és betöltési (ETL) alkalmazás. Az ETL-alkalmazás lépésenként tölti be az SQL Server-forrástáblák változásadatait egy adattárházba vagy adatpiacba. Bár a forrástábláknak az adattárházban való megjelenítésének tükröznie kell a forrástáblák változásait, nem megfelelő egy olyan teljes körű technológia, amely frissíti a forrás replikáját. Ehelyett megbízható változási adatokra van szüksége, amelyek strukturáltak, így a felhasználók alkalmazhatják őket az adatok célmegjelenítéseinek eltérő megjelenítésére. Az SQL Server változásadat-rögzítése biztosítja ezt a technológiát.

Az Azure SQL Database-ben történő adatrögzítés változásának megismeréséhez tekintse meg ezt az adathozzáadási epizódot:

Adatfolyam

Az alábbi ábra az Azure SQL Database-beli változásadat-rögzítés fő adatfolyamát mutatja be:

Folyamatdiagram diagramja, amely az adatfolyamot ábrázolja a változásadat-rögzítéshez.

Előfeltételek

Engedélyek

A db_owner szerepkör szükséges az Azure SQL Database módosítási adatrögzítésének engedélyezéséhez.

Az Azure SQL Database számítási követelményei

A CDC-t az Azure SQL Database-ben a virtuális magalapú vásárlási modell bármely szolgáltatási szintjén engedélyezheti, önálló adatbázisokhoz és rugalmas készletekhez.

Az DTU vásárlási modellesetében a CDC támogatott a S3 vagy magasabb szintű rétegben lévő adatbázisokhoz. Az almagszintek (Basic, S0, S1, S2) nem támogatottak a CDC esetén.

CDC engedélyezése az Azure SQL Database-hez

Mielőtt létrehozhat egy rögzítési példányt az egyes táblákhoz, engedélyeznie kell a CDC-t az Azure SQL Database-hez.

A CDC engedélyezéséhez csatlakozzon az Azure SQL Database-hez az SQL Server Management Studio (SSMS) használatával. Nyisson meg egy új lekérdezési ablakot, majd engedélyezze a CDC-t a következő T-SQL futtatásával:

EXEC sys.sp_cdc_enable_db;
GO

Jegyzet

Annak megállapításához, hogy egy adatbázis már engedélyezve van-e, kérdezze le a is_cdc_enabled oszlopot a sys.databases katalógusnézetben.

Ha egy adatbázis adatrögzítésének módosítása engedélyezve van, a cdc schema, a cdc user, a metaadattáblák és más rendszerobjektumok létrejönnek az adatbázishoz. A cdc schema tartalmazza a módosítási adatrögzítési metaadat-táblákat, és miután a cdc engedélyezve van a forrástáblákhoz, az egyes változástáblák adattárként szolgálnak a változásadatokhoz. A cdc schema a változásadatok lekérdezéséhez használt társított rendszerfüggvényeket is tartalmazza.

Fontos

Az adatrögzítés módosításához a cdc schema és a cdc userkizárólagos használatára van szükség. Ha egy séma vagy egy cdc nevű adatbázis-felhasználó jelenleg is létezik egy adatbázisban, a cdc csak akkor engedélyezhető az adatbázisban, ha a séma és/vagy a felhasználó elvetése vagy átnevezése nem történik meg.

Egy táblához a CDC engedélyezése

Miután engedélyezte a CDC-t az Azure SQL Database-hez, a CDC-t a tábla szintjén engedélyezheti egy vagy több tábla kiválasztásával az adatváltozások nyomon követéséhez. Hozzon létre egy rögzítési példányt az egyes forrástáblákhoz a tárolt eljárás sys.sp_cdc_enable_tablehasználatával.

Ha engedélyezni szeretné a CDC-t egy táblához, futtassa a következő T-SQL-t:

EXEC sys.sp_cdc_enable_table
    @source_schema = N'SchemaName',
    @source_name = N'TableName',
    @role_name = NULL;
GO

Borravaló

Az előző példa nem használ explicit @role_name a paraméter NULLbeállításával, de a módosítási adatokhoz való hozzáférés korlátozásához használhat egy engedélyező szerepkört.

A rögzítendő forrástábla oszlopai

Alapértelmezés szerint a forrástábla összes oszlopa rögzített oszlopként van azonosítva. Ha csak az oszlopok egy részhalmazát kell nyomon követni, például adatvédelmi vagy teljesítménybeli okokból, használja a @captured_column_list paramétert az oszlopok részhalmazának megadásához.

Ha engedélyezni szeretné a CDC-t egy tábla adott oszloplistájához, futtassa a következő T-SQL-t:

EXEC sys.sp_cdc_enable_table
    @source_schema = N'SchemaName',
    @source_name = N'TableName',
    @role_name = NULL,
    @captured_column_list = N'Column1, Column2, Column3';
GO

Borravaló

Figyelje meg, hogy az előző példa nem használja a @role_name kifejezett formáját, valamint a paramétert NULLértékre is állítja, de a módosítási adatokhoz való hozzáférés korlátozásához használhat egy korlátozó szerepkört.

A változástáblához való hozzáférés vezérlését vezérlő szerepkör

A névvel ellátott szerepkör célja a változásadatokhoz való hozzáférés szabályozása. A megadott szerepkör lehet meglévő rögzített kiszolgálói vagy adatbázis-szerepkör. Ha a megadott szerepkör még nem létezik, a rendszer automatikusan létrehoz egy ilyen nevű adatbázis-szerepkört. A felhasználóknak SELECT engedéllyel kell rendelkezniük a forrástábla összes rögzített oszlopán. Emellett a szerepkör megadásakor a sysadmin vagy db_owner szerepkörrel nem rendelkező felhasználóknak is a megadott szerepkör tagjainak kell lenniük.

Ha engedélyezni szeretné a CDC-t egy táblán, amely egy korlátozó szerepkört határoz meg, futtassa a következő T-SQL parancsot:

EXEC sys.sp_cdc_enable_table
    @source_schema = N'SchemaName',
    @source_name = N'TableName',
    @role_name = N'RoleName'
GO

Ha nem szeretne korlátozó szerepkört használni, állítsa a @role_name paramétert NULL.

A nettó módosítások lekérdezésére szolgáló függvény

A rögzítési példányok mindig tartalmaznak egy táblaértékelt függvényt, amely visszaadja a megadott intervallumon belül történt összes változástábla-bejegyzést. Ezt a függvényt úgy nevezik el, hogy a rögzítési példány nevét hozzáfűzik a cdc.fn_cdc_get_all_changes_-hoz. További információért lásd: cdc.fn_cdc_get_all_changes.

Ha a @supports_net_changes paraméter értéke 1, akkor a rendszer létrehoz egy nettó módosítási függvényt is a rögzítési példányhoz. Ez a függvény csak egy változást ad vissza a hívásban megadott intervallumban módosított egyes különálló sorokhoz. További információ: cdc.fn_cdc_get_net_changes.

A nettó változási lekérdezések támogatásához a forrástáblának elsődleges kulccsal vagy egyedi indexel kell rendelkeznie a sorok egyedi azonosításához. Ha egyedi indexet használ, az index nevét a @index_name paraméterrel kell megadni. Az elsődleges kulcsban vagy az egyedi indexben definiált oszlopokat fel kell venni a rögzítendő forrásoszlopok listájába.

Ha engedélyezni szeretné a CDC-t egy olyan táblához, amely támogatja a nettó módosításokat, futtassa a következő T-SQL-t:

EXEC sys.sp_cdc_enable_table
    @source_schema = N'SchemaName',
    @source_name = N'TableName',
    @role_name = NULL,
    @supports_net_changes = 1
GO

Ha a változásadat-rögzítés engedélyezve van egy meglévő elsődleges kulccsal rendelkező táblában, és a @index_name paraméter nem egy alternatív egyedi index azonosítására szolgál, a változásadat-rögzítési funkció az elsődleges kulcsot használja. Az elsődleges kulcs későbbi módosításai nem engedélyezettek anélkül, hogy először letiltanák a tábla adatrögzítését. Ez attól függetlenül igaz, hogy a módosítási adatrögzítés konfigurálásakor kérték-e a net change lekérdezések támogatását.

Ha a tábla nem rendelkezik elsődleges kulccsal a módosítási adatrögzítés engedélyezésének időpontjában, az elsődleges kulcs későbbi hozzáadását figyelmen kívül hagyja a módosítási adatrögzítés. Mivel a módosítási adatrögzítés nem használ olyan elsődleges kulcsot, amely a tábla engedélyezése után jön létre, a kulcs és a kulcsoszlopok korlátozás nélkül eltávolíthatók.

A sys.sp_cdc_enable_table tárolt eljárás argumentumairól további információt a sys.sp_cdc_enable_tablecímű témakörben talál.

Borravaló

Annak megállapításához, hogy egy forrástábla már engedélyezve van-e a változásadatok rögzítéséhez, vizsgálja meg a is_tracked_by_cdc oszlopot a sys.tables katalógusnézetben.

CDC letiltása az Azure SQL-adatbázisban

Az Azure SQL Database CDC-jének letiltása eltávolítja az összes kapcsolódó változásadat-rögzítési metaadatot, beleértve a cdc user, a cdc schema, valamint a külső ütemező rögzítési és törlési folyamatait. A módosítási adatrögzítés által létrehozott összes gating szerepkör azonban nem törlődik automatikusan, és explicit módon kell törölni.

Jegyzet

Annak megállapításához, hogy egy adatbázis rendelkezik-e cdc-vel, kérdezze le a is_cdc_enabled oszlopot a sys.databases katalógusnézetben.

Nem szükséges letiltani a CDC-t az egyes táblák esetében, mielőtt az adatbázis szintjén letiltja a CDC-t.

A CDC adatbázisszintű letiltásához futtassa a következő T-SQL-t:

EXEC sys.sp_cdc_disable_db;
GO

Borravaló

Miután az adatbázis szintjén letiltotta a CDC-t, engedélyeznie kell a CDC-t az egyes táblákhoz, újra, ha még egyszer használni szeretné a CDC szolgáltatást.

CDC kezelése

Az Azure SQL Database-ben a CDC kulcsfontosságú funkció az adatbázistáblák változásainak nyomon követéséhez és kezeléséhez. A hagyományos SQL Server-környezetekkel ellentétben az Azure SQL Database egy módosítási adatrögzítési ütemezőt használ a CDC-feladatok kezeléséhez az SQL Server Agent-feladatok használata helyett. Ez az ütemező automatikusan elindítja a CDC-táblák rendszeres rögzítését és törlését az adatbázisban, biztosítva a megbízhatóságot és a teljesítményt külső függőségek nélkül.

Automatikus CDC-rögzítés és -törlés

Az Azure SQL Database CDC-rögzítési feladata zökkenőmentesen működik, és 20 másodpercenként fut a változások hatékony nyomon követése érdekében. Ezzel egyidejűleg a tisztítási feladat óránként fut, biztosítva, hogy a CDC-táblák optimalizálva maradjanak. A felhasználók biztosak lehetnek abban, hogy a CDC kezelése manuális beavatkozás nélkül automatikusan történik.

Fontos

Ha egy kiszolgáló nélküli adatbázis cdc-je engedélyezve van, és szüneteltetett állapotban van, a CDC nem fut. A CDC-vizsgálat nem befolyásolja az automatikus szüneteltetési funkciót.

Manuális CDC-vezérlés

Bár a CDC automatikusan fut, a felhasználók rugalmasan hajthatják végre a manuális CDC-műveleteket igény szerint. A sp_cdc_scan és sp_cdc_cleanup_change_tables eljárások lehetővé teszik a rögzítési és törlési feladatok szükség szerinti aktiválását.

A CDC nyomon követése

Az Azure SQL Database értékes eszközöket biztosít a CDC-tevékenységek monitorozásához. Két dinamikus felügyeleti nézet, sys.dm_cdc_log_scan_sessions és sys.dm_cdc_errorsbetekintést nyújt a CDC-folyamatokba, így teljes mértékben áttekintheti az adatváltozásokat.

CDC testreszabása

Bár az Azure SQL Database leegyszerűsíti a CDC kezelését, bizonyos korlátozások léteznek:

  • A CDC rögzítési és tisztítási feladatainak gyakorisága nem szabható testre.
  • A rögzítési és törlési feladatok pollinginterval és continuous értékei nem alkalmazhatók az Azure SQL Database-ben.
  • Ha eltávolítja a rögzítési feladat bejegyzését a cdc.cdc_jobs táblából, az nem leállítja a háttérrögzítési feladatot.
  • A törlési feladat bejegyzésének elvetése leállítja a törlési feladatot.
  • A cdc.cdc_jobs tábla nem cdc, hanem a msdb sémában található.

A korlátozások ellenére továbbra is testre szabhatja a következő beállításokat:

  • Az aktuális konfigurációs részletekért kérdezze le a cdc.cdc_jobs táblát.
  • Módosítsa a maxtrans és maxscans beállításokat a sp_cdc_change_job tárolt eljárással.
  • Szükség szerint sp_cdc_drop_job és sp_cdc_add_job alkalmazásával kezelheti a feladatokat.

Teljesítménnyel kapcsolatos szempontok és javaslatok

Az Azure SQL Database változásadat-rögzítésének engedélyezése a CDC sql serverhez vagy felügyelt Azure SQL-példányhoz való engedélyezéséhez hasonló teljesítményhatással rendelkezik. A CDC engedélyezésekor azonban számos tényező befolyásolja a teljesítményhatást, többek között a következőket:

  • A CDC-kompatibilis táblák száma az Azure SQL Database-ben.

  • A követett táblák változásainak gyakorisága, vagy a tranzakciók mennyisége. Az aktív tranzakciók megakadályozzák a napló csonkolását, amíg a tranzakció véglegesítése megtörténik és a CDC-vizsgálat utoléri, vagy a tranzakció megszakad. Ez azt eredményezheti, hogy a tranzakciónapló a szokásosnál jobban megtelik, és figyelni kell, hogy a tranzakciónapló ne töltődjön be.

  • Győződjön meg arról, hogy szabad terület áll rendelkezésre a forrásadatbázisban, mivel a CDC-összetevők (például CT-táblák, cdc_jobs stb.) ugyanabban az adatbázisban vannak tárolva.

  • Akár egyetlen adatbázisról van szó, akár egy rugalmas készlet részéről.

  • A rugalmas készletben lévő adatbázisok erőforrást osztanak meg közöttük (például lemezterületet), ezért ha több adatbázisban engedélyezi a CDC-t, fennáll annak a kockázata, hogy eléri a rugalmas készlet lemezméretének maximális méretét. Monitorozza az erőforrásokat, például a processzort, a memóriát és a napló átviteli sebességét. További információ: Sűrű rugalmas készletek erőforrás-kezelése.

  • A rugalmas készletek adatbázisainak kezelésekor fontos figyelembe venni a CDC-kompatibilis táblák számát és azon adatbázisok számát, amelyekhez ezek a táblák tartoznak. Javasoljuk a számítási feladatok felmérését és a szükséges intézkedések, például a rugalmas készlet skálázását. További információ: Rugalmas készlet erőforrásainak méretezése az Azure SQL Database-ben.

Fontos

Ezek a szempontok általános útmutatást nyújtanak. Ha pontos útmutatást szeretne a teljesítmény adott számítási feladathoz való optimalizálásához, lépjen kapcsolatba Microsoft támogatási.

A CDC Azure SQL Database-sel való használatakor vegye figyelembe az alábbi ajánlott eljárásokat:

  • Tesztelje alaposan a munkaterhelést, mielőtt engedélyezi a CDC-t az éles adatbázisokon, hogy a megfelelő SLO-t meghatározhassa a munkaterheléshez. További információ az Azure SQL Database számítási méreteiről: Szolgáltatási szintek.

  • Fontolja meg a virtuális magok számának skálázását, vagy áttérhet egy magasabb adatbázisszintre, például a rugalmas skálázásra, hogy fenntartsa az előző teljesítményszintet, miután a CDC engedélyezve lett az Azure SQL Database-ben. További információ: virtuális mag vásárlási modell – Azure SQL Database és rugalmas skálázású szolgáltatási szint.

  • A térkihasználtság szoros monitorozása. További információ: Adatbázisok fájlterületének kezelése az Azure SQL Database-ben.

  • A naplólétrehozási arány monitorozásával kapcsolatos további információkért lásd felhasználói számítási feladatok és belső folyamatok erőforrás-felhasználását.

  • A CDC vizsgálati és törlési folyamatai a rendszeres adatbázis-számítási feladatok részét képezik (erőforrásokat is használnak). A tranzakciók mennyiségétől függően a teljesítmény romlása jelentős lehet, mivel a vizsgálati és tisztítási folyamatok nem tartják lépést a számítási feladattal, mivel a táblák módosításához teljes sorokat adnak hozzá, és a frissítési műveletek esetében a preimage is szerepel. Javasoljuk, hogy értékelje a számítási feladatot, és a szükséges intézkedéseket az előző javaslatoknak megfelelően tegyen. További információt a jelen cikk CDC menedzsment szakaszában talál.

Fontos

Az ütemező automatikusan futtatja a rögzítést és a törlést az SQL Database-ben. A CDC rögzítési feladata 20 másodpercenként fut, a törlési feladat pedig óránként.

  • A késés növekedésének megakadályozása érdekében győződjön meg arról, hogy a CDC-kompatibilis adatbázisok száma nem haladja meg a rugalmas készlethez lefoglalt virtuális magok számát. További információ: Sűrű rugalmas készletek erőforrás-kezelése.

  • A számítási feladat és a teljesítményszint alapján fontolja meg a CDC megőrzési időszakának az alapértelmezett három napnál kisebb számra történő módosítását, hogy a törlési folyamat lépést tartson a változástáblában szereplő változásokkal. Ajánlott az alacsonyabb megőrzési időtartam fenntartása az adatbázis méretének monitorozása közben.

  • A változástáblákba bevezetett módosítások esetében nincs biztosítva szolgáltatásiszint-szerződés (SLA). Az alszekundumos késés szintén nem támogatott.

Ismert problémák és korlátozások

A hozzáadott oszlopok alapértelmezett korlátozásai

Ha a CDC engedélyezve van egy táblában, és egy alapértelmezett korlátozással rendelkező nem null értékű oszlopot ad hozzá, a meglévő soradatok az alapértelmezett kényszer értékét fogják megadni. A CDC azonban a NULL sorok alapértelmezett értéke helyett fogja használni. Ez csak a DDL alkalmazása előtt található adatokra vonatkozik. Áthidaló megoldásként adjon ki nem változó UPDATE utasításokat a meglévő sorokra, vagy végezzen el egy ALTER INDEX ... REBUILD műveletet a tábla fürtözött indexén. Ha nincs fürtözött index, használja a ALTER TABLE ... REBUILD adatstruktúrát a kupacon.

Agresszív napló csonkolás

Ha engedélyezi a módosítási adatrögzítést (CDC) az Azure SQL Database-ben, a gyorsított adatbázis-helyreállítás (ADR) agresszív naplózási csonkolás funkciója le lesz tiltva. Ennek az az oka, hogy a CDC-ellenőrzés hozzáfér az adatbázis tranzakciónaplójához. Az aktív tranzakciók megakadályozzák a tranzakciónapló-csonkolást addig, amíg a tranzakciót véglegesítik és a CDC-vizsgálat utoléri azt, vagy amíg a tranzakció megszakad.

Azure SQL Database szolgáltatási szint

Bár a CDC támogatott adatbázisok és rugalmas készleteka virtuális magalapú vásárlási modellben bármely szolgáltatási rétegben, a S3 (például Alapszintű, S0, S1, S2) adatbázisok nem támogatottak a DTU vásárlási modell.

Az Azure SQL Database naplókorlátjai

Az adatbázis gyorsított helyreállítása és a CDC kompatibilisek. Az ADR agresszív napló-csonkító viselkedése azonban le van tiltva, ha a CDC engedélyezve van. Ennek az az oka, hogy a CDC-vizsgálat aktívan hozzáfér és interakcióba lép az adatbázis tranzakciónaplójával, ami megakadályozza az ADR agresszívebb napló csonkolási tevékenységét.

A CDC engedélyezésekor magasabb tranzakciónapló-kihasználtságot tapasztalhat. Előfordulhat, hogy magasabb szolgáltatási szintre vagy számítási méretre kell skáláznia, hogy elegendő tranzakciónapló-terület álljon rendelkezésre az összes számítási feladat igényeinek megfelelően.

Borravaló

Ha a számítási feladatok nagyobb általános teljesítményt igényelnek a tranzakciónapló nagyobb átviteli sebessége és a tranzakciók gyorsabb véglegesítési ideje miatt, használja a rugalmas skálázású szolgáltatási szintet.

Online műveletek

Az online indexműveletek nem támogatottak

Az online indexelési műveletek nem támogatottak, ha a módosítási adatrögzítés engedélyezve van egy adatbázisban. Az 18773-es hiba, a "Nem található szöveginformációs rekordok az oszlophoz "%.*ls", azonosító %d a parancs felépítése során." hibaüzenet jelenik meg.

Testreszabás rögzítése és törlése

Az Azure SQL Database-ekben nem lehet konfigurálni a CDC rögzítési és törlési folyamatainak gyakoriságát. Az ütemező automatikusan futtatja a rögzítést és a törlést.

Feladatátvétel az Azure SQL Database-ben

Helyi vagy GeoDR feladatátvételi forgatókönyvekben, ha az adatbázis CDC-je engedélyezve van, az adatváltozások rögzítésének és eltávolításának folyamata automatikusan megtörténik az új elsődleges adatbázisban a feladatátvételt követően.

Microsoft Entra ID

Jegyzet

Microsoft Entra ID korábban Azure Active Directory (Azure AD) néven ismert.

Ha Microsoft Entra-felhasználóként hoz létre adatbázist az Azure SQL Database-ben, és engedélyezi rajta a CDC-t, az SQL-felhasználók (például még az sysadmin szerepkörben is) nem tudják letiltani/módosítani a CDC-összetevőket. Egy másik Microsoft Entra-felhasználó azonban képes engedélyezni/letiltani a CDC-t ugyanazon az adatbázisban.

Hasonlóképpen, ha SQL-felhasználóként hoz létre adatbázist, a változáskövetés engedélyezése vagy letiltása Microsoft Entra-felhasználóként nem működik.

A CDC engedélyezése meghiúsul, ha Microsoft Entra-felhasználóként hoz létre adatbázist az Azure SQL Database-ben, nem engedélyezi a CDC-t, majd az adatbázis visszaállítása után próbálja meg engedélyezni a CDC-t.

A probléma megoldásához csatlakozzon az adatbázishoz a Microsoft Entra rendszergazdai fiókjával, és futtassa a következő T-SQL-t:

ALTER AUTHORIZATION ON DATABASE::[<restored_db_name>] TO [<azuread_admin_login_name>];

EXEC sys.sp_cdc_enable_db;

Időponthoz kötött visszaállítás (PITR)

Ha SQL-felhasználóként engedélyezte a CDC-t az Azure SQL Database-ben, az időponthoz kötött visszaállítás (PITR) megtartja a CDC-t a visszaállított adatbázisban, kivéve, ha az egy részmagos SLO-ra van visszaállítva. Ha egy alegység SLO-ra van visszaállítva, a CDC-összetevők nem érhetők el.

Ha Microsoft Entra-felhasználóként engedélyezi a CDC-t az adatbázisban, nem lehet időponthoz kötött visszaállítást (PITR) létrehozni egy almag SLO-ra. Állítsa vissza az adatbázist a forrással megegyező vagy magasabb SLO-ra, majd szükség esetén tiltsa le a CDC-t.

Hibaelhárítás

Ez a szakasz útmutatást és hibaelhárítási lépéseket tartalmaz az Azure SQL Database CDC-jével kapcsolatban. A CDC-vel kapcsolatos hibák akadályozhatják a rögzítési folyamat megfelelő működését, és az adatbázis tranzakciónaplójának bővítéséhez vezethetnek.

A hibák vizsgálatához lekérdezheti a dinamikus felügyeleti nézetet sys.dm_cdc_errors. Ha a sys.dm_cdc_errors dinamikus felügyeleti nézet hibát ad vissza, a kockázatcsökkentési lépések megismeréséhez tekintse meg a következő szakaszt.

Jegyzet

Egy adott hibakódról további információt az adatbázismotor események és hibákcímű témakörben talál.

A szakasz a következő hibaelhárítási kategóriákat tartalmazza:

Kategória Leírás
metaadatok módosítása Információkat tartalmaz a CDC-vel kapcsolatos problémák megoldásáról, amikor a nyomon követett táblázatot módosították vagy elvették.
adatbázis tárhelykezelése Az adatbázis-terület kimerülésével kapcsolatos problémák elhárítására vonatkozó információkat tartalmaz.
CDC korlátozás A CDC korlátozásai által okozott problémák megoldására vonatkozó információkat tartalmaz.

A metaadat módosítva

200/208-os hiba – Érvénytelen objektumnév

  • ok: A hiba akkor fordulhat elő, ha a CDC-metaadatokat elvetik. Ahhoz, hogy a CDC megfelelően működjön, nem szabad manuálisan módosítania a CDC-metaadatokat, például a CDC schema, a táblák módosítását, a CDC-rendszer által tárolt eljárásokat, az alapértelmezett cdc user engedélyeket (sys.database_principals) vagy a cdc userátnevezését.

  • javaslat: A probléma megoldásához le kell tiltania és újra engedélyeznie kell a CDC-t az adatbázishoz. Amikor engedélyezi egy adatbázis változásadat-rögzítését, létrehozza a cdc-sémát, a cdc-felhasználót, a metaadattáblákat és az adatbázis egyéb rendszerobjektumait. Manuálisan újra engedélyeznie kell CDC-t az egyes táblákhoz, miután a CDC engedélyezve van az adatbázisban.

Jegyzet

A sys.objects rendszerkatalógus nézetében található objektumok is_ms_shipped=1 és schema_name=cdc nem módosíthatók vagy elvethetők.

1202-es hiba – Az adatbázis-alany nem létezik, vagy a felhasználó nem tagja

  • oka: A hiba akkor fordulhat elő, amikor a CDC-felhasználó törölték. Ahhoz, hogy a CDC megfelelően működjön, nem szabad manuálisan módosítania a CDC-metaadatokat, például a CDC schema, a táblák módosítását, a CDC rendszer által tárolt eljárásokat, az alapértelmezett cdc user engedélyeket (sys.database_principals) vagy a cdc userátnevezését.

  • javaslati: Győződjön meg arról, hogy a cdc felhasználó megtalálható az adatbázisban, és hozzá van rendelve a db_owner szerepkör is. A cdc felhasználó létrehozásához lásd a Cdc-felhasználó létrehozása és szerepkör-hozzárendelése című példát.

15517-es hiba – Nem hajtható végre a főfelhasználóként, mert a főfelhasználó nem létezik

  • Ok: Az ilyen típusú főkomponens nem megszemélyesíthető, vagy nincs hozzáférési engedélye. A hiba akkor fordulhat elő, ha a CDC-metaadatok el lettek dobva, vagy már nem része a db_owner szerepkörnek. Ahhoz, hogy a CDC megfelelően működjön, nem szabad manuálisan módosítania a CDC-metaadatokat, például a CDC schema, a táblák módosítását, a CDC rendszer által tárolt eljárásokat, az alapértelmezett cdc user engedélyeket (sys.database_principals), és nem nevezheti át a cdc user.

  • javaslati: Győződjön meg arról, hogy a cdc felhasználó megtalálható az adatbázisban, és hozzá van rendelve a db_owner szerepkör is. A cdc felhasználó létrehozásához lásd a Cdc-felhasználó létrehozása és szerepkör-hozzárendelése című példát.

18807-s hiba – Nem található objektumazonosító a replikációs rendszer táblájában

  • oka: Ez a hiba akkor fordul elő, ha az SQL Server adatbázismotorja nem találja vagy nem fér hozzá a replikációs rendszer táblájának%s. Előfordulhat, hogy a tábla hiányzik vagy nem érhető el. Ahhoz, hogy a CDC megfelelően működjön, ne módosítsa manuálisan a CDC-metaadatokat, például a CDC schema, a táblák módosítását, a CDC rendszer által tárolt eljárásokat, az alapértelmezett cdc user engedélyeket (sys.database_principals) vagy nevezze át a cdc user.

  • javaslat: Ellenőrizze, hogy a rendszertábla létezik-e, és elérhető-e közvetlenül a tábla lekérdezésével. Kérdezze le a sys.objects rendszerkatalógusát, állítson be predikátumi záradékot is_ms_shipped=1 és schema_name=cdc az összes CDC-vel kapcsolatos objektum listázásához. Ha a lekérdezés nem ad vissza objektumokat, tiltsa le, majd engedélyezze újra a CDC-t az adatbázishoz. Az adatbázis változásadat-rögzítésének engedélyezése létrehozza az adatbázis cdc schema, cdc user, metaadattábláit és egyéb rendszerobjektumait. Manuálisan újra engedélyeznie kell CDC-t az egyes táblákhoz, miután a CDC engedélyezve van az adatbázisban.

21050-ös hiba – Ezt a műveletet csak a sysadmin vagy db_owner rögzített kiszolgálói szerepkör tagjai hajthatják végre

  • Ok: A cdc felhasználó el lett távolítva a db_owner adatbázis-szerepkörből vagy a sysadmin kiszolgálói szerepkörből.

  • javaslati: Győződjön meg arról, hogy a cdc felhasználóhoz hozzá van rendelve a db_owner szerepkör. A cdc felhasználó létrehozásához lásd a Cdc-felhasználó létrehozása és szerepkör-hozzárendelése című példát.

Adatbázisterület-kezelés

1105-ös hiba – Nem sikerült helyet lefoglalni az adatbázis objektumai számára, mert a fájlcsoport megtelt

  • Ok: Ez a hiba akkor fordul elő, ha egy adatbázis elsődleges fájlcsoportja elfogy a szabad területből, és az SQL Database nem tud több helyet lefoglalni egy adott fájlcsoporton belüli objektum (például tábla vagy index) számára.

  • javaslat: A probléma megoldásához törölje a felesleges adatokat az adatbázisban, hogy helyet szabadítson fel. Azonosíthatja a fájlcsoportban nem használt táblákat, indexeket vagy más, biztonságosan eltávolítható objektumokat. A térkihasználtság részletes monitorozásáról további információt Az Azure SQL Databaseadatbázisainak fájlterületének kezelése című témakörben talál.

    Ha a szükségtelen adatok/objektumok elvetése nemlehetőség, fontolja meg a magasabb adatbázisszintre való skálázást.

Fontos

Az Azure SQL Database (önálló adatbázis) számítási teljesítményméreteiről (SLO) szóló részletes információkért lásd: A vCore vásárlási modellt használó önálló adatbázisok erőforráskorlátai és Az önálló adatbázisok erőforráskorlátai a DTU vásárlási modell szerint – Azure SQL Database.

1132-s hiba – A rugalmas készlet elérte a tárterületkorlátot

  • oka: Ez a hiba akkor fordul elő, ha a rugalmas készlet tárterület-kihasználtsága túllépte a lefoglalt korlátot.

  • javaslat: A probléma megoldásához alkalmazzon adatarchiválási és törlési stratégiákat, hogy csak a rugalmas készlet részét képező adatbázisokban tárolja a szükséges adatokat. A térkihasználtság szoros monitorozása. További információ: Adatbázisok fájlterületének kezelése az Azure SQL Database-ben.

    Ha az adatok archiválása vagy a szükségtelen adatok/objektumok elvetése nem lehetséges, érdemes lehet magasabb adatbázisszintre méretezni.

Fontos

Az Azure SQL Database (önálló adatbázis) számítási méretével (SLO) kapcsolatos részletes információkért lásd rugalmas készletek erőforráskorlátait a virtuálismag-vásárlási modell és rugalmas készletek erőforráskorlátait a DTU-vásárlási modellhasználatával.

CDC-korlátozások

2628-os hiba – a sztring- vagy bináris adatok csonkulnak a táblában

  • Ok: A CDC-kompatibilis táblák oszlopméretének DDL-utasítások használatával történő módosítása problémákat okozhat a következő CDC-rögzítési folyamattal kapcsolatban. A sys.dm_cdc_errors dinamikus felügyeleti nézet (DMV) hasznos lehet bármilyen CDC ellenőrzéséhez a jelentett problémák, például a 2628-os és a 8115-ös hibák esetén.

  • javaslat: Mielőtt módosítanák az oszlopméretet, meg kell vizsgálnia, hogy a módosítás kompatibilis-e a CDC-változástáblák meglévő adataival. A probléma megoldásához le kell tiltania és újra engedélyeznie kell a CDC-t az adatbázishoz. További információ a CDC engedélyezéséről adatbázishoz vagy táblához a következő szakaszokban található: CDC engedélyezése az Azure SQL Database-hez szakaszban és CDC engedélyezése táblán szakaszban.

22830-as hiba – Az SQL Server jelen verziójában a beépített "SUSER_SNAME" függvény nem támogatott megszemélyesítési környezetben

  • Ok: Ez a hiba a CDC engedélyezése során fordul elő, ha az adatbázisban van egy felhasználói triggerr, amely hívást végez SUSER_SNAME()-ra create_table-on. Az eseményindítókat az alábbi Transact-SQL szkripttel listázhatja. Ez a parancs az objektum-eseményindító és a megfelelő object_idrészleteit adja meg:

    SELECT name,
        object_id
    FROM sys.triggers
    WHERE parent_class_desc = 'DATABASE'
        AND is_disabled = 0;
    

    Az eseményindító definícióinak lekérése után az alábbi szkripttel keresheti meg a SYSTEM_USER hívásait:

    SELECT OBJECT_DEFINITION(object_id) AS trigger_definition;
    
  • javaslat: A probléma megoldásához kövesse az alábbi lépéseket az előző szkriptből beszerzett összes felhasználói eseményindítóhoz.

    • Az eseményindító letiltása
    • CDC engedélyezése
    • Az eseményindító ismételt engedélyezése

További információ: TRIGGER LETILTÁSA.

913-es hiba – A CDC-rögzítési feladat meghiúsul a rendszer CLR-adattípusú tábla módosításainak feldolgozásakor

  • Ok: Ez a hiba akkor fordul elő, ha a CDC-t rendszer CLR-adattípussal rendelkező táblán engedélyezi, DML-módosításokat hajt végre, majd DDL-módosításokat hajt végre ugyanazon a táblán, miközben a CDC rögzítési feladata más táblákhoz kapcsolódó módosításokat dolgoz fel.

  • javaslat: Az ajánlott lépések: a táblán végzett DML-lekérések leállítása, a módosításokat feldolgozó rögzítési munka futtatása, DDL műveletek végrehajtása a táblán, DDL-módosítások feldolgozására szolgáló újabb rögzítési munka futtatása, majd a DML-feldolgozás újbóli engedélyezése. További információ: CDC-rögzítési feladat sikertelen a rendszer CLR-adattípusával (geometria, földrajzi hely vagy hierarchiaazonosító) rendelkező táblák módosításainak feldolgozásakor.

Felhasználó létrehozása és szerepkör hozzárendelése

Ha eltávolították a cdc user-t, manuálisan is hozzáadhatja a felhasználót.

A következő T-SQL-szkripttel hozzon létre egy felhasználót (cdc), és rendelje hozzá a megfelelő szerepkört (db_owner).

IF NOT EXISTS (
    SELECT *
    FROM sys.database_principals
    WHERE NAME = 'cdc'
)
BEGIN
    CREATE USER [cdc] WITHOUT LOGIN
    WITH DEFAULT_SCHEMA = [cdc];
END

EXEC sp_addrolemember 'db_owner', 'cdc';

Szerepkör-tagság ellenőrzése és hozzáadása

Annak ellenőrzéséhez, hogy cdc felhasználó a sysadmin vagy db_owner szerepkörhöz tartozik-e, futtassa a következő T-SQL-lekérdezést:

EXECUTE AS USER = 'cdc';

SELECT is_srvrolemember('sysadmin'), is_member('db_owner');

Ha a cdc felhasználó egyik szerepkörhöz sem tartozik, hajtsa végre a következő T-SQL-lekérdezést, hogy db_owner szerepkört adjon hozzá a cdc felhasználóhoz.

EXEC sp_addrolemember 'db_owner' , 'cdc';