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:
- Execute o SQL Server Configuration Manager como Administrador
Fig. 3 Execute o SQL Server Configuration Manager como administrador
- Clique com o botão direito do mouse na instância desejada e clique em Propriedades .
Fig. 4 Abra as propriedades da instância
- Selecione os Parâmetros de inicialização
Fig. 5 Parâmetros de inicialização
- 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
- 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