Triệu chứng
Giả sử bạn có môi trường Tái tạo Giao tác Microsoft SQL Server 2008 R2, SQL Server 2012 hoặc 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à tác nhân phân phối sao nhân bản SQL Server gặp sự cố. Ngoài ra, một tệp kết xuất mini sẽ được tạo.
Giải pháp
Sau khi bạn áp dụng hotfix, tác tử sẽ tắt một cách dễ dàng thay vì gặp sự cố cùng với tệp dọc. Bạn có thể thêm một bước công việc bổ sung trong công việc Tác vụ Phân phối để tự động khởi động lại tác nhân khi tác nhân đã dừ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 công việc bổ sung trong công việc Đại lý Phân phối, vui lòng tham khảo phần Thông tin Thêm.
Sự cố này được khắc phục lần đầu tiên trong bản cập nhật tích lũy tiếp theo của SQL Server.
Cập nhật tích lũy 1 cho SQL Server 2014 /en-us/help/2931693
Cập nhật tích lũy 9 cho SQL Server 2012 SP1 /en-us/help/2931078
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
Giới thiệu về các bản cập nhật tích lũy cho SQL Server
Mỗi bản cập nhật tích lũy mới dành cho SQL Server chứa tất cả các bản sửa lỗi nóng và bản sửa lỗi bảo mật được tích hợp trong bản cập nhật tích lũy trước đó. Xem các bản cập nhật tích lũy mới nhất cho SQL Server:
- Bản cập nhật tích lũy mới nhất cho SQL Server 2014
- Bản cập nhật tích lũy mới nhất cho SQL Server 2012 SP1
- Bản cập nhật tích lũy mới nhất cho SQL Server 2012
- Bản cập nhật tích lũy mới nhất cho SQL Server 2008 R2 SP2
Gói cập nhật hotfix cho SQL Server 2008 R2 Gói Dịch vụ 1Bản sửa lỗi cho sự cố này được phát hành lần đầu trong gói cập nhật hotfix cho SQL Server 2008 R2 Gói Dịch vụ 1.
Trạng thái
Microsoft đã xác nhận rằng đây là sự cố trong các sản phẩm của Microsoft được liệt kê trong mục "áp dụng cho".
Xem thêm thông tin
Sau khi bạn áp dụng hotfix, hãy thêm tập lệnh sau vào công việc Tác lý Phân phối:DECLARE @JobID BINARY(16)
KHAI BÁO @AgentID số nguyên
DECLARE @command varchar(max)
KHAI BÁO JOBCUR CON TRỎ CHO 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 TÁC NHÂN NHƯ Job.job_id = Agent.job_id
TRONG ĐÓ Job.name như '%Đặt mặt nạ văn bản để xác định công việc DB nhà xuất bản của bạn ở đây%' AND Cat.name = 'REPL-Distribution'
GROUP BY Job.job_id, Agent.id
HAVING COUNT(step_id) = 3
MỞ JobCur
FETCH NEXT FROM JobCur INTO @JobID, @AgentID
WHILE @@FETCH_STATUS = 0 BEGIN
IF (@JobID không rỗng), BEGIN
set @command = N'if (chọn 1 trạng thái chạy hàng đầu từ MSdistribution_history trong đó agent_id = ' + convert(varchar, N @AgentID)+ ', order by timestamp, desc) = 5
raiserror(''Tác nhân đã được lên lịch để thử lại. Thực hiện khởi động lại ngay'',16,1)'
EXEC msdb.dbo.sp_add_jobstep , '@database\_name=Ndistribution', '@step\_name=NCheck for retry', @step\_id=4, , @on\_fail\_action=4@on\_fail\_step\_id=1,@job\_id=@JobID@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 TIẾP THEO TỪ JobCur VÀO @JobID, @AgentID;
END
ĐÓNG JobCur;
HỦY PHÂN BỔ JobCur;
GO