Sdílet prostřednictvím


Změna zachytávání dat (CDC) pomocí Azure SQL Database

Platí pro:Azure SQL Database

V tomto článku se dozvíte, jak se v Azure SQL Database implementuje zachytávání dat změn (CDC) za účelem zaznamenání aktivity v databázi při změně tabulek a řádků. Podrobnosti o funkci CDC, včetně toho, jak je implementována v SQL Serveru a Azure SQL Managed Instance, najdete v tématu Co je zachytávání dat změn (CDC)?

Přehled

Ve službě Azure SQL Database plánovač zachytávání dat změn nahrazuje úlohy agenta SQL Serveru, které zaznamenávají a uklízely data změn pro zdrojové tabulky. Plánovač spouští procesy zachytávání a čištění automaticky v oboru databáze a zajišťuje spolehlivost a výkon bez externích závislostí. Uživatelé si zachovají možnost ručního zahájení procesů zachytávání a čištění podle potřeby.

Dobrým příkladem příjemce dat, který tato technologie používá, je extrakce, transformace a načítání aplikace (ETL). Aplikace ETL přírůstkově načítá data změn ze zdrojových tabulek SQL Serveru do datového skladu nebo datového tržiště. I když reprezentace zdrojových tabulek v datovém skladu musí odrážet změny ve zdrojových tabulkách, není vhodná kompletní technologie, která aktualizuje repliku zdroje. Místo toho potřebujete spolehlivý datový proud změn, který je strukturovaný, aby je uživatelé mohli použít na odlišné cílové reprezentace dat. Tato technologie poskytuje zachytávání dat změn SQL Serveru.

Další informace o zachytávání dat změn ve službě Azure SQL Database najdete v této epizodě Zveřejnění dat:

Tok dat

Následující obrázek znázorňuje hlavní tok dat pro zachytávání dat změn ve službě Azure SQL Database:

Diagram vývojového diagramu znázorňující tok dat pro zachytávání dat změn

Požadavky

Oprávnění

Role db_owner je nutná k povolení zachytávání dat změn pro Azure SQL Database.

Požadavky služby Azure SQL Database na výpočetní prostředky

CdC ve službě Azure SQL Database můžete povolit pro libovolnou úroveň služeb v nákupním modelu založeném na virtuálních jádrech pro izolované databáze i elastické fondy.

Pro databáze v nákupním modelu DTU je CDC podporován pro databáze v úrovni S3 nebo vyšší. Podjádrový vrstvy (Basic, S0, S1, S2) nejsou pro CDC podporované.

Povolení CDC pro Azure SQL Database

Než budete moct vytvořit instanci zachycení pro jednotlivé tabulky, musíte pro službu Azure SQL Database povolit CDC.

Pokud chcete povolit CDC, připojte se ke službě Azure SQL Database přes Azure Data Studio nebo SQL Server Management Studio (SSMS). Otevřete nové okno dotazu a povolte CDC spuštěním následujícího příkazu T-SQL:

EXEC sys.sp_cdc_enable_db;
GO

Poznámka:

Pokud chcete zjistit, jestli je databáze již povolená, zadejte dotaz na is_cdc_enabled sloupec v sys.databases zobrazení katalogu.

Pokud je pro databázi povoleno zachytávání dat změn, cdc schemacdc uservytvoří se pro databázi tabulky , tabulky metadat a další systémové objekty. Obsahuje cdc schema tabulky metadat zachycení dat změn a po povolení cdc pro zdrojové tabulky slouží jednotlivé tabulky změn jako úložiště pro data změn. Obsahuje cdc schema také přidružené systémové funkce používané k dotazování na data změn.

Důležité

Zachytávání cdc schemacdc userdat změn vyžaduje výhradní použití a . Pokud schéma nebo uživatel databáze pojmenovaný cdc v databázi aktuálně existuje, nemůžete pro databázi povolit příkaz cdc, dokud se schéma nebo uživatel nepřejmenuje nebo nepřejmenuje.

Povolení CDC pro tabulku

Po povolení CDC pro službu Azure SQL Database můžete cdC povolit na úrovni tabulky výběrem jedné nebo více tabulek pro sledování změn dat. Vytvořte instanci zachycení pro jednotlivé zdrojové tabulky pomocí uložené procedury sys.sp_cdc_enable_table.

Pokud chcete pro tabulku povolit CDC, spusťte následující příkaz T-SQL:

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

Tip

Předchozí příklad nepoužívá explicitní @role_name nastavením parametru na NULL, ale pomocí role gating můžete omezit přístup k datům změny.

Sloupce ve zdrojové tabulce, které se mají zachytit

Ve výchozím nastavení jsou všechny sloupce ve zdrojové tabulce označené jako zachycené sloupce. Pokud je potřeba sledovat jenom podmnožinu sloupců, například z důvodu ochrany osobních údajů nebo výkonu, použijte parametr @captured_column_list k určení podmnožinu sloupců.

Pokud chcete povolit CDC pro konkrétní seznam sloupců v tabulce, spusťte následující příkaz T-SQL:

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

Tip

Všimněte si, že předchozí příklad nepoužívá explicitní @role_name a nastavením parametru na NULL, ale pomocí role gating můžete omezit přístup k datům změn.

Role pro řízení přístupu k tabulce změn

Účelem pojmenované role je řídit přístup k datům změny. Zadaná role může být existující pevná role serveru nebo role databáze. Pokud zadaná role ještě neexistuje, vytvoří se automaticky role databáze tohoto názvu. Uživatelé musí mít oprávnění SELECT pro všechny zachycené sloupce zdrojové tabulky. Kromě toho, pokud je zadána role, musí být také uživatelé, kteří nejsou členy správce systému nebo db_owner role, členy zadané role.

Pokud chcete povolit CDC pro tabulku určující roli gating, spusťte následující příkaz T-SQL:

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

Pokud nechcete používat roli gating, explicitně nastavte parametr @role_name na NULLhodnotu .

Funkce pro dotazování na čisté změny

Instance zachycení vždy obsahuje funkci s hodnotou tabulky, která vrátí všechny položky tabulky změn, ke kterým došlo v definovaném intervalu. Tato funkce je pojmenována připojením názvu instance zachycení k cdc.fn_cdc_get_all_changes_. Další informace najdete v tématu cdc.fn_cdc_get_all_changes.

Pokud je parametr @supports_net_changes nastaven na hodnotu 1, vygeneruje se pro instanci zachycení také funkce net changes. Tato funkce vrátí pouze jednu změnu pro každý samostatný řádek změněný v intervalu zadaném ve volání. Další informace najdete v tématu cdc.fn_cdc_get_net_changes.

Aby bylo možné podporovat dotazy net changes, musí mít zdrojová tabulka primární klíč nebo jedinečný index, aby bylo možné jednoznačně identifikovat řádky. Pokud se použije jedinečný index, je nutné zadat název indexu pomocí parametru @index_name . Sloupce definované v primárním klíči nebo jedinečném indexu musí být zahrnuty do seznamu zdrojových sloupců, které se mají zaznamenat.

Pokud chcete pro tabulku s podporou net změn povolit CDC, spusťte následující příkaz T-SQL:

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

Pokud je pro tabulku s existujícím primárním klíčem povolen záznam dat změn a parametr @index_name se nepoužívá k identifikaci alternativního jedinečného indexu, funkce zachytávání dat změn používá primární klíč. Následné změny primárního klíče nejsou povoleny, aniž byste napřed zakázali zachytávání dat změn pro tabulku. To platí bez ohledu na to, jestli byla při konfiguraci zachytávání dat změn požadována podpora dotazů na net changes.

Pokud v tabulce v době, kdy ji povolíte pro zachytávání dat změn, není v tabulce žádný primární klíč, bude následné přidání primárního klíče ignorováno zachytáváním dat změn. Vzhledem k tomu, že zachytávání dat změn nepoužívá primární klíč, který se vytvoří po povolení tabulky, je možné klíčové sloupce a sloupce klíčů odebrat bez omezení.

Další informace o argumentech uložené procedury sys.sp_cdc_enable_table naleznete v tématu sys.sp_cdc_enable_table.

Tip

Pokud chcete zjistit, jestli je pro zachytávání dat změn povolená zdrojová tabulka, prozkoumejte is_tracked_by_cdc sloupec v sys.tables zobrazení katalogu.

Zakázání CDC pro Azure SQL Database

Zakázání CDC pro službu Azure SQL Database odebere všechna přidružená metadata zachytávání dat změn, včetně cdc userobjektů , cdc schemaa externích procesů zachytávání a čištění plánovačů. Všechny role vytvořené zachytáváním dat změn se ale neodeberou automaticky a je nutné je explicitně odstranit.

Poznámka:

Pokud chcete zjistit, jestli je databáze povolená, zadejte dotaz na is_cdc_enabled sloupec v sys.databases zobrazení katalogu.

Před zakázáním CDC na úrovni databáze není nutné zakázat CDC pro jednotlivé tabulky.

Pokud chcete cdC zakázat na úrovni databáze, spusťte následující příkaz T-SQL:

EXEC sys.sp_cdc_disable_db;
GO

Tip

Jakmile cdC zakážete na úrovni databáze, budete muset znovu povolit CDC pro jednotlivé tabulky , pokud chcete znovu použít funkci CDC.

Správa CDC

Ve službě Azure SQL Database je CDC klíčovou funkcí pro sledování a správu změn v databázových tabulkách. Na rozdíl od tradičních prostředí SQL Serveru využívá Azure SQL Database plánovač pro zachytávání dat změn, který zpracovává úlohy CDC, a ne spoléhá na úlohy agenta SQL Serveru. Tento plánovač automaticky zahájí pravidelné procesy zachytávání a čištění tabulek CDC v rámci vaší databáze a zajišťuje spolehlivost a výkon bez externích závislostí.

Automatické zachytávání a čištění CDC

Úloha zachytávání CDC ve službě Azure SQL Database funguje bezproblémově a každých 20 sekund běží a efektivně sleduje změny. Úloha vyčištění současně běží každou hodinu a zajišťuje, aby tabulky CDC zůstaly optimalizované. Uživatelé můžou mít jistotu, že správa CDC probíhá automaticky bez ručního zásahu.

Důležité

Pokud má bezserverová databáze povolenou službu CDC a je v pozastaveném stavu, cdC se nespustí. Kontrola CDC nebude mít vliv na funkci automatického pozastavení.

Ruční řízení CDC

Zatímco CDC běží automaticky, uživatelé udržují flexibilitu při provádění ručních operací CDC na vyžádání. Postupy sp_cdc_scan a sp_cdc_cleanup_change_tables umožňují podle potřeby aktivovat úlohy zachytávání a čištění.

Monitorování CDC

Azure SQL Database poskytuje cenné nástroje pro monitorování aktivit CDC. Dvě zobrazení dynamické správy, sys.dm_cdc_log_scan_sessions a sys.dm_cdc_errors, nabízejí přehled o procesech CDC, abyste měli úplný přehled o změnách dat.

Přizpůsobení CDC

Azure SQL Database sice zjednodušuje správu CDC, ale existují určitá omezení:

  • Frekvenci úloh zachytávání a čištění CDC není možné přizpůsobit.
  • Úlohy pollinginterval zachytávání a čištění a continuous jejich hodnoty se v Azure SQL Database nepoužijí.
  • Odebrání položky úlohy zachycení z cdc.cdc_jobs tabulky nezastaví úlohu zachytávání na pozadí.
  • Vyřazení položky úlohy vyčištění zastaví úlohu vyčištění.
  • Tabulka cdc.cdc_jobs se nachází ve schématu cdc , nikoli msdb.

Navzdory těmto omezením můžete i nadále přizpůsobit následující možnosti:

  • Zadejte dotaz na cdc.cdc_jobs tabulku s aktuálními podrobnostmi o konfiguraci.
  • maxtrans Upravte nastavení a maxscans možnosti pomocí sp_cdc_change_job uložené procedury.
  • Spravujte úlohy pomocí využití sp_cdc_drop_job a sp_cdc_add_job podle potřeby.

Důležité informace o výkonu a doporučení

Povolení zachytávání dat změn pro službu Azure SQL Database má srovnatelný účinek na výkon, který je srovnatelný s povolením CDC pro SQL Server nebo spravovanou instanci Azure SQL. Vliv na výkon při povolování CDC ale ovlivňuje několik faktorů, mezi které patří:

  • Počet tabulek s podporou CDC ve službě Azure SQL Database

  • Frekvence změn ve sledovaných tabulkách nebo objemu transakcí Aktivní transakce brání zkrácení protokolu, dokud transakce potvrzení a CDC vyhledávání nezachytí nebo transakce přeruší. Výsledkem může být vyplnění transakčního protokolu více než obvykle a mělo by se monitorovat, aby se transakční protokol nevyplnil.

  • Ujistěte se, že je ve zdrojové databázi k dispozici volné místo, protože artefakty CDC (například tabulky CT, cdc_jobs atd.) jsou uložené ve stejné databázi.

  • Bez ohledu na to, jestli máte jednu databázi, nebo je součástí elastického fondu.

  • Databáze v elastickém fondu mezi sebou sdílejí prostředek (například místo na disku), takže povolení CDC ve více databázích riskuje dosažení maximální velikosti disku elastického fondu. Monitorujte prostředky, jako je procesor, paměť a propustnost protokolu. Další informace najdete v tématu Správa prostředků v hustých elastických fondech.

  • Při práci s databázemi v elastických fondech je důležité zvážit počet tabulek s podporou CDC a počet databází, do kterých tyto tabulky patří. Doporučujeme vyhodnotit vaše úlohy a přijmout požadovaná opatření, jako je škálování elastického fondu. Další informace najdete v tématu Škálování prostředků elastického fondu ve službě Azure SQL Database.

Důležité

Tyto aspekty jsou obecné pokyny. Přesné pokyny k optimalizaci výkonu pro konkrétní úlohu vám pomůžou kontaktovat podporu Microsoftu.

Při používání CDC se službou Azure SQL Database zvažte následující osvědčené postupy:

  • Před povolením CDC v produkčním prostředí důkladně otestujte svou úlohu, abyste mohli určit vhodné SLO pro vaši úlohu. Další informace o velikostech výpočetních prostředků služby Azure SQL Database najdete v tématu Úrovně služby.

  • Zvažte škálování počtu vCores nebo přechod na vyšší úroveň databáze, jako je Hyperscale, abyste zachovali předchozí úroveň výkonu po povolení funkce CDC ve službě Azure SQL Database. Další informace najdete v tématu Nákupní model virtuálních jader – Azure SQL Database a úroveň služby Hyperscale.

  • Pečlivě monitorujte využití místa. Další informace najdete v tématu Správa prostoru souborů pro databáze ve službě Azure SQL Database.

  • Sledujte míru generování protokolů, další informace najdete v tématu Využití prostředků podle uživatelských úloh a interních procesů.

  • Procesy prohledávání a čištění CDC jsou součástí běžné databázové úlohy (také spotřebovávají prostředky). V závislosti na objemu transakcí může být snížení výkonu podstatné kvůli procesům prohledávání a čištění, které nedrží krok s úlohou, protože se přidávají celé řádky ke změnám tabulek a pro operace aktualizace, zahrnuje se také předběžné nastavení. Doporučujeme vyhodnotit vaši úlohu a přijmout požadovaná opatření podle předchozích doporučení. Další informace najdete v části správa CDC v tomto článku.

Důležité

Plánovač spouští zachytávání a čištění automaticky v rámci služby SQL Database. Úloha zachytávání CDC se spustí každých 20 sekund a úloha čištění se spustí každou hodinu.

  • Pokud chcete zabránit zvýšení latence, ujistěte se, že počet databází s podporou CDC nepřekročil počet virtuálních jader přidělených elastickému fondu. Další informace najdete v tématu Správa prostředků v hustých elastických fondech.

  • Na základě vaší úlohy a úrovně výkonu zvažte změnu doby uchovávání CDC na menší číslo, než je výchozí hodnota tří dnů, aby se zajistilo, že proces čištění dokáže držet krok se změnami v tabulce změn. Zachování nižší doby uchovávání při monitorování velikosti databáze je dobrým postupem.

  • Při naplnění změn v tabulkách změn se neposkytuje žádná smlouva o úrovni služeb (SLA ). Podsekundová latence se také nepodporuje.

Známé problémy a omezení

Agresivní zkracování protokolu

Když ve službě Azure SQL Database povolíte zachytávání dat změn (CDC), zakáže se agresivní funkce zkrácení protokolu akcelerovaného obnovení databáze (ADR). Důvodem je to, že kontrola CDC přistupuje k transakčnímu protokolu databáze. Aktivní transakce brání zkrácení transakčního protokolu, dokud transakce potvrzení a CDC vyhledávání nezachytí nebo transakce přeruší.

Při povolování CDC doporučujeme při vytváření nebo opětovném sestavení indexu použít možnost obnovitelného indexu. Obnovitelné indexy neudržují dlouho běžící transakci otevřenou a umožňují zkrácení protokolu během operace pro lepší správu prostoru protokolu. Další informace najdete v tématu Pokyny k online operacím indexu – důležité informace o indexech s možností obnovení.

Úroveň služby Azure SQL Database

I když se CDC podporuje pro databáze a elastické fondy v libovolné úrovni služby v nákupním modelu založeném na virtuálních jádrech, databáze nižší než S3 (například Basic, S0, S1, S2) se v nákupním modelu DTU nepodporují.

Omezení protokolů služby Azure SQL Database

Zrychlené obnovení databáze a CDC jsou kompatibilní. Chování agresivního zkrácení protokolu ADR je však zakázané, pokud je CDC povoleno. Důvodem je to, že skenování CDC aktivně přistupuje k transakčnímu protokolu databáze a komunikuje s ním, což brání agresivnímu zkracování protokolu ADR.

Když povolíte CDC, můžete sledovat vyšší využití transakčních protokolů. Možná budete muset vertikálně škálovat na vyšší úroveň služby nebo zvýšit výpočetní kapacitu pro zajištění dostatečného prostoru transakčního protokolu pro potřeby všech vašich úloh.

Tip

Pokud vaše úlohy vyžadují vyšší celkový výkon z důvodu vyšší propustnosti transakčního protokolu a rychlejší doby potvrzení transakcí, použijte úroveň služby Hyperscale.

Příkazy DDL online nejsou podporovány.

Příkazy DDL online nejsou podporovány , pokud je v databázi povolen záznam změn změn.

Zachycení a vyčištění vlastního nastavení

Konfigurace frekvence zachytávání a procesů čištění pro CDC ve službě Azure SQL Database není možná. Plánovač spouští zachytávání a čištění automaticky.

Převzetí služeb při selhání ve službě Azure SQL Database

V místních nebo geografických scénářích převzetí služeb při selhání, pokud má vaše databáze povolenou funkci CDC, proces zachytávání a čištění změn dat probíhá automaticky v nové primární databázi po převzetí služeb při selhání.

Microsoft Entra ID

Poznámka:

ID Microsoft Entra se dříve označovalo jako Azure Active Directory (Azure AD).

Pokud vytvoříte databázi ve službě Azure SQL Database jako uživatel Microsoft Entra a povolíte na ní CDC, uživatel SQL (například i jeden v sysadmin roli) nemůže zakázat nebo provést změny artefaktů CDC. Jiný uživatel Microsoft Entra však může povolit nebo zakázat CDC ve stejné databázi.

Podobně platí, že pokud vytvoříte databázi jako uživatel SQL, povolení nebo zakázání zachytávání dat změn, protože uživatel Microsoft Entra nefunguje.

Povolení CDC selže, pokud vytvoříte databázi ve službě Azure SQL Database jako uživatel Microsoft Entra, nepovolujte CDC a po obnovení databáze zkuste povolit CDC.

Pokud chcete tento problém vyřešit, připojte se k databázi pomocí účtu správce Microsoft Entra a spusťte následující T-SQL:

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

EXEC sys.sp_cdc_enable_db;

Obnovení k určitému bodu v čase (PITR)

Pokud jste ve službě Azure SQL Database povolili CDC jako uživatel SQL, obnovení k určitému bodu v čase (PITR) zachová CDC v obnovené databázi, pokud se neobnoví na nižší úroveň výkonu SLO. Pokud je obnovena úroveň služby subcore, artefakty CDC nejsou k dispozici.

Pokud ve své databázi povolíte cdC jako uživatel Microsoft Entra, není možné provést obnovení k určitému bodu v čase (PITR) na dílčí cíl služby SLO. Obnovte databázi do stejného nebo vyššího cíle úrovně služby jako zdroj a v případě potřeby zakažte CDC.

Řešení problému

Tato část obsahuje pokyny a kroky pro řešení potíží spojené s CDC ve službě Azure SQL Database. Chyby související s CDC mohou bránit řádnému fungování procesu zachycení a vést k rozšíření databázového transakčního protokolu.

Pokud chcete tyto chyby prozkoumat, můžete dotazovat zobrazení dynamické správy sys.dm_cdc_errors. sys.dm_cdc_errors Pokud zobrazení dynamické správy vrátí nějaké chyby, projděte si následující část a seznamte se s kroky pro zmírnění rizik.

Poznámka:

Další informace o konkrétním kódu chyby najdete v tématu Události a chyby databázového stroje.

V této části jsou uvedené různé kategorie řešení potíží:

Kategorie Popis
Změněná metadata Obsahuje informace o tom, jak zmírnit problémy související s CDC při změně nebo vyřazení sledované tabulky.
Správa prostoru databáze Obsahuje informace o tom, jak zmírnit problémy při vyčerpání prostoru databáze.
Omezení CDC Obsahuje informace o tom, jak zmírnit problémy způsobené omezeními CDC.

Změněná metadata

Chyba 200/208 – Neplatný název objektu

  • Příčina: K chybě může dojít, když dojde k vyřazení metadat CDC. Aby CDC fungoval správně, neměli byste ručně upravovat žádná metadata CDC, jako CDC schemajsou například , změnit tabulky, systémové uložené procedury CDC, výchozí cdc user oprávnění (sys.database_principals) nebo přejmenovat cdc user.

  • Doporučení: Pokud chcete tento problém vyřešit, musíte pro databázi zakázat a znovu povolit CDC. Při povolení zachytávání dat změn pro databázi vytvoří schéma cdc, uživatele cdc, tabulky metadat a další systémové objekty pro databázi. Po povolení CDC pro databázi budete muset ručně znovu povolit CDC pro jednotlivé tabulky .

Poznámka:

Objekty nalezené v zobrazení systémového katalogu sys.objects a is_ms_shipped=1schema_name=cdc neměly by být změněny ani vynechány.

Chyba 1202 – Objekt zabezpečení databáze neexistuje nebo uživatel není členem

  • Příčina: K chybě může dojít při vyřazení uživatele CDC. Aby CDC fungoval správně, neměli byste ručně upravovat žádná metadata CDC, jako CDC schemajsou , změnit tabulky, systémové uložené procedury CDC, výchozí cdc user oprávnění (sys.database_principals) nebo přejmenovat cdc user.

  • Doporučení: Ujistěte se, že cdc uživatel ve vaší databázi existuje, a také má přiřazenou db_owner roli. Pokud chcete uživatele vytvořit cdc , podívejte se na příklad Vytvoření uživatele cdc a přiřazení role.

Chyba 15517 – Nejde spustit jako objekt zabezpečení databáze, protože objekt zabezpečení neexistuje

  • Příčina: Tento typ objektu zabezpečení nemůže být zosobněn nebo nemáte oprávnění. K chybě může dojít, když dojde k vyřazení metadat CDC nebo už není součástí db_owner role. Aby CDC fungoval správně, neměli byste ručně upravovat žádná metadata CDC, jako CDC schemajsou , změnit tabulky, systémové uložené procedury CDC, výchozí cdc user oprávnění (sys.database_principals) nebo přejmenovat cdc user.

  • Doporučení: Ujistěte se, že cdc uživatel ve vaší databázi existuje, a také má přiřazenou db_owner roli. Pokud chcete uživatele vytvořit cdc , podívejte se na příklad Vytvoření uživatele cdc a přiřazení role.

Chyba 18807 – Nejde najít ID objektu pro systémovou tabulku replikace

  • Příčina: K této chybě dochází v případě, že databázový stroj SQL Serveru nemůže najít systémovou tabulku replikace nebo získat přístup k systémové tabulce%s. Tabulka může chybět nebo je nedostupná. Aby cdC fungoval správně, neupravujte ručně žádná metadata CDC, jako je CDC schema, změna tabulek, systémové uložené procedury CDC, výchozí oprávnění cdc user (sys.database_principals) nebo přejmenování cdc user.

  • Doporučení: Ověřte, že systémová tabulka existuje a je přístupná, a to tak, že se na tabulku dotazuje přímo. Dotazování systémového katalogu sys.objects , nastavení predikát klauzule s is_ms_shipped=1 a schema_name=cdc výpis všech objektů souvisejících s CDC. Pokud dotaz nevrací žádné objekty, měli byste zakázat a znovu povolit CDC pro vaši databázi. Povolení zachytávání dat změn pro databázi vytvoří cdc schemapro databázi tabulky cdc usermetadat a další systémové objekty pro databázi. Po povolení CDC pro databázi budete muset ručně znovu povolit CDC pro jednotlivé tabulky .

Chyba 21050 – Tuto operaci můžou provést pouze členové role správce systému nebo db_owner pevné role serveru.

  • Příčina: Uživatel cdc byl odebrán z db_owner databázové role nebo z sysadmin role serveru.

  • Doporučení: Ujistěte se, cdc že má uživatel přiřazenou db_owner roli. Pokud chcete uživatele vytvořit cdc , podívejte se na příklad Vytvoření uživatele cdc a přiřazení role.

Správa prostoru databáze

Chyba 1105 – Nepodařilo se přidělit prostor pro objekt v databázi, protože skupina souborů je plná

  • Příčina: K této chybě dochází v případě, že primární skupina souborů databáze nemá volné místo a SQL Database nemůže přidělit více místa pro objekt (například tabulku nebo index) v této skupině souborů.

  • Doporučení: Pokud chcete tento problém vyřešit, odstraňte všechna nepotřebná data v databázi, abyste uvolnili místo. Identifikujte nepoužívané tabulky, indexy nebo jiné objekty ve skupině souborů, které je možné bezpečně odebrat. Pečlivě monitorujte využití místa, kde najdete další informace v tématu Správa prostoru souborů pro databáze v Azure SQL Database.

    V případě, že vyřazení nepotřebných dat nebo objektů není možné, zvažte škálování na vyšší úroveň databáze.

Důležité

Podrobné informace o velikostech výpočetních prostředků (SLO) služby Azure SQL Database najdete v tématu Omezení prostředků pro izolované databáze využívající nákupní model virtuálních jader a omezení prostředků pro izolované databáze využívající nákupní model DTU – Azure SQL Database.

Chyba 1132 – Elastický fond dosáhl limitu úložiště

  • Příčina: K této chybě dochází v případě, že využití úložiště ve vašem elastickém fondu překročilo přidělený limit.

  • Doporučení: Pokud chcete tento problém vyřešit, implementujte strategie archivace a vyprázdnění dat, aby se zachovala pouze potřebná data v databázích, které jsou součástí elastického fondu. Pečlivě monitorujte využití místa. Další informace najdete v tématu Správa prostoru souborů pro databáze ve službě Azure SQL Database.

    V případě, že archivace nebo vyřazení nepotřebných dat nebo objektů není možné, zvažte škálování na vyšší úroveň databáze.

Důležité

Podrobné informace o velikostech výpočetních prostředků (SLO) služby Azure SQL Database najdete v tématu Omezení prostředků pro elastické fondy s využitím nákupního modelu virtuálních jader a limitů prostředků pro elastické fondy pomocí nákupního modelu DTU.

Omezení CDC

Chyba 2628 – řetězcová nebo binární data by se v tabulce zkrátila

  • Příčina: Změna velikosti sloupců tabulky s podporou CDC pomocí příkazů DDL může způsobit problémy s následným procesem zachytávání CDC. Zobrazení sys.dm_cdc_errors dynamické správy (DMV) je užitečné při kontrole všech nahlášených problémů CDC, jako jsou chyby 2628 a 8115.

  • Doporučení: Před provedením jakýchkoli změn velikosti sloupce je nutné posoudit, zda je změna kompatibilní s existujícími daty v tabulkách změn CDC. Chcete-li tento problém vyřešit, je nutné zakázat a znovu povolit CDC pro vaši databázi. Další informace o povolení CDC pro databázi nebo tabulku naleznete v tématu Povolení CDC pro Azure SQL Database a povolení CDC pro oddíly tabulky v tomto článku.

Chyba 22830 – Integrovaná funkce SUSER_SNAME v kontextu zosobnění není v této verzi SQL Serveru podporována.

  • Příčina: K této chybě dochází při povolování CDC, pokud v databázi existuje aktivační událost uživatele, která má volání SUSER_SNAME()create_table. Triggery můžete vypsat pomocí následujícího skriptu Jazyka Transact-SQL. Tento příkaz poskytuje podrobnosti o triggeru objektu a odpovídající object_id:

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

    Jakmile získáte definice triggeru, můžete hledat volání, která SYSTEM_USER se provádějí pomocí následujícího skriptu:

    SELECT OBJECT_DEFINITION(object_id) AS trigger_definition;
    
  • Doporučení: Pokud chcete tento problém vyřešit, postupujte podle těchto kroků pro každý trigger uživatele získaný z předchozího skriptu.

    • Zakázání triggeru
    • Povolit CDC
    • Opětovné povolení triggeru

Další informace naleznete v tématu DISABLE TRIGGER.

Chyba 913 – Úloha zachytávání CDC selže při zpracování změn pro tabulku se systémovým datovým typem CLR

  • Příčina: K této chybě dochází při povolení CDC v tabulce se systémovým datovým typem CLR, provádění změn DML a následné provádění změn DDL ve stejné tabulce, zatímco úloha zachytávání CDC zpracovává změny související s jinými tabulkami.

  • Doporučení: Doporučeným postupem je vyřaďte do tabulky DML, spusťte úlohu zachycení pro zpracování změn, spusťte DDL pro tabulku, spusťte úlohu zachycení pro zpracování změn DDL a pak znovu povolte zpracování DML. Další informace najdete v tématu selhání úlohy zachytávání CDC při zpracování změn tabulky se systémovým datovým typem CLR (geometry, geography nebo hierarchyid).

Vytvoření uživatele a přiřazení role

cdc user Pokud byl odebrán, můžete uživatele přidat zpět ručně.

Pomocí následujícího skriptu T-SQL vytvořte uživatele (cdc) a přiřaďte správnou roli (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';

Kontrola a přidání členství v rolích

Pokud chcete ověřit, jestli cdc uživatel patří do role nebo sysadmin do db_owner role, spusťte následující dotaz T-SQL:

EXECUTE AS USER = 'cdc';

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

cdc Pokud uživatel nepatří do některé z rolí, spusťte následující dotaz T-SQL a přidejte db_owner do cdc něj roli.

EXEC sp_addrolemember 'db_owner' , 'cdc';