KB2861456 - PERBAIKI: Pelanggaran akses dalam Agen Distribusi Replikasi di Replikasi Transaksional SQL Server

Berlaku Untuk
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)

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:

      

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