Sdílet prostřednictvím


Změna zachytávání dat a dalších funkcí

platí pro:SQL Serverazure SQL Managed Instance

Tento článek popisuje, jak následující funkce pracují se zachytáváním dat změn pro SQL Server a spravovanou instanci Azure SQL. Informace o službě Azure SQL Database najdete v tématu CDC se službou Azure SQL Database.

Sledování změn

U stejné databáze je možné povolit zachytávání dat a sledování změn. Nejsou vyžadovány žádné zvláštní úvahy. Další informace naleznete v části Práce se sledováním změn.

Zrcadlení databáze

Je možné zrcadlit databázi, která je povolená pro zachytávání dat změn. Aby se po selhání automaticky provedlo zachycení a vyčištění, postupujte takto:

  1. Ujistěte se, že je na nové instanci hlavního serveru spuštěný agent SQL Serveru.

  2. Vytvořte úlohu zachycení a úlohu vyčištění v nové hlavní databázi (bývalá zrcadlová databáze). K vytvoření úloh použijte sp_cdc_add_job uloženou proceduru.

Pokud chcete zobrazit aktuální konfiguraci úlohy vyčištění nebo zachycení, použijte sys.sp_cdc_help_jobs uloženou proceduru v nové instanci hlavního serveru. Pro danou databázi má úloha zachycení název cdc.database_name_capture a úloha vyčištění má název cdc.database_name_cleanup, kde database_name je název databáze.

Ke změně konfigurace úlohy použijte sys.sp_cdc_change_job uloženou proceduru.

Informace o zrcadlení databáze naleznete v tématu Zrcadlení databáze (SQL Server).

Transakční replikace

Zachytávání změn a transakční replikace můžou existovat ve stejné databázi, ale základní soubor tabulek změn se zpracovává jinak, když jsou povoleny obě funkce. Zachytávání změn dat a transakční replikace vždy používají stejný postup, sp_replcmds, ke čtení změn z transakčního protokolu. Pokud je samostatně povoleno sledování změn v datech, úloha SQL Server Agent spouští sp_replcmds. Pokud jsou obě funkce povoleny ve stejné databázi, agent Log Reader volá sp_replcmds. Tento agent naplní tabulky změn i tabulky distribuční databáze. Další informace naleznete v Agent pro čtení protokolu replikace.

Představte si scénář, ve kterém je v databázi AdventureWorks2022 povolená zachytávání dat změn a pro zachycení jsou povolené dvě tabulky. Chcete-li naplnit tabulky změn, zachytávací úloha volá sp_replcmds. Databáze je povolena pro transakční replikaci a vytvoří se publikace. Teď se pro databázi vytvoří agent Log Reader a úloha zachycení se odstraní. Agent Log Reader pokračuje v prohledávání protokolu od posledního posloupnostního čísla protokolu, které bylo potvrzeno do tabulky změn. Tím zajistíte konzistenci dat v tabulkách změn. Pokud je v této databázi zakázaná transakční replikace, agent Log Reader se odebere a úloha zachytávání se znovu vytvoří.

Poznámka

Když se agent Log Reader používá pro zachytávání dat změn i transakční replikaci, replikované změny se nejprve zapíšou do distribuční databáze. Zachycené změny se pak zapíšou do tabulek změn. Obě operace jsou zapsány společně. Pokud se do distribuční databáze zapisuje nějaká latence, bude před zobrazením změn v tabulkách změn odpovídající latence.

Možnost proc exec transakční replikace není při povolení zachytávání dat změn dostupná.

Obnovení nebo připojení databáze

SQL Server používá následující logiku k určení, jestli po obnovení nebo připojení databáze zůstane povolené zachytávání dat změn:

  • Pokud je databáze obnovena na stejný server se stejným názvem databáze, zůstane povolené zachytávání dat změn.

  • Pokud se databáze obnoví na jiný server, ve výchozím nastavení se zachytávání dat změn zakáže a odstraní se všechna související metadata.

    Pokud chcete zachovat zachytávání dat změn, použijte při obnovování databáze možnost KEEP_CDC. Další informace o této možnosti naleznete v tématu RESTORE.

  • Pokud je databáze odpojená a připojená ke stejnému serveru nebo jinému serveru, zůstane zachytávání dat změn povolené.

  • Pokud je databáze připojena nebo obnovena s možností KEEP_CDC k libovolné edici jiné než Standard, Enterprise nebo SQL Managed Instance, operace se zablokuje, protože zachytávání dat změn vyžaduje edice SQL Server Standard, Enterprise nebo SQL Managed Instance. Zobrazí se chybová zpráva 934:

    SQL Server cannot load database '%.*ls' because change data capture is enabled. The currently installed edition of SQL Server does not support change data capture. Either restore database without KEEP_CDC option, or upgrade the instance to one that supports change data capture.

Pomocí sys.sp_cdc_disable_db můžete odebrat záznam změn dat z obnovené nebo připojené databáze.

Po obnovení databáze ve službě Azure SQL Managed Instance zůstane CDC povolená, ale musíte zajistit, aby se úlohy prohledávání a čištění přidaly a spustily. Úlohy můžete přidat ručně spuštěním sys.sp_cdc_add_job.

Uzavřené databáze

V databázích s omezením se nepodporuje zachycování změn dat.

Skupiny dostupnosti

Pokud používáte skupiny dostupnosti AlwaysOn, měl by být výčet změn proveden na sekundární replice, aby se snížilo zatížení disku na primárním serveru.

Sloupcové indexy

U tabulek s clusterovaným indexem columnstore nejde povolit zachytávání dat změn. Počínaje SQL Serverem 2016 je možné ji povolit u tabulek s neclusterovaným indexem columnstore.

Počítané sloupce

CDC nepodporuje hodnoty pro počítané sloupce, i když je vypočítaný sloupec definovaný jako trvalý. Počítané sloupce, které jsou zahrnuté v instanci zachycení, mají vždy hodnotu NULL. Toto chování je určené, nikoli chyba.

Linux

CDC je podporováno pro SQL Server 2017 na Linuxu počínaje CU18 a SQL Server 2019 na Linuxu.

Viz také