KB2861456 - DÜZELTME: SQL Server işlemsel çoğaltmada çoğaltma dağıtım aracısında erişim ihlali

Uygulandığı Öğe
SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

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 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