기술 정보
home
채널 소개
home

JOB 자동 수행되지 않는 문제

문서 유형
장애 해결
분야
관리/환경설정
키워드
JOB
적용 제품 버전
6FS06
6FS07
1 more property

현상

수동으로 JOB을 수행할 경우 정상적으로 실행되지만, 자동으로는 수행되지 않는 문제가 발생했습니다.

원인

버그 1: bitq 지속 발생 원인

Job scheduler thread가 한 번도 slog를 기록한 적이 없는 상태에서 slog switch가 발생하는 경우, 기존 구현에서는 로그를 한 번도 기록하지 않은 thread에 대해 별도 처리 없이 넘어가도록 되어 있었습니다.
그 결과 agent는 해당 thread에서 log switch가 아직 완료되지 않았다고 판단하고, fd check 주기(3초)마다 해당 job scheduler thread에게 계속해서 bitq 신호를 전송하게 됩니다.

버그 2: bitq 수신 후 처리 오류

signal을 받아 깨어난 경우에도 timeout 재계산은 수행했지만, 계산 로직 오류로 인해 timeout 시간이 점점 늘어나는 문제가 있었습니다.
masking되지 않은 bitq(ex. log switch bitq)를 수신해 깨어난 경우, 재계산 로직 자체가 누락되어 처음 설정된 timeout 값 그대로 다시 잠드는 문제가 발생했습니다.

해결

bitq 발생 원인 관련

156652q 이상 버전의 패치를 적용하여 해결합니다.

bit 처리 로직 개선

225787 버전의 패치를 적용하여 해결합니다.
bitq read 중 timeout을 걸고 대기하는 상황에서 관련 없는 bitq를 수신해 깨어날 경우, timeout 값을 다시 계산하도록 로직을 수정하였습니다.
주의
티맥스티베로에서 제공하는 기술지원을 통해 패치를 적용합니다.
참고
임시우회로 해당 dummy job 등록 시  현상이 해소됩니다.
DECLARE job_no number; BEGIN DBMS_JOB.SUBMIT(job_no, 'dbms_lock.sleep(1);', SYSDATE, 'SYSDATE+2/86400'); END; /
SQL
복사
dummy job 테스트
1. 문제 job(4) 조회 SQL> SELECT * FROM DBA_JOBS where JOB='4'; JOB SCHEMA_USER NEXT_DATE INTERVAL BROKEN FAILURES WHAT INSTANCE LAST_DATE THIS_DATE ---------- ----------- -------------------- -------------------- ------ ---------- -------------------- ---------- -------------------- ---------------------------------------------------------------- 4 32 2024/04/06 TRUNC(SYSDATE+1) N 0 KOSEAIS.SP_HRM_APPNT 0 2024/04/05 1 row selected. 2. 2초 job(22) 등록, 조회 DECLARE job_no number; BEGIN DBMS_JOB.SUBMIT(job_no, 'dbms_lock.sleep(1);', SYSDATE, 'SYSDATE+2/86400'); END; / SQL> SELECT * FROM DBA_JOBS where JOB='22'; JOB SCHEMA_USER NEXT_DATE INTERVAL BROKEN FAILURES WHAT INSTANCE LAST_DATE THIS_DATE ---------- ----------- -------------------- -------------------- ------ ---------- -------------------- ---------- -------------------- ---------------------------------------------------------------- 22 0 2024/04/05 SYSDATE+2/86400 N 0 dbms_lock.sleep(1); 0 2024/04/05 3. 문제 job(4) -> 자동 수행 확인 SQL> select * from dba_job_history where job = 4 order by end_date desc; JOB NAME SCHEMA_USER INSTANCE START_DATE END_DATE RESULT COMMENTS ---------- ---------- ----------- ---------- -------------------- -------------------- ---------- -------------------- 4 32 0 2024-04-05 18:02:27 2024-04-05 18:02:27 SUCCESS 4 32 0 2024-04-05 17:08:16 2024-04-05 17:08:16 SUCCESS 4 32 0 2024-04-05 16:55:02 2024-04-05 16:55:02 SUCCESS 4 32 0 2024-04-05 16:54:01 2024-04-05 16:54:01 SUCCESS 4 32 0 2024-04-05 16:53:00 2024-04-05 16:53:00 SUCCESS 4 32 0 2024-04-05 16:52:00 2024-04-05 16:52:00 SUCCESS
SQL
복사