mssql Agent history clean up fail나는 이유

By | 2025-07-25

MSSQL에서 SQL Server Agent history cleanup 작업이 실패하는 이유는 여러 가지가 있을 수 있습니다. 대표적인 원인과 해결 방법을 아래에 정리했습니다.


✅ 1. 권한 문제

  • SQL Server Agent가 작업을 수행할 때 필요한 권한이 없으면 실패합니다.
  • 원인: SQLAgentUserRole 권한 부족 또는 작업 실행 계정이 sysadmin이 아님
  • 해결: 작업을 실행하는 계정이 sysadmin 역할인지 확인하거나, 최소한 필요한 권한을 부여합니다.

✅ 2. MSDB 데이터베이스 손상 또는 비정상 상태

  • Agent 히스토리는 msdb 데이터베이스에 저장됩니다.
  • 원인: msdb 내 관련 테이블 (sysjobhistory, sysjobs, 등)에 문제가 있을 수 있음
  • 해결:
    • msdb 상태 확인
    • DBCC CHECKDB(msdb) 실행해서 오류 확인

✅ 3. 오래된 레코드가 너무 많음

  • 삭제 대상 히스토리 데이터가 너무 많아 시간 초과 또는 리소스 부족으로 실패
  • 해결:
    • 주기적으로 cleanup 수행하여 누적 방지
    • 작업 스케줄을 더 자주 실행하거나 한 번에 삭제하는 양을 줄이기

✅ 4. SQL Server Agent 구성 오류

  • SQL Server Agent 구성 중 history log cleanup 작업이 잘못 설정되었을 수 있습니다.
  • 확인 방법:
    • SQL Server Management Studio (SSMS) → SQL Server Agent → Jobs → Agent History Cleanup
    • 해당 작업의 스텝 속성에서 실행되는 T-SQL 확인
EXEC msdb.dbo.sp_purge_jobhistory @oldest_date = 'yyyy-mm-dd'
  • 오류 메시지 예시:
    "The DELETE statement conflicted with the REFERENCE constraint"

✅ 5. 외래 키 제약 조건 오류

  • sysjobhistory를 삭제하려고 할 때 관련된 외래 키 제약 조건 때문에 삭제 실패
  • 해결:
    • 해당 제약 조건 확인 후, 무결성 문제 해결

✅ 6. SQL Server 버그

  • 일부 SQL Server 버전에서 cleanup job과 관련된 알려진 버그가 존재
  • 해결:
    • 최신 서비스 팩 또는 누적 업데이트 적용

👉 해결 팁 요약

  1. SSMS에서 실패한 작업의 Job History 확인 (오류 메시지 확인)
  2. SQL Server 에러 로그 또는 Windows 이벤트 로그도 참고
  3. 직접 T-SQL로 히스토리 정리 테스트
-- 예시: 30일 이상 된 히스토리 삭제
EXEC msdb.dbo.sp_purge_jobhistory @oldest_date = DATEADD(day, -30, GETDATE());

답글 남기기

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