Triệu chứng
Giả định rằng bạn đã có một Microsoft SQL Server 2008 R2, SQL Server 2012 hoặc các giao dịch nhân rộng SQL Server 2014. Có nhiều phiên bản phân phối của SQL Server trong môi trường. Trong trường hợp này, vi phạm truy nhập có thể xảy ra và đại diện phân phối nhân bản SQL Server gặp sự cố. Ngoài ra, tệp có chứa mini sẽ được tạo ra.
Giải pháp
Sau khi bạn áp dụng các hotfix, đại diện sẽ tắt gracefully thay vì đâm cùng với tệp kết xuất. Bạn có thể thêm một bước làm việc bổ sung trong công việc đại diện phân phối để khởi động lại đại diện tự động khi đại diện đã ngừng và có trạng thái "đã lên lịch để khởi động lại". Để biết thêm thông tin về cách thêm một bước làm việc bổ sung trong công việc đại diện phân phối, vui lòng tham khảo phần thông tin khác. Vấn đề lần đầu tiên được khắc phục trong bản Cập Nhật tích lũy SQL Server sau đây.
Cập Nhật tích lũy 1 cho SQL Server 2014 /en-us/help/2931693
Bản Cập Nhật tích lũy 9 cho SQL Server 2012 SP1 /en-us/help/2931078
Bản Cập Nhật tích lũy 11 cho SQL Server 2012 /en-us/help/2908007
Bản Cập Nhật tích lũy 9 cho SQL Server 2008 R2 SP2 /en-us/help/2887606
Mỗi bản Cập Nhật tích lũy mới cho SQL Server chứa tất cả các hotfix và tất cả các bản sửa lỗi bảo mật đã được đưa vào bản Cập Nhật tích lũy trước đó. Kiểm tra các bản Cập Nhật tích lũy mới nhất cho SQL Server:
Gói Cập Nhật hotfix cho gói dịch vụ SQL Server 2008 R2 1Bản sửa lỗi cho sự cố này lần đầu tiên được phát hành trong gói bản Cập Nhật hotfix cho SQL Server 2008 R2 Service Pack 1.
Trạng thái
Microsoft đã xác nhận đây là sự cố trong các sản phẩm của Microsoft được liệt kê trong phần "Áp dụng cho".
Thông tin Bổ sung
Sau khi bạn áp dụng hotfix, hãy thêm tập lệnh sau đây vào công việc đại diện phân phối: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