MSSQL에서 Distribution CleanUp Job이 에러가 나는 이유는 여러 가지가 있을 수 있습니다. 이 작업은 Transactional Replication에서 오래된 트랜잭션을 정리(clean up)하는 중요한 역할을 합니다. 에러가 발생하는 주요 원인을 아래에 정리해 드릴게요.
✅ 주요 에러 원인
1. 에이전트 권한 부족
Distribution Cleanup: distribution
작업은 특정 SQL Server Agent 계정 또는 프로시저 실행 계정에 적절한 권한이 없으면 실패합니다.- 예: 에러 메시지에
The process could not execute 'sp_MSdelete_dodelete'
또는 권한 거부 오류가 나올 수 있음.
🛠️ 해결 방법:
- Agent가 사용하는 계정이
distribution
데이터베이스에서 적절한 권한을 가지고 있는지 확인하세요 (보통db_owner
권한 필요).
2. 대량의 미처리된 트랜잭션
- Distribution DB에 쌓인 트랜잭션이 너무 많아서 cleanup 작업이 timeout되거나 실패할 수 있습니다.
🛠️ 해결 방법:
sp_browsereplcmds
또는sp_replcmds
같은 시스템 프로시저로 큐 상태 확인.- 구독자(subscriber)에서 리플리케이션 에이전트가 잘 작동하는지 확인.
3. 테이블 락 또는 블로킹
- 정리 대상이 되는 테이블(
MSrepl_commands
,MSrepl_transactions
)에 락이 걸려 있거나 다른 프로세스와 충돌 중일 수 있습니다.
🛠️ 해결 방법:
sp_who2
,sys.dm_tran_locks
,sys.dm_exec_requests
등을 통해 블로킹 여부 확인.- 문제 되는 세션 강제 종료 후 다시 시도.
4. 에이전트 작업이 중단되거나 손상됨
- SQL Agent Job 자체가 중지되거나 잘못 구성되어 있으면 실패합니다.
🛠️ 해결 방법:
- SSMS > SQL Server Agent > Jobs >
Distribution clean up: distribution
작업의 로그를 확인. - 문제가 있으면 재생성하거나 Job step을 재구성합니다.
5. 디스크 공간 부족 또는 DB 손상
- Distribution DB의 디스크 공간이 부족하거나 테이블/인덱스가 손상된 경우.
🛠️ 해결 방법:
- DBCC CHECKDB 실행해서 손상 여부 확인.
- 디스크 공간 확보.
- 필요시 백업 후 Distribution DB 재구축.
🧪 확인용 쿼리
Distribution DB 트랜잭션 상태 확인:
USE distribution;
GO
SELECT COUNT(*) AS PendingCommands
FROM MSrepl_commands;
에이전트 에러 로그 확인:
EXEC msdb.dbo.sp_help_jobhistory
@job_name = 'Distribution clean up: distribution';
📌 권장 조치 순서
- 에러 로그 분석 (SQL Agent → Job History)
- Distribution DB 상태 점검 (트랜잭션, 공간, 권한)
- 관련 에이전트 실행 상태 점검
- 필요 시 리플리케이션 재구성 검토