JOB을 등록할 때 사용
DBMS_JOB.SUBMIT(
job OUT BINARY_INTEGER,
what IN VARCHAR2, next_date IN DATE DEFAULT SYSDATE
interval IN VARCHAR2 DEFAULT 'NULL',
no_parse IN BOOLEAN DEFAULT FALSE,
instance IN BINARY_INTEGER DEFAULT ANY_INSTANCE,
force IN BOOLEAN DEFAULT FALSE);
- job : 잡 번호
- what : 실행할 SQL이나 PL/SQL 프로시저 (실행할 프로그램)
세미콜론(;)으로 끝나야 함
- next_date : 작업이 실행될 다음 시간
interval값에 따라 업데이트 됨
기본값 SYSDATE
- interval : 작업실행 주기
기본값 NULL
문자열 형태 (VARCHAR2 타입) 작은 따옴표로 감싸야 함
이전 작업이 끝난 시점으로부터 interval을 계산
- no_parse :
- instance : 어떤 instance 가 작업을 수행할지 지정
기본값 0 : ANY INSTANCE
0이면 버전별로 적용 내용이 다름
10g : job이 최초에 생성된 instance에서 수행
11g~ : 일반적 가장 최근에 job이 수행되었던 instance에서 job이 수행
node에 부하가 아~주 큰 경우 instance의 부하에 따라 작업 instance 선택
- force : TRUE면 instance에 설정한 번호가 음수나 NULL일 경우 ORA-23319 error 발생
모든 양의 정수는 instance값으로 허용
FALSE면 없는 인스턴스 번호에 대해서는 ORA-23428 error발생
기본값 FALSE
--JOB중지
EXEC DBMS_JOB.BROKEN(JOB번호, TRUE);
COMMIT;
--JOB실행
EXEC DBMS_JOB.BROKEN(JOB번호, FALSE, 다음수행 시간);
EXEC DBMS_JOB.BROKEN(JOB번호, FALSE, sysdate + 1/24);
COMMIT;
※ JOB이 실행되고 interval 시간이 지났는데 아직 이전 작업이 종료가 되지 않았다면?
DBMS_JOB을 사용하는 경우
현재 수행중인 JOB이 종료된 이후 interval time에 따라 다음 수행시간이 결정됨
The starting time for the next execution is determined when the current jobs is finished. If you specify an interval as SYSDATE+30/86400 then it does not mean: "The job runs every 30 seconds.
It means: "The next jobs starts 30 seconds after the previous job has been finished."
DBMS_SCHEDULER를 사용하는 경우
JOB이 수행된 시점으로부터 다음 수행시간이 결정됨
만약 interval로 설정된 시간안에 작업이 끝나지 않았으면 다음 작업은 대기상태로 있다가 앞 작업이 끝나면 바로 수행Immediately after a job starts, the repeat_interval (e.g. FREQ=SECONDLY;INTERVAL=30) is evaluated to determine the next scheduled execution time of the job. While this might arrive while the job is still running, a new instance of the job does not start until the current one completes. See About Setting the Repeat Interval
So it means: If a jobs last longer than 30 seconds then the new job will start immediately after the previous job has been finished.
※ stackoverflow.com/questions/56263769/what-happens-when-a-procedure-executed-by-a-job-is-not-finished-when-is-time-for
'인프라 > 데이터 베이스' 카테고리의 다른 글
ORA-12514 TNS리스너가 현재 접속 기술자에 요청된 서비스를 알지못함 (0) | 2021.03.22 |
---|---|
05. Control File (0) | 2021.03.04 |
ORA-12560 : TNS 프로토콜 어댑터 오류 (0) | 2021.02.20 |
Oracle 인스턴스 수동생성 & window서비스 등록 (0) | 2021.02.20 |
ORA-01950: no privileges on tablespace / ORA-01536: space quota exceeded for tablespace_After revoking DBA role (0) | 2021.02.15 |