Inleiding
Elke back-upbewerking in SQL Server wordt naar het foutenlogboek van SQL Server geschreven. Dit omvat ook back-ups van transactielogboeken, zelfs wanneer ze plaatsvinden als onderdeel van een verzendconfiguratie van transactielogboeken. Soms kan het loggen van de volledige logboekback-up hinderlijk zijn in het SQL Server-foutlogboek en moet het worden beheerd. Trace Flag 3226 wordt gebruikt om dergelijke logging te onderdrukken en we zullen in dit artikel laten zien hoe dit kan worden gedaan.
Verzending van transactielogboek configureren
Om de waarde van deze traceringsvlag te demonstreren, zullen we een kleine verzendconfiguratie voor logbestanden implementeren met behulp van een SQL Server 2017-database met de naam Practice2017 . Onze primaire instantie is EPG-KIGIRI\I2017 en we repliceren deze database naar een SQL Server 2019-instantie EPG-KIGIRI\I2019 (Zie Afb. 2). Het volledige configuratiescript wordt getoond in Listing 1.
Afb. 1 Log verzendconfiguratie op primair
[titel uitbreiden =”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] ******
[/uitbreiden]
Back-up-, kopieer- en hersteltaken worden elke vijf minuten uitgevoerd en wanneer dit gebeurt, schrijft de database-engine ook een vermelding in het foutenlogboek. Dit kan als overbodig worden beschouwd, omdat we de logback-ups gemakkelijk kunnen volgen met behulp van de taakgeschiedenis van SQL Agent.
Afb. 2 Log back-upgegevens voor verzending in SQL-foutlogboek
Traceervlag 3226 inschakelen
Meestal kunnen we traceringsvlaggen inschakelen voor de huidige verbinding of wereldwijd. We kunnen T-SQL gebruiken om traceervlaggen in te schakelen of de traceringsvlag te implementeren in de opstartparameters van SQL Server. Het wordt aanbevolen dat u de benadering met opstartparameters gebruikt om traceervlaggen in te schakelen die u op het exemplaar wilt toepassen. Volg deze stappen om de traceringsvlag 3226 toe te passen in de opstartparameters van SQL Server:
- Voer SQL Server Configuration Manager uit als Beheerder
Afb. 3 Voer SQL Server Configuration Manager uit als beheerder
- Klik met de rechtermuisknop op de gewenste instantie en klik op Eigenschappen .
Afb. 4 Open instantie-eigenschappen
- Selecteer de Opstartparameters
Afb. 5 opstartparameters
- In het tekstvak met het label Geef een opstartparameter op , typ –T3226 en klik op Toevoegen .
Afb. 6 Traceringsvlag 3226 toevoegen als opstartparameter
- Eenmaal –T3226 is toegevoegd aan de lijst met Bestaande parameters , klik op 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
Het foutenlogboek van SQL Server geeft aan dat de traceringsvlag is ingeschakeld bij het opstarten. (Zie Afb. 8)
Afb. 8 opstartparameters aangegeven in het foutenlogboek van SQL Server
De resultaten bekijken
Zodra is bevestigd dat de traceringsvlag werkt, ontdekken we dat het foutenlogboek van SQL Server geen logboekback-ups meer schrijft die zijn gekoppeld aan logboekverzending (of een andere logboekback-up) naar het foutenlogboek. Let goed op Afb. 9 die laat zien dat alle logboekback-ups die zijn opgeslagen in de back-uptaakgeschiedenis niet naar het foutenlogboek worden geschreven. Dit komt overeen met het punt waarop we traceervlag 3226 hebben ingeschakeld (ongeveer 20:15 uur).
Afb. 9 Geen logboekback-ups opgenomen in SQL Server-foutlogboek
Als we traceringsvlag 3226 ook inschakelen op de secundaire instantie EPG-KIGIRI\I2019, we vinden dat de logboekherstelbewerkingen ook niet langer naar het foutenlogboek worden geschreven, omdat we traceringsvlag 3226 hebben ingeschakeld op het secundaire exemplaar om ongeveer 20:30 uur. (Zie Afb. 10)
Conclusie
In dit artikel hebben we laten zien hoe we traceringsvlag 3226 kunnen gebruiken om logboekregistratie van back-ups van transactielogboeken op het primaire exemplaar te onderdrukken, en het transactielogboek herstelt de verzendinstellingen van het logboek op het secundaire exemplaar. Dit is erg handig om onnodige logboekregistratie te voorkomen die echte problemen die in het foutenlogboek verschijnen, zou kunnen "verbergen".
Referenties
DBCC TraceOn-traceervlaggen