diff --git a/src/main/resources/sql/old_job_cleanup.sql b/src/main/resources/sql/old_job_cleanup.sql new file mode 100644 index 0000000..64e4327 --- /dev/null +++ b/src/main/resources/sql/old_job_cleanup.sql @@ -0,0 +1,67 @@ + -- 오래된 STARTED 상태 Job을 정리하는 SQL 쿼리입니다. +-- snp_data 스키마에 batch_ 접두사를 사용하는 예시입니다. 실제 스키마에 맞추어 수정해서 사용하세요. + +-- 참고: 시간 간격 변경이 필요하면 INTERVAL '2 hours' 부분을 수정하세요: +-- 1시간: INTERVAL '1 hour' +-- 30분: INTERVAL '30 minutes' +-- 1일: INTERVAL '1 day' + +-- 2시간 이상 경과한 STARTED 상태 Job Execution 조회 +SELECT + je.job_execution_id, + ji.job_name, + je.status, + je.start_time, + je.end_time, + NOW() - je.start_time AS elapsed_time +FROM snp_data.batch_job_execution je + JOIN snp_data.batch_job_instance ji ON je.job_instance_id = ji.job_instance_id +WHERE je.status = 'STARTED' + AND je.start_time < NOW() - INTERVAL '2 hours' +ORDER BY je.start_time; + + +-- Step Execution을 FAILED로 변경 +UPDATE snp_data.batch_step_execution +SET + status = 'FAILED', + exit_code = 'FAILED', + exit_message = 'Manually cleaned up - stale execution (process restart)', + end_time = NOW(), + last_updated = NOW() +WHERE job_execution_id IN ( + SELECT job_execution_id + FROM snp_data.batch_job_execution + WHERE status = 'STARTED' + AND start_time < NOW() - INTERVAL '2 hours' + ); + + + +-- Job Execution을 FAILED로 변경 +UPDATE snp_data.batch_job_execution +SET + status = 'FAILED', + exit_code = 'FAILED', + exit_message = 'Manually cleaned up - stale execution (process restart)', + end_time = NOW(), + last_updated = NOW() +WHERE status = 'STARTED' + AND start_time < NOW() - INTERVAL '2 hours'; + + + +-- 정리 후 STARTED 상태 확인 +SELECT + je.job_execution_id, + ji.job_name, + je.status, + je.exit_code, + je.start_time, + je.end_time +FROM snp_data.batch_job_execution je + JOIN snp_data.batch_job_instance ji ON je.job_instance_id = ji.job_instance_id +WHERE je.status IN ('STARTED', 'FAILED') +ORDER BY je.start_time DESC + LIMIT 20; +