증상
Microsoft SQL Server 2008 R2, SQL Server 2012 또는 SQL Server 2014 트랜잭션 복제 환경이 있다고 가정합니다. 환경에는 SQL Server의 여러 배포 인스턴스가 있습니다. 이 경우 액세스 위반이 발생할 수 있으며 SQL Server 복제 배포 에이전트가 충돌합니다. 또한 미니 덤프 파일이 생성됩니다.
해결 방법
핫픽스를 적용하면 에이전트가 덤프 파일과 함께 충돌하는 대신 정상적으로 종료됩니다. 배포 에이전트 작업에 작업 단계를 추가하여 에이전트가 중지되고 "다시 시작 예약됨" 상태일 때 에이전트를 자동으로 다시 시작할 수 있습니다.
배포 에이전트 작업에서 추가 작업 단계를 추가하는 방법에 대한 자세한 내용은 추가 정보 섹션을 참조하세요.
이 문제는 다음 SQL Server 누적 업데이트에서 처음 해결되었습니다.
2014년 SQL Server용 누적 업데이트 1 /en-us/help/2931693
SQL Server 2012 SP1용 누적 업데이트 9 /en-us/help/2931078
SQL Server 2012용 누적 업데이트 11 /en-us/help/2908007
SQL Server 2008 R2 SP2용 누적 업데이트 9 /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 서비스 팩 1용 핫픽스 업데이트 패키지 이 문제에 대한 픽스는 SQL Server 2008 R2 서비스 팩 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 Agent ON Job.job_id = Agent.job_id
WHERE Job.name '%Put Text Mask To identify your publisher DB jobs here%' AND Cat.name = 'REPL-distribution'
Job.job_id, Agent.id 별 그룹화
HAVING COUNT(step_id) = 3
OPEN JobCur
FETCH NEXT FROM JobCur INTO @JobID, @AgentID
WHILE @@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(''에이전트가 다시 시도하도록 예약되었습니다. 지금 다시 시작 수행 중'',16,1)'
EXEC msdb.dbo.sp_add_jobstep @job\_id=@JobID, 'distribution', @step\_name=N'Check for retry', @step\_id=4, , @on\_fail\_action=4@on\_fail\_step\_id=1, @database\_name=N@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;
End 키
CLOSE JobCur;
DEALLOCATE JobCur;
GO