อาการ
สมมติว่าคุณมี Microsoft SQL Server ๒๐๐๘ R2, SQL Server ๒๐๑๒หรือ SQL Server ๒๐๑๔สภาพแวดล้อมการจำลองแบบของทรานแซคชัน มีอินสแตนซ์การแจกจ่ายหลายอินสแตนซ์ของ SQL Server ในสภาพแวดล้อม ในสถานการณ์นี้การละเมิดการเข้าถึงอาจเกิดขึ้นและตัวแทนการแจกจ่ายการจำลองแบบของ SQL Server หยุดทำงาน นอกจากนี้ไฟล์การถ่ายโอนข้อมูลขนาดเล็กจะถูกสร้างขึ้น
การแก้ไข
หลังจากที่คุณนำโปรแกรมแก้ไขด่วนไปใช้แล้วตัวแทนจะปิดลงอย่างสง่างามแทนที่จะหยุดทำงานร่วมกับไฟล์การถ่ายโอนข้อมูล คุณสามารถเพิ่มขั้นตอนของงานเพิ่มเติมในงานของบริษัทตัวแทนการแจกจ่ายเพื่อรีสตาร์ทครั้งแทนโดยอัตโนมัติเมื่อตัวแทนหยุดทำงานและมีสถานะ "จัดกำหนดการสำหรับการเริ่มต้น" สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการเพิ่มขั้นตอนของงานเพิ่มเติมในงานตัวแทนการแจกจ่ายโปรดดูที่ส่วนข้อมูลเพิ่มเติม ปัญหานี้ได้รับการแก้ไขแล้วในการอัปเดตที่สะสมของ SQL Server ครั้งแรก
การอัปเดตที่สะสม1สำหรับ SQL Server ๒๐๑๔ /en-us/help/2931693
การอัปเดตที่สะสม9สำหรับ SQL Server ๒๐๑๒ SP1 /en-us/help/2931078
การอัปเดตที่สะสม11สำหรับ SQL Server ๒๐๑๒ /en-us/help/2908007
การอัปเดตที่สะสม9สำหรับ SQL Server ๒๐๐๘ R2 SP2 /en-us/help/2887606
การอัปเดตที่สะสมใหม่แต่ละรายการสำหรับ SQL Server ประกอบด้วยโปรแกรมแก้ไขด่วนทั้งหมดและการแก้ไขการรักษาความปลอดภัยทั้งหมดที่รวมอยู่ในการอัปเดตที่สะสมก่อนหน้านี้ ตรวจสอบการอัปเดตที่สะสมล่าสุดสำหรับ SQL Server:
แพคเกจการอัปเดตของโปรแกรมแก้ไขด่วนสำหรับ SQL Server ๒๐๐๘ R2 Service Pack 1การแก้ไขสำหรับปัญหานี้ถูกนำออกใช้ครั้งแรกในแพคเกจการอัปเดตของโปรแกรมแก้ไขด่วนสำหรับ SQL Server ๒๐๐๘ R2 Service Pack 1
สถานะ
Microsoft ยืนยันว่าปัญหานี้เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ซึ่งมีการระบุไว้ในส่วน "นำไปใช้กับ"
ข้อมูลเพิ่มเติม
หลังจากที่คุณนำโปรแกรมแก้ไขด่วนไปใช้ให้เพิ่มสคริปต์ต่อไปนี้ลงในงานของบริษัทตัวแทนการแจกจ่าย:DECLARE @JobID BINARY(16)DECLARE @AgentID intDECLARE @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 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' GROUP BY Job.job_id, Agent.id HAVING COUNT(step_id) = 3OPEN JobCurFETCH NEXT FROM JobCur INTO @JobID, @AgentIDWHILE @@FETCH_STATUS = 0 BEGIN IF (@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(''Agent was scheduled for retry. Performing restart now'',16,1)' EXEC msdb.dbo.sp_add_jobstep @job_id=@JobID, @database_name=N'distribution', @step_name=N'Check for retry', @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 FETCH NEXT FROM JobCur INTO @JobID, @AgentID;ENDCLOSE JobCur;DEALLOCATE JobCur;GO