Úvod
Každá operace zálohování na serveru SQL je zapsána do protokolu chyb serveru SQL Server. To zahrnuje zálohy protokolu transakcí, i když k nim dojde jako součást konfigurace odesílání protokolu transakcí. Někdy může být protokolování celé zálohy protokolu obtíž v protokolu chyb serveru SQL Server a je třeba jej spravovat. Trace Flag 3226 se používá k potlačení takového protokolování a my si v tomto článku ukážeme, jak to lze provést.
Konfigurace odesílání protokolu transakcí
Abychom demonstrovali hodnotu tohoto příznaku trasování, implementujeme konfiguraci malého protokolu dopravy pomocí databáze SQL Server 2017 s názvem Practice2017 . Naší primární instancí je EPG-KIGIRI\I2017 a tuto databázi replikujeme do instance SQL Server 2019 EPG-KIGIRI\I2019 (Viz obr. 2). Celý konfigurační skript je uveden ve výpisu 1.
Obr. 1 Zaznamenejte konfiguraci zásilky na primární
[rozbalit název =”Kód “]
-- Listing 1: Transaction Log Shipping Configuration Script -- Execute the following statements on the primary to configure log shipping -- for database [EPG-KIGIRI\I2017].[Practice2017], -- The script is to be run on the primary in the context of the [msdb] database. ------------------------------------------------------------------------------------- -- Adding the log shipping configuration -- ****** Begin: Script to be run on the primary: [EPG-KIGIRI\I2017] ****** DECLARE @LS_BackupJobId AS uniqueidentifier DECLARE @LS_PrimaryId AS uniqueidentifier DECLARE @SP_Add_RetCode As int EXEC @SP_Add_RetCode = master.dbo.sp_add_log_shipping_primary_database @database = N'Practice2017' ,@backup_directory = N'G:\Backup\LogShip\' ,@backup_share = N'\\Epg-kigiri\g$\Backup\LogShip\' ,@backup_job_name = N'LSBackup_Practice2017' ,@backup_retention_period = 1440 ,@backup_compression = 2 ,@monitor_server = N'EPG-KIGIRI\I2017' ,@monitor_server_security_mode = 1 ,@backup_threshold = 60 ,@threshold_alert_enabled = 1 ,@history_retention_period = 2880 ,@backup_job_id = @LS_BackupJobId OUTPUT ,@primary_id = @LS_PrimaryId OUTPUT ,@overwrite = 1 IF (@@ERROR = 0 AND @SP_Add_RetCode = 0) BEGIN DECLARE @LS_BackUpScheduleUID As uniqueidentifier DECLARE @LS_BackUpScheduleID AS int EXEC msdb.dbo.sp_add_schedule @schedule_name =N'LSBackupSchedule_EPG-KIGIRI\I20171' ,@enabled = 1 ,@freq_type = 4 ,@freq_interval = 1 ,@freq_subday_type = 4 ,@freq_subday_interval = 5 ,@freq_recurrence_factor = 0 ,@active_start_date = 20190113 ,@active_end_date = 99991231 ,@active_start_time = 0 ,@active_end_time = 235900 ,@schedule_uid = @LS_BackUpScheduleUID OUTPUT ,@schedule_id = @LS_BackUpScheduleID OUTPUT EXEC msdb.dbo.sp_attach_schedule @job_id = @LS_BackupJobId ,@schedule_id = @LS_BackUpScheduleID EXEC msdb.dbo.sp_update_job @job_id = @LS_BackupJobId ,@enabled = 1 END EXEC master.dbo.sp_add_log_shipping_primary_secondary @primary_database = N'Practice2017' ,@secondary_server = N'EPG-KIGIRI\I2019' ,@secondary_database = N'Practice2017' ,@overwrite = 1 -- ****** End: Script to be run on the primary: [EPG-KIGIRI\I2017] ****** -- Execute the following statements on the secondary to configure log shipping -- for database [EPG-KIGIRI\I2019].[Practice2017], -- the script to be run on the secondary in the context of the [msdb] database. ------------------------------------------------------------------------------------- -- Adding the log shipping configuration -- ****** Begin: Script to be run on the secondary: [EPG-KIGIRI\I2019] ****** DECLARE @LS_Secondary__CopyJobId AS uniqueidentifier DECLARE @LS_Secondary__RestoreJobId AS uniqueidentifier DECLARE @LS_Secondary__SecondaryId AS uniqueidentifier DECLARE @LS_Add_RetCode As int EXEC @LS_Add_RetCode = master.dbo.sp_add_log_shipping_secondary_primary @primary_server = N'EPG-KIGIRI\I2017' ,@primary_database = N'Practice2017' ,@backup_source_directory = N'\\Epg-kigiri\g$\Backup\LogShip\' ,@backup_destination_directory = N'G:\Backup\LogShipCopy\' ,@copy_job_name = N'LSCopy_EPG-KIGIRI\I2017_Practice2017' ,@restore_job_name = N'LSRestore_EPG-KIGIRI\I2017_Practice2017' ,@file_retention_period = 1440 ,@monitor_server = N'EPG-KIGIRI\I2017' ,@monitor_server_security_mode = 1 ,@overwrite = 1 ,@copy_job_id = @LS_Secondary__CopyJobId OUTPUT ,@restore_job_id = @LS_Secondary__RestoreJobId OUTPUT ,@secondary_id = @LS_Secondary__SecondaryId OUTPUT IF (@@ERROR = 0 AND @LS_Add_RetCode = 0) BEGIN DECLARE @LS_SecondaryCopyJobScheduleUID As uniqueidentifier DECLARE @LS_SecondaryCopyJobScheduleID AS int EXEC msdb.dbo.sp_add_schedule @schedule_name =N'DefaultCopyJobSchedule' ,@enabled = 1 ,@freq_type = 4 ,@freq_interval = 1 ,@freq_subday_type = 4 ,@freq_subday_interval = 15 ,@freq_recurrence_factor = 0 ,@active_start_date = 20190114 ,@active_end_date = 99991231 ,@active_start_time = 0 ,@active_end_time = 235900 ,@schedule_uid = @LS_SecondaryCopyJobScheduleUID OUTPUT ,@schedule_id = @LS_SecondaryCopyJobScheduleID OUTPUT EXEC msdb.dbo.sp_attach_schedule @job_id = @LS_Secondary__CopyJobId ,@schedule_id = @LS_SecondaryCopyJobScheduleID DECLARE @LS_SecondaryRestoreJobScheduleUID As uniqueidentifier DECLARE @LS_SecondaryRestoreJobScheduleID AS int EXEC msdb.dbo.sp_add_schedule @schedule_name =N'DefaultRestoreJobSchedule' ,@enabled = 1 ,@freq_type = 4 ,@freq_interval = 1 ,@freq_subday_type = 4 ,@freq_subday_interval = 15 ,@freq_recurrence_factor = 0 ,@active_start_date = 20190114 ,@active_end_date = 99991231 ,@active_start_time = 0 ,@active_end_time = 235900 ,@schedule_uid = @LS_SecondaryRestoreJobScheduleUID OUTPUT ,@schedule_id = @LS_SecondaryRestoreJobScheduleID OUTPUT EXEC msdb.dbo.sp_attach_schedule @job_id = @LS_Secondary__RestoreJobId ,@schedule_id = @LS_SecondaryRestoreJobScheduleID END DECLARE @LS_Add_RetCode2 As int IF (@@ERROR = 0 AND @LS_Add_RetCode = 0) BEGIN EXEC @LS_Add_RetCode2 = master.dbo.sp_add_log_shipping_secondary_database @secondary_database = N'Practice2017' ,@primary_server = N'EPG-KIGIRI\I2017' ,@primary_database = N'Practice2017' ,@restore_delay = 0 ,@restore_mode = 0 ,@disconnect_users = 0 ,@restore_threshold = 45 ,@threshold_alert_enabled = 1 ,@history_retention_period = 2880 ,@overwrite = 1 END IF (@@error = 0 AND @LS_Add_RetCode = 0) BEGIN EXEC msdb.dbo.sp_update_job @job_id = @LS_Secondary__CopyJobId ,@enabled = 1 EXEC msdb.dbo.sp_update_job @job_id = @LS_Secondary__RestoreJobId ,@enabled = 1 END -- ****** End: Script to be run on the secondary: [EPG-KIGIRI\I2019] ******
[/expand]
Úlohy zálohování, kopírování a obnovy jsou naplánovány na spuštění každých pět minut, a kdykoli k tomu dojde, databázový stroj také zapíše záznam do protokolu chyb. To může být považováno za nadbytečné, protože můžeme snadno sledovat zálohy protokolů pomocí historie úloh SQL Agent.
Obr. 2 Protokolujte položky zálohování expedice v protokolu chyb SQL
Povolení příznaku trasování 3226
Typicky můžeme povolit příznaky trasování buď pro aktuální připojení, nebo globálně. Můžeme použít T-SQL k povolení příznaků trasování nebo implementaci příznaku trasování do spouštěcích parametrů SQL Serveru. K povolení příznaků trasování, které chcete na instanci použít, se doporučuje použít přístup s parametry spuštění. Chcete-li použít příznak trasování 3226 v parametrech spuštění serveru SQL Server, postupujte takto:
- Spusťte SQL Server Configuration Manager jako Administrátor
Obr. 3 Spusťte SQL Server Configuration Manager jako správce
- Klikněte pravým tlačítkem na požadovanou instanci a klikněte na Vlastnosti .
Obr. 4 Otevřete Vlastnosti instance
- Vyberte Parametry spouštění
Obr. 5 Parametry spouštění
- V textovém poli označeném Zadejte parametr spuštění , zadejte –T3226 a klikněte na Přidat .
Obr. 6 Přidání příznaku trasování 3226 jako spouštěcího parametru
- Jednou –T3226 byl přidán do seznamu Stávajících parametrů , klikněte na OK .
-- Listing 2: Enable a Trace Flag -- Turn on a trace flag for the current connection DBCC TRACEON (3205); GO -- Turn on a trace flag globally DBCC TRACEON (3205, -1); GO
Protokol chyb serveru SQL Server ukazuje, že příznak trasování je povolen při spuštění. (Viz obr. 8)
Obr. 8 Parametry spouštění Uvedeno v protokolu chyb serveru SQL Server
Zobrazení výsledků
Jakmile se potvrdí, že příznak trasování funguje, zjistíme, že protokol chyb serveru SQL Server již nezapisuje zálohy protokolu spojené s odesláním protokolu (nebo jakoukoli jinou zálohu protokolu) do protokolu chyb. Věnujte pozornost obr. 9, který ukazuje, že všechny zálohy protokolů uložené v historii zálohovacích úloh se nezapisují do protokolu chyb. To odpovídá bodu, ve kterém jsme povolili příznak trasování 3226 (asi 20:15).
Obr. 9 V protokolu chyb serveru SQL Server nejsou zaznamenány žádné zálohy protokolů
Pokud také povolíme příznak trasování 3226 na sekundární instanci EPG-KIGIRI\I2019, zjistili jsme, že operace obnovení protokolu se již také nezapisují do protokolu chyb, protože jsme povolili příznak trasování 3226 na sekundární instanci přibližně ve 20:30. (Viz obr. 10)
Závěr
V tomto článku jsme demonstrovali, jak můžeme použít příznak trasování 3226 k potlačení protokolování záloh protokolu transakcí na primární instanci a protokol transakcí obnoví nastavení dopravy protokolu na sekundární instanci. To bude velmi užitečné, abyste se vyhnuli zbytečnému protokolování, které by mohlo „skrýt“ skutečné problémy vyskakující v protokolu chyb.
Odkazy
DBCC TraceOn Trace Flags