Exprired Subscribtion CleanUp에러이유

By | 2025-07-28

Expired Subscription Clean Up 작업이 실패하는 경우는 주로 리플리케이션 구성 문제, 권한 부족, 데이터 손상, 내부 시스템 오류 때문입니다. 이 작업은 만료된 구독(subscription) 을 제거하는 역할을 하며, 리플리케이션을 유지관리하는 데 중요합니다.


✅ 주요 원인 및 해결 방법

1. 구독자 정보 손상 또는 일치하지 않음

  • MSsubscriptions, MSreplication_subscriptions 테이블에 구독 정보가 손상되었거나 Publisher/Subscriber 간 메타데이터 불일치가 발생한 경우.

🛠️ 해결:

  • distribution DB에서 손상된 구독 정보 확인.
  • 필요 시 수동으로 잘못된 레코드를 삭제하거나 sp_subscription_cleanup 사용.

2. 배포자(Distributor)에 잘못된 연결 또는 설정

  • 배포자에서 Publisher 또는 Subscriber에 대한 연결 설정이 잘못되어 오류 발생.

🛠️ 해결:

  • sp_helpdistributor, sp_helpdistributiondb, sp_helpdistpublisher 등을 사용해 구성 확인.
  • linked server 설정 문제 확인.

3. 에이전트 권한 부족

  • SQL Server Agent 계정 또는 실행 계정이 필요한 권한(예: db_owner)을 가지고 있지 않음.

🛠️ 해결:

  • SQL Agent 작업을 실행하는 계정에 distribution DB에 대한 충분한 권한 부여.
  • SSMS에서 작업 속성 → Steps → 실행 계정 확인.

4. 오래된/비정상적인 구독이 삭제되지 않음

  • 일부 구독은 이미 수동으로 삭제되었지만, 관련 메타데이터가 남아 있어 작업이 실패함.

🛠️ 해결:

  • MSsubscriptions, MSreplication_subscriptions 등의 테이블에서 orphan된 항목을 확인하고 수동 삭제 가능.
  • 예: sql복사편집SELECT * FROM distribution.dbo.MSsubscriptions WHERE status = 0;

5. Job이 오래 걸려 Timeout 또는 Deadlock 발생

  • 구독 수가 많거나 오래된 레코드가 많아 삭제 시 시간이 오래 걸려 Job이 Timeout됨.

🛠️ 해결:

  • 작업 시간 늘리기 (Job 설정 → Advanced → Retry/Timeout 설정)
  • 필요 시 구독을 분할하여 수동 정리

🔍 에러 메시지 예시별 원인

에러 메시지원인 및 설명
Cannot drop the subscription because it does not exist.구독이 이미 삭제되었는데 메타데이터가 남아있음
The subscription does not exist.위와 동일
The process could not execute 'sp_MSsubscription_cleanup'내부 프로시저 호출 실패, 권한 또는 데이터 손상
Timeout expired삭제 작업이 오래 걸려 시간 초과
Violation of PRIMARY KEY constraint삭제 과정에서 무결성 제약 위반 발생

✅ 확인 쿼리 예시

-- 배포자에서 만료된 구독 조회
USE distribution;
SELECT * FROM MSsubscriptions WHERE status = 0;

-- 만료된 구독 중 삭제 대상 확인
EXEC sp_replmonitorhelppublisher;
EXEC sp_replmonitorhelpsubscription;

🧼 수동 정리 방법 (주의 필요!)

⚠️ 항상 백업 후 진행하세요.

-- 수동 구독 삭제 예시
USE distribution;
DELETE FROM MSsubscriptions WHERE status = 0 AND subscriber_db = 'Your_SubDB_Name';

✳️ 권장 조치 순서

  1. SQL Agent Job > Expired Subscription Clean Up → 작업 히스토리 확인
  2. distribution DB 내 구독 관련 테이블 조회
  3. sp_replmonitorhelppublisher, sp_replmonitorhelpsubscription 실행해 상태 점검
  4. 필요 시 수동 정리 또는 리플리케이션 재설정 고려

답글 남기기

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