Database
 sql >> Base de Dados >  >> RDS >> Database

Usando o sinalizador de rastreamento 3226 para suprimir o log de backup de log

Introdução


Cada operação de backup no SQL Server é gravada no log de erros do SQL Server. Isso inclui backups de logs de transações mesmo quando ocorrem como parte de uma configuração de envio de logs de transações. Às vezes, registrar todo o backup de log pode ser um incômodo no log de erros do SQL Server e precisa ser gerenciado. O sinalizador de rastreamento 3226 é usado para suprimir esse log e demonstraremos como isso pode ser feito neste artigo.


Configurando o envio do log de transações


Para demonstrar o valor desse sinalizador de rastreamento, implementaremos uma pequena configuração de envio de logs usando um banco de dados SQL Server 2017 chamado Practice2017 . Nossa instância principal é EPG-KIGIRI\I2017 e estamos replicando esse banco de dados para uma instância do SQL Server 2019 EPG-KIGIRI\I2019 (Ver Fig. 2). Todo o script de configuração é mostrado na Listagem 1.



Fig. 1 Configuração de envio de logs no primário

[expandir título ="Código “]
-- 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] ******

[/expandir]

As tarefas de backup, cópia e restauração são programadas para serem executadas a cada cinco minutos e, sempre que isso acontece, o mecanismo de banco de dados também grava uma entrada no log de erros. Isso pode ser considerado supérfluo, pois podemos rastrear facilmente os backups de log usando o histórico de tarefas do SQL Agent.



Fig. 2 entradas de backup de envio de log no log de erros do SQL

Ativando o sinalizador de rastreamento 3226


Normalmente, podemos habilitar sinalizadores de rastreamento para a conexão atual ou globalmente. Podemos usar o T-SQL para habilitar sinalizadores de rastreamento ou implementar o sinalizador de rastreamento nos parâmetros de inicialização do SQL Server. É recomendável que você use a abordagem de parâmetros de inicialização para ativar os sinalizadores de rastreamento que deseja aplicar à instância. Para aplicar o sinalizador de rastreamento 3226 nos parâmetros de inicialização do SQL Server, siga estas etapas:
  1. Execute o SQL Server Configuration Manager como Administrador



Fig. 3 Execute o SQL Server Configuration Manager como administrador
  1. Clique com o botão direito do mouse na instância desejada e clique em Propriedades .



Fig. 4 Abra as propriedades da instância
  1. Selecione os Parâmetros de inicialização



Fig. 5 Parâmetros de inicialização
  1. Na caixa de texto chamada Especificar um parâmetro de inicialização , digite –T3226 e clique em Adicionar .



Fig. 6 Adicionando o sinalizador de rastreamento 3226 como um parâmetro de inicialização
  1. Uma vez –T3226 foi adicionado à lista de Parâmetros existentes , clique em 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

O log de erros do SQL Server mostra que o sinalizador de rastreamento está habilitado na inicialização. (Ver Fig. 8)



Fig. 8 Parâmetros de inicialização indicados no log de erros do SQL Server

Visualizando os resultados


Assim que for confirmado que o sinalizador de rastreamento está funcionando, descobrimos que o log de erros do SQL Server não grava mais backups de log associados ao envio de logs (ou qualquer outro backup de log) no log de erros. Preste muita atenção à Fig. 9 mostrando que todos os backups de log armazenados no histórico de tarefas de backup não são gravados no log de erros. Isso se alinha com o ponto em que ativamos o sinalizador de rastreamento 3226 (cerca de 20h15).



Fig. 9 Nenhum backup de log registrado no log de erros do SQL Server

Se também habilitarmos o sinalizador de rastreamento 3226 na instância secundária EPG-KIGIRI\I2019, descobrimos que as operações de restauração de log também não são mais gravadas no log de erros, pois ativamos o sinalizador de rastreamento 3226 na instância secundária por volta das 20h30. (Ver Fig. 10)


Conclusão


Neste artigo, demonstramos como podemos usar o sinalizador de rastreamento 3226 para suprimir o log de backups de log de transações na instância primária, e o log de transações restaura as configurações de envio de log na instância secundária. Isso será muito útil para evitar registros desnecessários que podem “esconder” problemas reais que aparecem no registro de erros.

Referências


Sinalizadores de rastreamento DBCC TraceOn