はじめに
SQL Serverのすべてのバックアップ操作は、SQLServerエラーログに書き込まれます。これには、トランザクションログ配布構成の一部として発生する場合でも、トランザクションログバックアップが含まれます。ログバックアップ全体をログに記録することは、SQL Serverエラーログに迷惑をかける可能性があり、管理する必要がある場合があります。トレースフラグ3226は、このようなロギングを抑制するために使用されます。この記事では、これをどのように実行できるかを示します。
トランザクションログ配布の構成
このトレースフラグの値を示すために、 Practice2017と呼ばれるSQLServer2017データベースを使用して小さなログ配布構成を実装します。 。プライマリインスタンスはEPG-KIGIRI\ I2017 このデータベースをSQLServer2019インスタンスに複製していますEPG-KIGIRI\ I2019 (図2を参照)。構成スクリプト全体をリスト1に示します。
図。 1プライマリのログ配布構成
[expand title =”コード 「]
-- 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] ******
[/エキスパンド]
バックアップ、コピー、および復元ジョブは5分ごとに実行されるようにスケジュールされており、これが発生すると、データベースエンジンもエラーログにエントリを書き込みます。 SQL Agentのジョブ履歴を使用してログのバックアップを簡単に追跡できるため、これは不要と見なされる場合があります。
図。 2SQLエラーログに出荷バックアップエントリを記録する
トレースフラグ3226の有効化
通常、現在の接続またはグローバルのいずれかでトレースフラグを有効にできます。 T-SQLを使用して、トレースフラグを有効にしたり、SQLServerの起動パラメーターにトレースフラグを実装したりできます。インスタンスに適用するトレースフラグを有効にするには、起動パラメータアプローチを使用することをお勧めします。 SQL Serverの起動パラメーターにトレースフラグ3226を適用するには、次の手順に従います。
- SQLServer構成マネージャーを管理者として実行します
図。 3SQLServer構成マネージャーを管理者として実行します
- 目的のインスタンスを右クリックし、[プロパティ]をクリックします 。
図。 4インスタンスのプロパティを開く
- 起動パラメータを選択します
図。 5つの起動パラメータ
- スタートアップパラメータを指定というラベルの付いたテキストボックスで 、「 –T3226」と入力します 追加をクリックします 。
図。 6起動パラメータとしてトレースフラグ3226を追加する
- 一度–T3226 既存のパラメータのリストに追加されました 、[ 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のエラーログには、起動時にトレースフラグが有効になっていることが示されています。 (図8を参照)
図。 SQLServerエラーログに示される8つの起動パラメータ
結果の表示
トレースフラグが機能していることが確認されると、SQL Serverエラーログがログ配布に関連するログバックアップ(またはその他のログバックアップ)をエラーログに書き込まないことがわかります。バックアップジョブ履歴に保存されているすべてのログバックアップがエラーログに書き込まれないことを示す図9に細心の注意を払ってください。これは、トレースフラグ3226を有効にしたポイント(午後8時15分頃)と一致します。
図。 9SQLServerエラーログにログバックアップが記録されていません
セカンダリインスタンスでトレースフラグ3226も有効にすると、 EPG-KIGIRI \ I2019、 午後8時30分頃にセカンダリインスタンスでトレースフラグ3226を有効にしたため、ログの復元操作もエラーログに書き込まれなくなったことがわかります。 (図10を参照)
結論
この記事では、トレースフラグ3226を使用して、プライマリインスタンスでのトランザクションログバックアップのログ記録を抑制し、トランザクションログがセカンダリインスタンスでログ配布設定を復元する方法を示しました。これは、エラーログにポップアップする実際の問題を「隠す」可能性のある不要なログを回避するのに非常に役立ちます。
参照
DBCCTraceOnトレースフラグ