sql >> データベース >  >> RDS >> Database

トレースフラグ3226を使用してログバックアップログを抑制します

    はじめに

    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を適用するには、次の手順に従います。

    1. SQLServer構成マネージャーを管理者として実行します

    図。 3SQLServer構成マネージャーを管理者として実行します

    1. 目的のインスタンスを右クリックし、[プロパティ]をクリックします 。

    図。 4インスタンスのプロパティを開く

    1. 起動パラメータを選択します

    図。 5つの起動パラメータ

    1. スタートアップパラメータを指定というラベルの付いたテキストボックスで 、「 –T3226」と入力します 追加をクリックします 。

    図。 6起動パラメータとしてトレースフラグ3226を追加する

    1. 一度–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トレースフラグ


    1. OracleデータベースでSELECTINTOステートメントを使用して一括収集句を使用する方法

    2. 1114(HY000):テーブルがいっぱいです

    3. SQLServer2000で行のセットを列として転置する

    4. Postgresでsqlalchemyを使用して部分的に一意のインデックスを作成する