sql >> Databasteknik >  >> RDS >> Database

Använda Trace Flag 3226 för att undertrycka loggning av säkerhetskopiering

Introduktion

Varje säkerhetskopiering i SQL Server skrivs till SQL Server-felloggen. Detta inkluderar säkerhetskopior av transaktionsloggar även när de sker som en del av en fraktkonfiguration för transaktionsloggar. Ibland kan det vara besvärligt att logga hela loggbackupen i SQL Server Error Log och måste hanteras. Trace Flag 3226 används för att undertrycka sådan loggning och vi kommer att visa hur detta kan göras i den här artikeln.

Konfigurera transaktionsloggfrakt

För att visa värdet av denna spårningsflagga kommer vi att implementera en liten loggförsändningskonfiguration med en SQL Server 2017-databas som heter Practice2017 . Vår primära instans är EPG-KIGIRI\I2017 och vi replikerar denna databas till en SQL Server 2019-instans EPG-KIGIRI\I2019 (Se fig. 2). Hela konfigurationsskriptet visas i Lista 1.

Fig. 1 Logga fraktkonfiguration på primär

[expand title =”Kod "]

-- 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]

Säkerhetskopierings-, kopierings- och återställningsjobb är schemalagda att köras var femte minut, och närhelst detta händer skriver databasmotorn också en post i felloggen. Detta kan anses vara överflödigt, eftersom vi enkelt kan spåra loggsäkerhetskopiorna med hjälp av SQL Agent-jobbhistoriken.

Fig. 2 Logga leveranssäkerhetskopiering i SQL-fellogg

Aktivera spårningsflagga 3226

Vanligtvis kan vi aktivera spårningsflaggor antingen för den aktuella anslutningen eller globalt. Vi kan använda T-SQL för att aktivera spårningsflaggor eller implementera spårningsflaggan i SQL Servers startparametrar. Det rekommenderas att du använder tillvägagångssättet för startparametrar för att aktivera spårningsflaggor som du vill tillämpa på instansen. För att tillämpa spårningsflaggan 3226 i SQL Servers startparametrar, följ dessa steg:

  1. Kör SQL Server Configuration Manager som Administratör

Fig. 3 Kör SQL Server Configuration Manager som administratör

  1. Högerklicka på önskad instans och klicka på Egenskaper .

Fig. 4 Öppna instansegenskaper

  1. Välj Startparametrar

Fig. 5 startparametrar

  1. I textrutan märkt Ange en startparameter , skriv –T3226 och klicka på Lägg till .

Fig. 6 Lägga till spårningsflagga 3226 som en startparameter

  1. En gång –T3226 har lagts till i listan över Befintliga parametrar klickar du på 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

SQL Server-felloggen visar att spårningsflaggan är aktiverad vid uppstart. (Se fig. 8)

Fig. 8 Startparametrar som anges i SQL Server-felloggen

Visa resultaten

När det har bekräftats att spårningsflaggan fungerar, upptäcker vi att SQL Server-felloggen inte längre skriver loggbackuper associerade med loggsändning (eller någon annan loggbackup) till felloggen. Var mycket uppmärksam på Fig. 9 som visar att alla loggsäkerhetskopior som lagras i backupjobbhistoriken inte skrivs till felloggen. Detta stämmer överens med punkten där vi aktiverade spårningsflagga 3226 (cirka 20:15).

Fig. 9 Inga loggsäkerhetskopier registrerade i SQL Server Error Log

Om vi ​​även aktiverar spårningsflagga 3226 på den sekundära instansen EPG-KIGIRI\I2019, vi finner att loggåterställningsoperationerna inte längre skrivs till felloggen eftersom vi aktiverade spårningsflagga 3226 på den sekundära instansen vid cirka 20:30. (Se fig. 10)

Slutsats

I den här artikeln har vi visat hur vi kan använda spårningsflagga 3226 för att undertrycka loggning av säkerhetskopior av transaktionsloggar på den primära instansen, och transaktionsloggen återställer inställningarna för loggsändning på den sekundära instansen. Detta kommer att vara mycket användbart för att undvika onödig loggning som kan "gömma" verkliga problem som dyker upp i felloggen.

Referenser

DBCC TraceOn Trace Flags


  1. ändra storleken på datatypen i sql

  2. Lär dig hur man skapar formulär i minnet (Ja, du hörde rätt)

  3. Hur man returnerar en sträng i omvänd ordning med SQL Server – REVERSE()

  4. Introducerar ny funktion - Spotlight Cloud Reports