Belirtiler
Microsoft SQL ServerSQL Server 2008 R2, SQL ServerSQL Server 2012 veya SQL ServerSQL Server 2014 Transactional Replication ortamına sahip olduğunuzu varsayalım. Ortamda birden çok dağıtım SQL Server örneği vardır. Bu durumda, bir erişim ihlali meydana gelebilir ve SQL Server çoğaltma dağıtım aracısı kilitlenir. Ayrıca, bir mini döküm dosyası oluşturulur.
Çözüm
Düzeltmeyi uyguladıktan sonra, aracı bir döküm dosyasıyla birlikte kilitlenmek yerine düzgün bir şekilde kapanır. Aracı durdurulduğunda ve "yeniden başlatma için zamanlandı" durumuna geldiğinde aracıyı otomatik olarak yeniden başlatmak için Dağıtım Aracısı işine ek bir iş adımı ekleyebilirsiniz.
Dağıtım Aracısı işine ek bir iş adımının nasıl ekleneceği hakkında daha fazla bilgi için lütfen Daha Fazla Bilgi bölümüne bakın.
Sorun ilk olarak aşağıdaki toplu SQL Server güncelleştirmesinde düzeltilmiş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
SQL Server toplu güncelleştirmeleri hakkında
SQL Server için her yeni toplu güncelleştirme, önceki toplu güncelleştirmeye dahil edilen tüm düzeltmeleri ve tüm güvenlik düzeltmelerini içerir. SQL Server için en son toplu güncelleştirmelere göz atın:
- SQL Server 2014 için en son toplu güncelleştirme
- SQL Server 2012 SP1 için en son toplu güncelleştirme
- SQL Server 2012 için en son toplu güncelleştirme
- SQL Server 2008 R2 SP2 için en son toplu güncelleştirme
SQL Server 2008 R2 Service Pack 1 için düzeltme paketi Bu soruna ilişkin düzeltme ilk olarak SQL Server 2008 R2 Service Pack 1 düzeltme güncelleştirme paketinde yayınlanmıştır.
Durum
Microsoft bunun, "Şunlar için geçerlidir" bölümünde listelenen Microsoft ürünlerinde sorun olduğunu doğrulamıştır.
Daha Fazla Bilgi
Düzeltmeyi uyguladıktan sonra, Dağıtım Aracısı işine aşağıdaki betiği ekleyin:DECLARE @JobID BINARY(16)
DECLARE @AgentID int
DECLARE @command varchar(max)
SELECT Job.job_id İÇİN JOBCUR İMLECİNİ BEYAN EDİN Agent.id 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'
GRUPLANDIRMA ÖLÇÜTÜ Job.job_id, Agent.id
SAYI(step_id) = 3
OPEN JobCur
SONRAKİNİ JobCur INTO GETİRİN @JobID, @AgentID
@@FETCH_STATUS = 0 IKEN BEGIN
IF (@JobID is not NULL) BEGIN
set @command = N'if (MSdistribution_history agent_id = ' + convert(varchar, @AgentID)+ N' order by timestamp desc) = 5
raiserror(''Aracı yeniden deneme için zamanlandı. Şimdi yeniden başlatma gerçekleştiriliyor'',16,1)'
EXEC msdb.dbo.sp_add_jobstep @job\_id=@JobID, @database\_name=N'dağıtım', @step\_name=N'Yeniden denemeyi denetle', @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
SONRAKİ GETİRİ JobCur İÇİNE @JobID, @AgentID;
END
KAPAT JobCur;
DEALLOCATE JobCur;
GO