Database
 sql >> Base de données >  >> RDS >> Database

Utilisation de l'indicateur de trace 3226 pour supprimer la journalisation de sauvegarde du journal

Présentation

Chaque opération de sauvegarde dans SQL Server est écrite dans le journal des erreurs SQL Server. Cela inclut les sauvegardes du journal des transactions, même lorsqu'elles se produisent dans le cadre d'une configuration d'envoi du journal des transactions. Parfois, la journalisation de l'intégralité de la sauvegarde du journal peut être une nuisance dans le journal des erreurs SQL Server et doit être gérée. Trace Flag 3226 est utilisé pour supprimer une telle journalisation et nous montrerons comment cela peut être fait dans cet article.

Configuration de l'envoi des journaux de transactions

Afin de démontrer la valeur de cet indicateur de trace, nous allons implémenter une petite configuration d'envoi de journaux à l'aide d'une base de données SQL Server 2017 appelée Practice2017 . Notre instance principale est EPG-KIGIRI\I2017 et nous répliquons cette base de données sur une instance SQL Server 2019 EPG-KIGIRI\I2019 (Voir figure 2). Le script de configuration complet est présenté dans le Listing 1.

Fig. 1 Configuration de l'envoi de journaux sur le primaire

[expand title =»Code “]

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

Les tâches de sauvegarde, de copie et de restauration sont planifiées pour s'exécuter toutes les cinq minutes, et chaque fois que cela se produit, le moteur de base de données écrit également une entrée dans le journal des erreurs. Cela peut être considéré comme superflu, car nous pouvons facilement suivre les sauvegardes des journaux à l'aide de l'historique des tâches de l'Agent SQL.

Fig. 2 entrées de sauvegarde d'envoi de journaux dans le journal des erreurs SQL

Activation de l'indicateur de trace 3226

En règle générale, nous pouvons activer les indicateurs de trace pour la connexion actuelle ou globalement. Nous pouvons utiliser T-SQL pour activer les indicateurs de trace ou implémenter l'indicateur de trace dans les paramètres de démarrage de SQL Server. Il est recommandé d'utiliser l'approche des paramètres de démarrage pour activer les indicateurs de trace que vous souhaitez appliquer à l'instance. Pour appliquer l'indicateur de trace 3226 dans les paramètres de démarrage de SQL Server, procédez comme suit :

  1. Exécuter le gestionnaire de configuration SQL Server en tant qu'administrateur

Fig. 3 Exécutez le gestionnaire de configuration SQL Server en tant qu'administrateur

  1. Faites un clic droit sur l'instance souhaitée et cliquez sur Propriétés .

Fig. 4 Ouvrir les propriétés de l'instance

  1. Sélectionnez les Paramètres de démarrage

Fig. 5 paramètres de démarrage

  1. Dans la zone de texte intitulée Spécifier un paramètre de démarrage , saisissez –T3226 et cliquez sur Ajouter .

Fig. 6 Ajout de l'indicateur de trace 3226 en tant que paramètre de démarrage

  1. Une fois –T3226 a été ajouté à la liste des paramètres existants , cliquez sur 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

Le journal des erreurs SQL Server indique que l'indicateur de trace est activé au démarrage. (Voir fig. 8)

Fig. 8 Paramètres de démarrage indiqués dans le journal des erreurs SQL Server

Affichage des résultats

Une fois qu'il est confirmé que l'indicateur de trace fonctionne, nous découvrons que le journal des erreurs SQL Server n'écrit plus les sauvegardes de journal associées à l'envoi de journaux (ou à toute autre sauvegarde de journal) dans le journal des erreurs. Portez une attention particulière à la Fig. 9 montrant que toutes les sauvegardes de journaux stockées dans l'historique des tâches de sauvegarde ne sont pas écrites dans le journal des erreurs. Cela correspond au point auquel nous avons activé l'indicateur de trace 3226 (environ 20h15).

Fig. 9 Aucune sauvegarde de journal enregistrée dans le journal des erreurs SQL Server

Si nous activons également l'indicateur de trace 3226 sur l'instance secondaire EPG-KIGIRI\I2019, nous constatons que les opérations de restauration du journal ne sont plus écrites dans le journal des erreurs puisque nous avons activé l'indicateur de trace 3226 sur l'instance secondaire vers 20h30. (Voir fig. 10)

Conclusion

Dans cet article, nous avons montré comment nous pouvons utiliser l'indicateur de trace 3226 pour supprimer la journalisation des sauvegardes du journal des transactions sur l'instance principale, et le journal des transactions restaure les paramètres d'envoi de journaux sur l'instance secondaire. Cela sera très utile pour éviter une journalisation inutile qui pourrait "masquer" les vrais problèmes apparaissant dans le journal des erreurs.

Références

Drapeaux de suivi DBCC TraceOn