Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek popisuje automatické obnovení pro zrcadlení databáze z instance SQL Serveru.
Existují určité situace, kdy zpoždění zrcadlení do prostředků infrastruktury může vést ke zvýšení využití souborů transakčních protokolů. Důvodem je to, že transakční protokol nelze zkrátit, dokud se potvrzené změny nereplikují do zrcadlené databáze. Jakmile velikost transakčního protokolu dosáhne maximálního definovaného limitu, zápisy do databáze selžou. Pokud chcete zabezpečit provozní databáze před selháním zápisu pro důležité transakce OLTP, můžete nastavit automatický mechanismus, který umožňuje zkrácení transakčního protokolu a opětovné inicializaci zrcadlení databáze do prostředků infrastruktury.
Opětovné obnovení zastaví tok transakcí do Microsoft Fabric ze zrcadlené databáze a znovu inicializuje zrcadlení v současné době. To zahrnuje generování nového počátečního snímku tabulek nakonfigurovaných pro zrcadlení a replikaci do Microsoft Fabric. Po vytvoření snímku se přírůstkové změny replikují.
Během opětovného obnovení je položka zrcadlené databáze v Microsoft Fabric k dispozici, ale nebude dostávat přírůstkové změny, dokud se znovu nedokončí. Sloupec reseed_state indikuje sys.sp_help_change_feed_settings stav opětovného obnovení.
Funkce automatického obnovování je ve výchozím nastavení v SQL Serveru 2025 zakázána, pro povolení funkce viz Povolení automatického obnovování. Automatická funkce je povolená a nejde ji spravovat ani zakázat ve službě Azure SQL Database a ve službě Azure SQL Managed Instance.
V zrcadlení prostředků infrastruktury se monitoruje protokol transakcí zdrojové databáze SQL. Autoreseed se aktivuje pouze v případech, kdy jsou splněny následující tři podmínky:
- Transakční protokol je více než
@autoreseedthresholdprocent plný,70například . Na SQL Serveru nakonfigurujte tuto hodnotu při povolení funkce pomocí sys.sp_change_feed_configure_parameters. - Důvodem opakovaného použití protokolu je
REPLICATION. - Vzhledem k tomu, že
REPLICATIONje možné vyvolat čekání na opakované použití protokolu pro jiné funkce, jako je transakční replikace nebo CDC, dojde k automatickému vytváření pouze v případě, žesys.databases.is_data_lake_replication_enabled= 1. Tato hodnota je nakonfigurována zrcadlením prostředků infrastruktury.
Diagnose
Pokud chcete zjistit, jestli zrcadlení prostředků infrastruktury brání zkrácení protokolu pro zrcadlenou databázi, zkontrolujte log_reuse_wait_desc sloupec v zobrazení systémového sys.databases katalogu a zjistěte, jestli je REPLICATIONdůvodem . Další informace o typech čekání opakovaného použití protokolu naleznete v tématu Faktory zpoždění zkrácení transakčního protokolu. Například:
SELECT [name], log_reuse_wait_desc
FROM sys.databases
WHERE is_data_lake_replication_enabled = 1;
Pokud dotaz zobrazuje REPLICATION typ čekání pro opakované použití protokolu, pak kvůli zrcadlení transakčního protokolu nemůže vyprázdnit potvrzené transakce a bude pokračovat v vyplňování.
Pomocí následujícího skriptu T-SQL zkontrolujte celkové místo v protokolu a aktuální využití protokolu a dostupné místo:
USE <Mirrored database name>
GO
--initialize variables
DECLARE @total_log_size bigint = 0;
DECLARE @used_log_size bigint = 0;
DECLARE @size int;
DECLARE @max_size int;
DECLARE @growth int;
--retrieve total log space based on number of log files and growth settings for the database
DECLARE sdf CURSOR
FOR
SELECT SIZE*1.0*8192/1024/1024 AS [size in MB],
max_size*1.0*8192/1024/1024 AS [max size in MB],
growth
FROM sys.database_files
WHERE TYPE = 1
OPEN sdf
FETCH NEXT FROM sdf INTO @size,
@max_size,
@growth
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @total_log_size = @total_log_size +
CASE @growth
WHEN 0 THEN @size
ELSE @max_size
END
FETCH NEXT FROM sdf INTO @size,
@max_size,
@growth
END
CLOSE sdf;
DEALLOCATE sdf;
--current log space usage
SELECT @used_log_size = used_log_space_in_bytes*1.0/1024/1024
FROM sys.dm_db_log_space_usage;
-- log space used in percent
SELECT @used_log_size AS [used log space in MB],
@total_log_size AS [total log space in MB],
@used_log_size/@total_log_size AS [used log space in percentage];
Povolit autoreseed
Pokud je využití protokolu vrácené předchozím skriptem T-SQL téměř plné (například větší než 70%), zvažte povolení zrcadlené databáze pro automatické obnovení pomocí sys.sp_change_feed_configure_parameters uložené procedury systému. Pokud chcete například povolit automatické chování:
USE <Mirrored database name>
GO
EXECUTE sys.sp_change_feed_configure_parameters
@autoreseed = 1
, @autoreseedthreshold = 70;
Další informace najdete v tématu sys.sp_change_feed_configure_parameters.
Ve zdrojové databázi by se měl znovu uvolnit prostor transakčního protokolu uchovávaný zrcadlením. Pokud příčinou blokování je CHECKPOINT stále zrcadlení, vyvolejte u zdrojové databáze SQL Serveru příručku REPLICATION k vynucení uvolnění místa v protokolu. Další informace naleznete v tématu CHECKPOINT (Transact-SQL).
Ruční změna
Osvědčeným postupem je otestovat ruční obnovení pro konkrétní databázi pomocí následující uložené procedury, abyste pochopili dopad před zapnutím funkce automatického obnovení.
USE <Mirrored database name>
GO
EXECUTE sp_change_feed_reseed_db_init @is_init_needed = 1;
Další informace najdete v tématu sys.sp_change_feed_reseed_db_init.
Kontrola, jestli se aktivovalo opětovné spuštění
Sloupec
reseed_statev systémové uložené proceduřesys.sp_help_change_feed_settingsna zdrojové SQL databázi ukazuje její aktuální stav obnovy.-
0= Normální. -
1= Databáze spustila proces opětovné inicializace do prostředků infrastruktury. Přechodný stav. -
2= Databáze se znovu inicializuje do prostředků infrastruktury a čeká na restartování replikace. Přechodný stav. Po vytvoření replikace se stav opětovného obnovení přesune do0.
Další informace najdete v tématu sys.sp_help_change_feed_settings.
-
Všechny tabulky povolené pro zrcadlení v databázi budou mít hodnotu
7sloupcestatevsys.sp_help_change_feed_table.Další informace najdete v sys.sp_help_change_feed_table.