อาการ
สมมติว่าคุณมีสภาพแวดล้อมการจําลองแบบธุรกรรมของ Microsoft SQL Server 2008 R2, SQL Server 2012 หรือ SQL Server 2014 มีอินสแตนซ์การแจกจ่ายหลายอินสแตนซ์ของ SQL Server ในสภาพแวดล้อม ในสถานการณ์นี้ อาจเกิดการละเมิดการเข้าถึง และเอเจนต์การกระจายการจําลองแบบ SQL Server หยุดทํางาน นอกจากนี้ ไฟล์การถ่ายโอนข้อมูลขนาดเล็กจะถูกสร้างขึ้น
การแก้ปัญหา
หลังจากที่คุณใช้โปรแกรมแก้ไขด่วนแล้ว เอเจนต์จะปิดการทํางานอย่างเหมาะสมแทนที่จะหยุดทํางานพร้อมกับไฟล์บันทึกข้อมูล คุณสามารถเพิ่มขั้นตอนงานเพิ่มเติมในงานตัวแทนการกระจายเพื่อรีสตาร์ตเอเจนต์โดยอัตโนมัติเมื่อเอเจนต์หยุดทํางานและมีสถานะ "จัดกําหนดการสําหรับการรีสตาร์ต"
สําหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการเพิ่มขั้นตอนงานเพิ่มเติมในงานตัวแทนการกระจาย โปรดดูส่วนข้อมูลเพิ่มเติม
ปัญหานี้ได้รับการแก้ไขครั้งแรกในการอัปเดตแบบสะสมของ SQL Server ต่อไปนี้
การอัปเดตสะสม 1 สําหรับ SQL Server 2014 /en-us/help/2931693
การอัปเดตสะสม 9 สําหรับ SQL Server 2012 SP1 /en-us/help/2931078
การอัปเดตสะสม 11 สําหรับ SQL Server 2012 /en-us/help/2908007
การอัปเดตสะสม 9 สําหรับ SQL Server 2008 R2 SP2 /en-us/help/2887606
เกี่ยวกับการอัปเดตสะสมสําหรับ SQL Server
การอัปเดตแบบสะสมใหม่แต่ละรายการสําหรับ SQL Server จะมีโปรแกรมแก้ไขด่วนและการแก้ไขข้อบกพร่องด้านความปลอดภัยทั้งหมดที่รวมอยู่ในการอัปเดตแบบสะสมครั้งก่อนหน้า ตรวจดูการอัปเดตแบบสะสมล่าสุดสําหรับ SQL Server:
- การอัปเดตสะสมล่าสุดสําหรับ SQL Server 2014
- การอัปเดตสะสมล่าสุดสําหรับ SQL Server 2012 SP1
- การอัปเดตสะสมล่าสุดสําหรับ SQL Server 2012
- การอัปเดตสะสมล่าสุดสําหรับ SQL Server 2008 R2 SP2
แพคเกจการอัปเดตโปรแกรมแก้ไขด่วนสําหรับ SQL Server 2008 R2 Service Pack 1 การแก้ไขสําหรับปัญหานี้เปิดตัวครั้งแรกในแพคเกจการอัปเดตโปรแกรมแก้ไขด่วนสําหรับ SQL Server 2008 R2 Service Pack 1
สถานะ
Microsoft ได้ยืนยันว่านี่เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ที่แสดงไว้ในส่วน "นำไปใช้กับ"
ข้อมูลเพิ่มเติม
หลังจากที่คุณใช้โปรแกรมแก้ไขด่วน ให้เพิ่มสคริปต์ต่อไปนี้ไปยังงานเอเจนต์การกระจาย:DECLARE @JobID BINARY(16)
DECLARE @AgentID int
DECLARE @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 เอเจนต์ ON Job.job_id = Agent.job_id
ตําแหน่ง 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
มี COUNT(step_id) = 3
OPEN JobCur
ดึงข้อมูลถัดไปจาก JobCur INTO @JobID, @AgentID
WHILE @@FETCH_STATUS = 0 BEGIN
ถ้า (@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(''ตัวแทนถูกกําหนดเวลาให้ลองใหม่ กําลังดําเนินการเริ่มระบบของคอมพิวเตอร์ใหม่เดี๋ยวนี้'',16,1)'
EXEC msdb.dbo.sp_add_jobstep @job\_id=@JobID, '@database\_name=Nการแจกจ่าย', @step\_name=N'ตรวจหาการลองใหม่', @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
ดึงข้อมูลถัดไปจาก JobCur INTO @JobID, @AgentID;
END
ปิด JobCur;
ยกเลิกการจัดสรร JobCur;
GO