الأعراض
افترض ان لديك بيئة 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 2008 R2 Service Pack 1تم إصدار تصحيح لهذه المشكلة أولا في حزمه تحديث الإصلاح العاجل ل SQL server 2008 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