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 확인
- SQL Server Management Studio (SSMS) → SQL Server Agent → Jobs →
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과 관련된 알려진 버그가 존재
- 해결:
- 최신 서비스 팩 또는 누적 업데이트 적용
👉 해결 팁 요약
- SSMS에서 실패한 작업의 Job History 확인 (오류 메시지 확인)
- SQL Server 에러 로그 또는 Windows 이벤트 로그도 참고
- 직접 T-SQL로 히스토리 정리 테스트
-- 예시: 30일 이상 된 히스토리 삭제
EXEC msdb.dbo.sp_purge_jobhistory @oldest_date = DATEADD(day, -30, GETDATE());