現象
Microsoft SQL Server 2008 R2、SQL Server 2012、または SQL Server 2014 トランザクションレプリケーション環境を使用していることを前提とします。 環境には、SQL Server の複数の配布インスタンスがあります。 この状況では、アクセス違反が発生し、SQL Server レプリケーションディストリビューションエージェントがクラッシュすることがあります。 さらに、ミニダンプファイルが生成されます。
解決方法
修正プログラムを適用すると、ダンプファイルと共にクラッシュするのではなく、エージェントが正常に終了します。 エージェントが停止し、[再起動のスケジュール] 状態がある場合にエージェントを自動的に再起動するために、ディストリビューションエージェントジョブに追加のジョブステップを追加できます。 ディストリビューションエージェントジョブに追加のジョブステップを追加する方法の詳細については、「詳細情報」セクションを参照してください。この問題は、SQL Server の次の累積的な更新プログラムで最初に修正されました。
SQL Server 2014 の累積更新プログラム1 /en-us/help/2931693
SQL Server 2012 SP1 の累積更新プログラム9 /en-us/help/2931078
SQL Server 2012 の累積更新プログラム11 /en-us/help/2908007
SQL Server 2008 R2 SP2 の累積更新プログラム9 /en-us/help/2887606
SQL Server 用の新しい累積更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正が含まれています。 SQL Server の最新の累積的な更新プログラムを確認します。
SQL Server 2008 R2 Service Pack 1 の修正プログラムパッケージこの問題の修正プログラムは、 SQL Server 2008 R2 Service Pack 1 の修正プログラムパッケージで最初にリリースされました。
状態
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。
詳細情報
修正プログラムを適用した後、次のスクリプトをディストリビューションエージェントジョブに追加します。DECLARE @JobID BINARY(16)DECLARE @AgentID intDECLARE @command varchar(max)DECLARE JobCur CURSOR FOR SELECT Job.job_id, Agent.id FROM msdb.dbo.sysjobs AS Job INNER JOIN msdb.dbo.syscategories AS Cat ON Job.category_id = Cat.category_id INNER JOIN msdb.dbo.sysjobsteps AS Steps ON Job.job_id = Steps.job_id INNER JOIN distribution.dbo.MSdistribution_agents AS Agent ON Job.job_id = Agent.job_id WHERE Job.name like '%Put Text Mask To Identify Your Publisher DB Jobs Here%' AND Cat.name = 'REPL-Distribution' GROUP BY Job.job_id, Agent.id HAVING COUNT(step_id) = 3OPEN JobCurFETCH NEXT FROM JobCur INTO @JobID, @AgentIDWHILE @@FETCH_STATUS = 0 BEGIN IF (@JobID is not NULL) BEGIN set @command = N'if (select top 1 runstatus from MSdistribution_history where agent_id = ' + convert(varchar, @AgentID)+ N' order by timestamp desc) = 5 raiserror(''Agent was scheduled for retry. Performing restart now'',16,1)' EXEC msdb.dbo.sp_add_jobstep @job_id=@JobID, @database_name=N'distribution', @step_name=N'Check for retry', @step_id=4, @on_fail_action=4, @on_fail_step_id=1, @command=@command EXEC msdb.dbo.sp_update_jobstep @job_id=@JobID, @step_id=2, @on_success_action=4, @on_success_step_id=4 END FETCH NEXT FROM JobCur INTO @JobID, @AgentID;ENDCLOSE JobCur;DEALLOCATE JobCur;GO