Belirtiler
Microsoft SQL Server 2008 R2, SQL Server 2012 veya SQL Server 2014 Işlemsel çoğaltma ortamına sahip olduğunuz varsayılır. Ortamda SQL Server 'ın birden çok dağıtım örneği vardır. Bu durumda, bir erişim ihlali oluşabilir ve SQL Server Replication Distribution Agent kilitleniyor. Ayrıca, bir mini döküm dosyası oluşturulur.
Çözüm
Düzeltmeyi uyguladıktan sonra, bir döküm dosyasıyla birlikte kilitlenmek yerine, aracı düzgün bir şekilde kapanır. Aracı durdurulduğunda ve "yeniden başlatma için zamanlanmış" durumuna sahip olduğunda aracıyı otomatik olarak yeniden başlatmak için Dağıtım Aracısı işine başka bir iş adımı ekleyebilirsiniz. Dağıtım Aracısı işine ek iş adımı ekleme hakkında daha fazla bilgi için lütfen daha fazla bilgi bölümüne bakın. Sorun ilk olarak SQL Server 'ın aşağıdaki toplu güncelleştirmesinde giderilmiştir.
SQL Server 2014 için toplu güncelleştirme 1 /en-us/help/2931693
SQL Server 2012 SP1 için toplu güncelleştirme 9 /en-us/help/2931078
SQL Server 2012 için toplu güncelleştirme 11 /en-us/help/2908007
SQL Server 2008 R2 SP2 için toplu güncelleştirme 9 /en-us/help/2887606
Her bir SQL Server toplu güncelleştirmesi, önceki toplu güncelleştirmeyle birlikte gelen tüm düzeltmeleri ve tüm güvenlik düzeltmelerini içerir. En son SQL Server güncelleştirmelerini gözden geçirin:
SQL Server 2008 R2 Service Pack 1 düzeltme güncelleştirme paketiBu sorunla ilgili düzeltme ilk olarak SQL Server 2008 R2 Service Pack 1 için düzeltme güncelleştirme paketindeyayımlanmıştır.
Durum
Microsoft bu sorunun "Aşağıdakilere Uygulanır" bölümünde listelenen Microsoft ürünlerinde bulunduğunu onaylamıştır.
Ek Bilgi
Düzeltmeyi uyguladıktan sonra, dağıtım Aracısı işine aşağıdaki komut dosyasını ekleyin: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