現象
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 の最新の累積的な更新プログラムを確認してください。
- SQL Server 2014 の最新の累積的な更新プログラム
- SQL Server 2012 SP1 の最新の累積的な更新プログラム
- SQL Server 2012 の最新の累積的な更新プログラム
- SQL Server 2008 R2 SP2 の最新の累積的な更新プログラム
SQL Server 2008 R2 Service Pack 1 の修正プログラム更新プログラム パッケージ。この問題の修正プログラムは、SQL Server 2008 R2 Service Pack 1 の修正プログラム パッケージで最初にリリースされました。
状態
Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。
追加情報
修正プログラムを適用したら、次のスクリプトをディストリビューション エージェントジョブに追加します。DECLARE @JobID BINARY(16)
DECLARE @AgentID int
DECLARE @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'
Job.job_id、Agent.id でグループ化
HAVING COUNT(step_id) = 3
OPEN JobCur
FETCH NEXT FROM JobCur INTO @JobID, @AgentID
WHILE @@FETCH_STATUS = 0 BEGIN
IF (@JobID が 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(''エージェントは再試行がスケジュールされました。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;
End
CLOSE JobCur;
DEALLOCATE JobCur;
GO