MSSQL Distribution CleanUp 에러나는 이유

By | 2025-07-28

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';

📌 권장 조치 순서

  1. 에러 로그 분석 (SQL Agent → Job History)
  2. Distribution DB 상태 점검 (트랜잭션, 공간, 권한)
  3. 관련 에이전트 실행 상태 점검
  4. 필요 시 리플리케이션 재구성 검토

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다