본 게시물은 개인적인 의견으로 작성되었으니 절대적인 정보가 아닐 수 있습니다. 참고만 하시고 궁금한 사항이 있으시면 연락주세요.

티스토리 뷰

DB관리자들이 한번쯤은 경험을 했을 것이다.
순간 깜짝 놀랬을 것이다.

유지관리계획으로 작성을 하면 JOB에이전트에 일정이 자동 추가가 된다.
이때 유지관리계획을 삭제한 후에 JOB에이전트를 삭제할때 아래와 같이 오류가 발생한다.

DELETE 문이 REFERENCE 제약 조건 "FK_subplan_job_id"과(와) 충돌했습니다.
데이터베이스 "msdb", 테이블 "dbo.sysmaintplan_subplans", column 'job_id'에서 충돌이 발생했습니다.
문이 종료되었습니다. (Microsoft SQL Server, 오류: 547)

원인 : sysmaintplan_plans 테이블의 ID값과, 해당 계획의 로그가 쌓이는 sysmaintplan_log의 ID값이 서로 다르기 때문에 발생함.
그러나 sysmaintplan_log의 레코드가  없는경우에 sysmaintplan_plans 의 레코드만 경우도 있다.

위 오류는 아래와 같이 처리가 가능하다.

1.  select * from msdb.dbo.sysmaintplan_subplans 실행하면 레코드가 보인다.
2.  select * from  msdb.dbo.sysmaintplan_log 실행해서 위 레코드ID와 비교를 한다.
문제되는 plan_id 를 아래와 같이 삭제해준다.
delete from msdb.dbo.sysmaintplan_log where plan_id='7C1DDE2F-3FE4-424D-8140-94A4F9AF160B'

단, log 테이블에 아무레코드도 없는 경우가 있을 경우에는 2단계를 패스한다.

3. delete from msdb.dbo.sysmaintplan_subplans where subplan_name = '하위 계획'
해당하는 plan_id or subplan_name 의 조건으로 삭제한다.

4. Job 에이전트를 새로고침 해면 삭제가 된다.
   단, 삭제가 안되는 경우에는 [작업]의 [삭제] 수동으로 지워준다.

그럼 정상적으로 해당 에이전트 JOB 을 삭제할수 있다.

<작성일자:2011/03/29 >

댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
Total
Today
Yesterday