- 오라클 스케줄러(dbms_scheduler) JOB 생성 시 시간대는 무엇인가
- JOB 등록시 세션 시간대로 등록되며 DBA_SCHEDULER_JOBS에서 시간대가 포함된 시간 확인 가능
- 스케줄 JOB 실행 시간대는 OS time zone 기준
참고:
oracle 리스너 timezone 설정
oracle alert.log 시간대(time zone) 기준은 무엇인가
oracle 오브젝트 생성시간은 어떤 시간대(time zone)
세션 시간대 KST에서 JOB 생성
세션 시간대 KST로 설정 후 TEST_KST JOB 생성합니다
-- 세션 시간대 KST로 변경
SQL> ALTER SESSION SET TIME_ZONE = '+09:00';
Session altered.
-- 세션 시간대 확인
SELECT dbtimezone, sessiontimezone, sysdate, current_date FROM dual ;
Session altered.
DBTIME SESSIONTIMEZONE SYSDATE CURRENT_DATE
------ ----------------------------------- ------------------- -------------------
+00:00 +09:00 2024/02/21 13:52:20 2024/02/21 13:52:20
-- JOB 등록
SQL>
BEGIN
DBMS_SCHEDULER.CREATE_JOB
(
JOB_NAME => 'TEST_KST'
, JOB_TYPE => 'PLSQL_BLOCK'
, JOB_ACTION => 'select sysdate from dual; '
, NUMBER_OF_ARGUMENTS => 0
, START_DATE => TO_DATE('2024-02-21 14:00','YYYY-MM-DD HH24:MI')
, REPEAT_INTERVAL => 'FREQ=MINUTELY;INTERVAL=1'
, COMMENTS => ''
, ENABLED => TRUE
);
END;
/
SQL>
PL/SQL procedure successfully completed.
DBA_SCHEDULER_JOBS의 START_DATE 컬럼 값을 보면 time zone(+09:00) 확인 가능 합니다
SQL> select job_name, start_date, next_run_Date
from DBA_SCHEDULER_JOBS
where job_name like 'TEST%'
;
JOB_NAME START_DATE NEXT_RUN_DATE
------------------------ --------------------------------------------------- -------------------------------------------------
TEST_KST 21-FEB-24 02.00.00.000000 PM +09:00 21-FEB-24 02.00.00.000000 PM +09:00
SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
세션 시간대 UTC에서 JOB 생성
세션 시간대 UTC로 설정 후 TEST_UTC JOB 생성합니다
-- 세션 시간대 UTC 변경
SQL> ALTER SESSION SET TIME_ZONE = '00:00';
Session altered.
-- 시간대 확인
SQL> ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS';
SELECT dbtimezone, sessiontimezone, sysdate, current_date FROM dual ;
Session altered.
DBTIME SESSIONTIMEZONE SYSDATE CURRENT_DATE
------ ----------------------------------- ------------------- -------------------
+00:00 +00:00 2024/02/21 13:54:34 2024/02/21 04:54:34
-- JOB 등록
SQL> BEGIN
DBMS_SCHEDULER.CREATE_JOB
(
JOB_NAME => 'TEST_UTC'
, JOB_TYPE => 'PLSQL_BLOCK'
, JOB_ACTION => 'select sysdate from dual; '
, NUMBER_OF_ARGUMENTS => 0
, START_DATE => TO_DATE('2024-02-21 14:00','YYYY-MM-DD HH24:MI')
, REPEAT_INTERVAL => 'FREQ=MINUTELY;INTERVAL=1'
, COMMENTS => ''
, ENABLED => TRUE
);
END;
/
PL/SQL procedure successfully completed.
SQL>
TEST_KST는 +09:00, TEST_UTC는 +00:00으로 생성시 세션시간대 반영하여 등록되어 있습니다
-- DBA_SCHEDULER_JOBS에 세션 시간대 반영하여 등록됨
SQL> select job_name, start_date, next_run_Date
from DBA_SCHEDULER_JOBS
where job_name like 'TEST%'
;
JOB_NAME START_DATE NEXT_RUN_DATE
---------------------------------------- ------------------------------------------ -----------------------------------------
TEST_KST 21-FEB-24 02.00.00.000000 PM +09:00 21-FEB-24 02.00.00.000000 PM +09:00
TEST_UTC 21-FEB-24 02.00.00.000000 PM +00:00 21-FEB-24 02.00.00.000000 PM +00:00
SQL>
반응형
스케줄 JOB 실행 시간대
스케줄러에 등록된 JOB은 OS time znoe을 기준으로 실행되는것을 확인 할 수 있습니다
아래 테스트에서 14:00(KST)로 설정된 TEST_KST만 실행되고 있습니다
-- 실행 시간은 OS 시간대를 기준으로 실행된다
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
-- JOB 확인
SQL> select job_name, start_date, next_run_Date
from DBA_SCHEDULER_JOBS
where job_name like 'TEST%'
;
JOB_NAME START_DATE NEXT_RUN_DATE
-------------------------------- ------------------------------------------ -----------------------------------------------
TEST_KST 21-FEB-24 02.00.00.000000 PM +09:00 21-FEB-24 02.00.00.000000 PM +09:00
TEST_UTC 21-FEB-24 02.00.00.000000 PM +00:00 21-FEB-24 02.00.00.000000 PM +00:00
-- sysdate 확인
SQL>
SELECT dbtimezone, sessiontimezone, sysdate, current_date FROM dual ;
Session altered.
SQL>
DBTIME SESSIONTIMEZONE SYSDATE CURRENT_DATE
------ --------------------------- ------------------- -------------------
+00:00 +09:00 2024/02/21 14:03:05 2024/02/21 14:03:05
-- KST 14:00로 설정된 TEST_KST만 실행중
SQL> SELECT log_id, log_date, job_name
FROM DBA_SCHEDULER_JOB_LOG
where job_name like 'TEST%'
order by log_id desc
;
LOG_ID LOG_DATE JOB_NAME
---------- --------------------------------------------------------------------------- ------------------------------
1120 21-FEB-24 02.04.00.499806 PM +09:00 TEST_KST
1118 21-FEB-24 02.03.00.390768 PM +09:00 TEST_KST
1116 21-FEB-24 02.02.00.285368 PM +09:00 TEST_KST
1114 21-FEB-24 02.01.00.125692 PM +09:00 TEST_KST
1112 21-FEB-24 02.00.00.058986 PM +09:00 TEST_KST
SQL>
스케줄 JOB 시간대 변경
TEST_UTC시간대를 UTC -> KST로 변경하니 바로 실행되는 것 확인됩니다
-- JOB 시간대 변경(UTC -> KST로 변경)
SQL> BEGIN
DBMS_SCHEDULER.SET_ATTRIBUTE(
name => 'TEST_UTC',
attribute => 'START_DATE',
value => TO_TIMESTAMP_TZ('2024-02-21 14:00 +09:00', 'YYYY-MM-DD HH24:MI TZR')
);
END;
/
PL/SQL procedure successfully completed.
-- 변경 확인
SQL> select job_name, start_date, next_run_Date
from DBA_SCHEDULER_JOBS
where job_name like 'TEST%'
;
JOB_NAME START_DATE NEXT_RUN_DATE
------------------------------ --------------------------------------------------- ----------------------------------------------
TEST_KST 21-FEB-24 02.00.00.000000 PM +09:00 21-FEB-24 02.12.00.629287 PM +09:00
TEST_UTC 21-FEB-24 02.00.00.000000 PM +09:00 21-FEB-24 02.12.00.638787 PM +09:00
-- 실행내역 조회
SQL> SELECT log_id, log_date, job_name
FROM DBA_SCHEDULER_JOB_LOG
where job_name like 'TEST%'
order by log_id desc
;
LOG_ID LOG_DATE JOB_NAME
---------- ------------------------------------------------- ------------------------------
1138 21-FEB-24 02.11.00.647160 PM +09:00 TEST_UTC
1136 21-FEB-24 02.11.00.631811 PM +09:00 TEST_KST
1132 21-FEB-24 02.10.00.430838 PM +09:00 TEST_KST
1130 21-FEB-24 02.09.00.414688 PM +09:00 TEST_KST
1128 21-FEB-24 02.08.01.064500 PM +09:00 TEST_KST
1126 21-FEB-24 02.07.00.937474 PM +09:00 TEST_KST
1124 21-FEB-24 02.06.00.861984 PM +09:00 TEST_KST
1122 21-FEB-24 02.05.00.689815 PM +09:00 TEST_KST
1120 21-FEB-24 02.04.00.499806 PM +09:00 TEST_KST
1118 21-FEB-24 02.03.00.390768 PM +09:00 TEST_KST
1116 21-FEB-24 02.02.00.285368 PM +09:00 TEST_KST
1114 21-FEB-24 02.01.00.125692 PM +09:00 TEST_KST
1112 21-FEB-24 02.00.00.058986 PM +09:00 TEST_KST
13 rows selected.
SQL>
테스트 JOB 삭제
-- 스케줄 JOB 삭제
SQL> EXEC DBMS_SCHEDULER.DROP_JOB('TEST_KST');
PL/SQL procedure successfully completed.
SQL> EXEC DBMS_SCHEDULER.DROP_JOB('TEST_UTC');
PL/SQL procedure successfully completed.
-- 스케줄 JOB 확인
SQL> select
job_name, start_date, next_run_Date
from DBA_SCHEDULER_JOBS
where job_name like 'TEST%'
;
no rows selected
SQL>
'DBMS > ORACLE' 카테고리의 다른 글
[oracle] index unusable DML 테스트 (0) | 2024.03.17 |
---|---|
[oracle] 아카이브 진행 중인 로그 삭제 시 에러, ora-16014, ora-19508, ora-16038 (0) | 2024.03.15 |
[oracle] 리스너 timezone 설정 (0) | 2024.02.20 |
[oracle] alert.log 시간대(time zone) 기준은 무엇인가 (0) | 2024.02.18 |
[oracle] 오브젝트 생성시간은 어떤 시간대(time zone) (0) | 2024.02.17 |
댓글