Gejala
Asumsikan Anda memiliki lingkungan Replikasi Transaksional Microsoft SQL Server 2008 R2, SQL Server 2012, atau SQL Server 2014. Ada beberapa instans distribusi SQL Server di lingkungan. Dalam situasi ini, pelanggaran akses mungkin terjadi, dan agen distribusi replikasi SQL Server mengalami crash. Selain itu, file dump mini dihasilkan.
Resolusi
Setelah Anda menerapkan hotfix, agen akan dimatikan dengan anggun alih-alih crash bersama dengan file dump. Anda dapat menambahkan langkah pekerjaan tambahan dalam pekerjaan Agen Distribusi untuk memulai ulang agen secara otomatis ketika agen berhenti dan memiliki status "dijadwalkan untuk dihidupkan ulang".
Untuk informasi selengkapnya tentang cara menambahkan langkah pekerjaan tambahan dalam pekerjaan Agen Distribusi, lihat bagian Informasi Selengkapnya.
Masalah pertama kali diperbaiki dalam pembaruan kumulatif SQL Server berikut.
Pembaruan Kumulatif 1 untuk SQL Server 2014 /en-us/help/2931693
Pembaruan Kumulatif 9 untuk SQL Server 2012 SP1 /en-us/help/2931078
Pembaruan Kumulatif 11 untuk SQL Server 2012 /en-us/help/2908007
Pembaruan Kumulatif 9 untuk SQL Server 2008 R2 SP2 /en-us/help/2887606
Tentang pembaruan kumulatif untuk SQL Server
Setiap pembaruan kumulatif baru untuk SQL Server berisi semua hotfix dan semua perbaikan keamanan yang disertakan dengan pembaruan kumulatif sebelumnya. Lihat pembaruan kumulatif terbaru untuk SQL Server:
- Pembaruan kumulatif terbaru untuk SQL Server 2014
- Pembaruan kumulatif terbaru untuk SQL Server 2012 SP1
- Pembaruan kumulatif terbaru untuk SQL Server 2012
- Pembaruan kumulatif terbaru untuk SQL Server 2008 R2 SP2
Paket pembaruan Hotfix untuk SQL Server 2008 R2 Paket Layanan 1Perbaikan untuk masalah ini pertama kali dirilis dalam paket pembaruan hotfix untuk SQL Server 2008 R2 Paket Layanan 1 .
Status
Microsoft telah mengonfirmasi bahwa ini adalah masalah dalam produk Microsoft sebagaimana tercantum di bagian "Berlaku untuk".
Informasi Selengkapnya
Setelah menerapkan hotfix, tambahkan skrip berikut ke pekerjaan Agen Distribusi:DECLARE @JobID BINARY(16)
DEKLARASIKAN @AgentID int
NYATAKAN @command varchar(maks)
DEKLARASIKAN KURSOR JOBCur UNTUK Job.job_id PILIHAN, Agent.id DARI msdb.dbo.sysjobs SEBAGAI Pekerjaan
BERGABUNG DALAM msdb.dbo.syscategories SEBAGAI CAT AKTIF Job.category_id = Cat.category_id
GABUNGAN DALAM msdb.dbo.sysjobsteps SEBAGAI Langkah PADA Job.job_id = Steps.job_id
BERGABUNG DALAM distribution.dbo.MSdistribution_agents SEBAGAI AGEN DI Job.job_id = Agent.job_id
WHERE Job.name seperti '%Put Text Mask Untuk Mengidentifikasi Pekerjaan DB Publisher Anda Di Sini%' DAN Cat.name = 'REPL-Distribution'
KELOMPOKKAN BERDASARKAN Job.job_id, Agent.id
MEMILIKI COUNT(step_id) = 3
BUKA JobCur
AMBIL SELANJUTNYA DARI JobCur KE @JobID, @AgentID
SEMENTARA @@FETCH_STATUS = 0 MULAI
IF (@JobID bukan NULL) MULAI
set @command = N'if (pilih 1 runstatus teratas dari MSdistribution_history di mana agent_id = ' + convert(varchar, @AgentID)+ N' urutkan berdasarkan stempel waktu desc) = 5
raiserror(''Agen dijadwalkan untuk percobaan ulang. Melakukan mulai ulang sekarang'',16,1)'
EXEC msdb.dbo.sp_add_jobstep @job\_id=@JobID, @database\_name=N'distribution', @step\_name=N'Periksa percobaan ulang', @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
AMBIL SELANJUTNYA DARI JobCur INTO @JobID, @AgentID;
END
TUTUP JobCur;
MEMBATALKAN JobCur;
GO