1. μ€λΌν΄ μ€μΌμ€λ¬λ?
μ€λΌν΄ μ€μΌμ€λ¬λ λ°μ΄ν°λ² μ΄μ€ μμ μ μμ½νκ³ μλμΌλ‘ μ€νλλλ‘ λμμ£Όλ μ€λΌν΄ λ°μ΄ν°λ² μ΄μ€μ κΈ°λ₯μ λλ€. μ΄λ₯Ό ν΅ν΄ μΌλ ¨μ μμ μ μ£ΌκΈ°μ μΌλ‘ μ€ννκ±°λ νΉμ μκ°μ μμ μ μμ½ν μ μμ΅λλ€. μ¦, μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ λ°μ΄ν°λ² μ΄μ€ μμ μ μλνλ₯Ό ν μ μμ΅λλ€.
1.1. μ€λΌν΄ μ€μΌμ€λ¬μ μ₯μ
- μμ μμ½μ ν΅ν μλν: νΉμ μμ μ 미리 μμ½νκ³ μ€μΌμ€μ λ°λΌ μλμΌλ‘ μ€νλλλ‘ ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μΈκ°μ κ°μ μμ΄ μμ μ μνν μ μμ΄ ν¨μ¨μ±μ λμΌ μ μμ΅λλ€.
- μμ€ν λΆν μ΅μν: μμ μ μ μ ν μκ°μ μμ½νμ¬ μμ€ν λΆνλ₯Ό μ΅μνν μ μμ΅λλ€. μλ₯Ό λ€μ΄, μ¬μ©μ μ μμ΄ μ μ μκ°λμ μμ μ μμ½νμ¬ λ°μ΄ν°λ² μ΄μ€ μ±λ₯μ ν₯μμν¬ μ μμ΅λλ€.
- μ μ°ν μμ μ€μΌμ€λ§: μ€μΌμ€λ¬λ₯Ό ν΅ν΄ μ£ΌκΈ°μ μΌλ‘ μμ μ μ€ννκ±°λ νΉμ μκ°μ μμ μ μμ½ν μ μμ΅λλ€. λν, μμ κ°μ μμ‘΄ κ΄κ³λ₯Ό μ€μ νμ¬ μμ μ μ€ν μμλ₯Ό μ‘°μ ν μλ μμ΅λλ€.
1.2. μ€λΌν΄ μ€μΌμ€λ¬μ κ΅¬μ± μμ
- JOB (μμ ): μ€μΌμ€λκ±°λ μλμΌλ‘ μ€νλλ μμ λ¨μ
- SCHEDULE (μ€μΌμ€): μμ μ΄ μ€νλ μκ° λλ μ£ΌκΈ°λ₯Ό μ€μ νλ κ·μΉ
- PROGRAM (νλ‘κ·Έλ¨): μ€μ λ‘ μ€νλλ μμ μ μ μνλ κ°μ²΄
- JOB CLASS (μμ ν΄λμ€): μμ μν μ μ°μ μμμ 리μμ€λ₯Ό μ μ΄νλ μμ± μ§ν©
- WINDOW (μλμ°): μ€μΌμ€λ μμ μ μ€νν κΈ°κ°μ μ μνλ μκ° λ²μ
μ€λΌν΄ μ€μΌμ€λ¬λ μμ κ°μ΄ λ€μν κ΅¬μ± μμλ‘ κ΅¬μ±λμ΄ μμΌλ©°, μ΄λ₯Ό μ‘°ν©νμ¬ μμ μ μμ½ μκ° λ° μ£ΌκΈ°, μμ μ°μ μμμ 리μμ€ μ μ΄ λ±μ μ€μ ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ λ°μ΄ν°λ² μ΄μ€ μμ μ μ μ°νκ² κ΄λ¦¬ν μ μμ΅λλ€.
2. μ€λΌν΄ μ€μΌμ€λ¬ μ€μ νκΈ°
μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©νκΈ° μν΄μλ λ¨Όμ λ°μ΄ν°λ² μ΄μ€μ μ€μΌμ€λ¬λ₯Ό νμ±νν΄μΌ ν©λλ€. μλμ λ¨κ³λ₯Ό λ°λΌ μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ€μ ν μ μμ΅λλ€.
2.1. DBMS_SCHEDULER ν¨ν€μ§ νμ±ννκΈ°
μ€μΌμ€λ¬λ₯Ό μ¬μ©νκΈ° μν΄μλ λ¨Όμ DBMS_SCHEDULER ν¨ν€μ§λ₯Ό νμ±νν΄μΌ ν©λλ€.
EXEC DBMS_SCHEDULER.ENABLE;
2.2. JOB_QUEUE_PROCESSES νλΌλ―Έν° μ€μ νκΈ°
μ€μΌμ€λ¬λ₯Ό μ¬μ©νλ €λ©΄ JOB_QUEUE_PROCESSES νλΌλ―Έν°κ° 0λ³΄λ€ ν° κ°μ κ°μ ΈμΌ ν©λλ€. ν΄λΉ νλΌλ―Έν°λ₯Ό νμΈνκ³ μ€μ ν μ μμ΅λλ€.
SELECT name, value FROM v$parameter WHERE name = 'job_queue_processes';
ALTER SYSTEM SET job_queue_processes = 10;
β» μ μμμμλ 10μ μνλ κ°μΌλ‘ μ€μ ν©λλ€.
2.3. AUTO_TASKS νλΌλ―Έν° μ€μ νκΈ° (μ ν μ¬ν)
AUTO_TASKS νλΌλ―Έν°λ μ€μΌμ€λ¬ κ΄λ ¨ μμ μ μλμΌλ‘ μ€νν μ μλλ‘ μ€μ νλ νλΌλ―Έν°μ λλ€. AUTO_TASKS νλΌλ―Έν°λ₯Ό μ¬μ©νμ§ μμ κ²½μ°, ν΄λΉ λΆλΆμ 건λλ°μ΄λ λ©λλ€.
SELECT client_name, status FROM dba_autotask_client;
EXEC DBMS_AUTO_TASK_ADMIN.ENABLE(client_name => 'auto optimizer stats collection', operation => NULL, window_name => NULL);
μμ κ°μ΄ μ€μ μ λ§μΉλ©΄ μ€λΌν΄ λ°μ΄ν°λ² μ΄μ€μ μ€μΌμ€λ¬λ₯Ό νμ±ννκ³ μ€μ ν μ μμ΅λλ€. μ΄μ μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ μμ μ μμ½νκ³ κ΄λ¦¬ν μ μμ΅λλ€.
3. μ€λΌν΄ μ€μΌμ€λ¬ μμ½ μμ μμ±νκΈ°
μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ μμ½ μμ μ μμ±νλ €λ©΄ λ€μμ λ¨κ³λ₯Ό λ°λΌμΌ ν©λλ€.
3.1. PROGRAM μμ±νκΈ°
λ¨Όμ μμ½ μμ μ μ€νν νλ‘κ·Έλ¨μ μ μν΄μΌ ν©λλ€. νλ‘κ·Έλ¨μ μ€μΌμ€λ¬ μμ μ€ν μ μ€μ λ‘ μ€νλλ λμμ λλ€.
BEGIN
DBMS_SCHEDULER.CREATE_PROGRAM(
program_name => 'my_program',
program_type => 'PLSQL_BLOCK',
program_action => 'BEGIN my_procedure; END;',
enabled => TRUE);
END;
/
μμ μμ μμλ my_program μ΄λ¦μ νλ‘κ·Έλ¨μ μμ±νλ©°, μ΄ νλ‘κ·Έλ¨μ PL/SQL λΈλ‘μΌλ‘ ꡬμ±λμ΄ μμ΅λλ€. my_procedureλ νλ‘κ·Έλ¨ λ΄μμ μ€νλ μ€μ μμ μ λνλ λλ€.
3.2. SCHEDULE μμ±νκΈ°
λ€μμΌλ‘ μμ½ μμ μ μ€νν μ€μΌμ€μ μμ±ν΄μΌ ν©λλ€. μ€μΌμ€μ μμ μ΄ μ€νλ μ£ΌκΈ° λλ νΉμ μκ°μ μ§μ νλ μν μ ν©λλ€.
BEGIN
DBMS_SCHEDULER.CREATE_SCHEDULE(
schedule_name => 'my_schedule',
repeat_interval => 'FREQ=DAILY; BYHOUR=3,4,5,8; BYMINUTE=0',
enabled => TRUE);
END;
/
μμ μμ μμλ my_schedule μ΄λ¦μ μ€μΌμ€μ μμ±ν©λλ€. repeat_intervalμ ν΅ν΄ μμ μ λ§€μΌ 3μ, 4μ, 5μ, 8μμ μ€ννλλ‘ μ€μ νμμ΅λλ€.
3.3. JOB μμ±νκΈ°
λ§μ§λ§μΌλ‘ μμ½ μμ μ μμ±νμ¬ νλ‘κ·Έλ¨κ³Ό μ€μΌμ€μ μ‘°ν©ν©λλ€.
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'my_job',
program_name => 'my_program',
schedule_name => 'my_schedule',
enabled => TRUE);
END;
/
μμ μμ μμλ my_job μ΄λ¦μ μμ½ μμ μ μμ±ν©λλ€. νλ‘κ·Έλ¨μ 'my_program'μ μ¬μ©νκ³ , μ€μΌμ€μ 'my_schedule'μ μ¬μ©νμ¬ μμ μ΄ μ€νλ©λλ€.
μμ μμλ₯Ό λ°λΌ μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ μμ½ μμ μ μμ±ν μ μμ΅λλ€. μ΄μ μ€μΌμ€λ¬μ μν΄ μ§μ λ νλ‘κ·Έλ¨μ΄ μ£ΌκΈ°μ μΌλ‘ μ€νλ κ²μ λλ€.
4. μ€λΌν΄ μ€μΌμ€λ¬ μ€ν μν λͺ¨λν°λ§νκΈ°
μ€λΌν΄ μ€μΌμ€λ¬λ‘ μμ½λ μμ λ€μ λͺ¨λν°λ§νκΈ° μν΄μλ λ€μμ λ¨κ³λ₯Ό λ°λ₯Ό μ μμ΅λλ€.
4.1. μ€μΌμ€λ¬ μ€ν μν νμΈνκΈ°
μ€μΌμ€λ¬μ μ€ν μνλ₯Ό νμΈνκΈ° μν΄μλ λ€μμ 쿼리λ₯Ό μ€νν©λλ€.
SELECT * FROM dba_scheduler_running_jobs;
μμ 쿼리λ νμ¬ μ€ν μ€μΈ λͺ¨λ μ€μΌμ€λ¬ μμ μ 보μ¬μ€λλ€. ν΄λΉ 쿼리 κ²°κ³Όμμ job_name, session_id λ° running_instance μΉΌλΌμ ν΅ν΄ μ€ν μ€μΈ μμ μ νμΈν μ μμ΅λλ€.
4.2. νΉμ μμ μ μ€ν μν νμΈνκΈ°
νΉμ μμ μ μ€ν μνλ₯Ό νμΈνκΈ° μν΄μλ λ€μμ 쿼리λ₯Ό μ€νν©λλ€.
SELECT * FROM dba_scheduler_job_run_details WHERE job_name = 'my_job';
μμ 쿼리μμλ job_nameμ μνλ μμ μ μ΄λ¦μ μ§μ νλ©΄ ν΄λΉ μμ μ μ€ν μνκ° νμλ©λλ€. μ€ν μκ°, μν λ° μΈλΆ μ 보 λ±μ νμΈν μ μμ΅λλ€.
4.3. μμ μ€ν μ΄λ ₯ νμΈνκΈ°
νΉμ μμ μ μ€ν μ΄λ ₯μ νμΈνκΈ° μν΄μλ λ€μμ 쿼리λ₯Ό μ€νν©λλ€.
SELECT * FROM dba_scheduler_job_log WHERE job_name = 'my_job';
μμ 쿼리μμλ job_nameμ μνλ μμ μ μ΄λ¦μ μ§μ νλ©΄ ν΄λΉ μμ μ μ€ν μ΄λ ₯μ΄ νμλ©λλ€. μμ μ€ν μκ°, μν λ° μλ¬ λ©μμ§ λ±μ νμΈν μ μμ΅λλ€.
μμ μμλ₯Ό λ°λΌ μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό ν΅ν΄ μμ½λ μμ λ€μ μ€ν μνλ₯Ό λͺ¨λν°λ§ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μμ μ μ€ν μν©κ³Ό λ¬Έμ λ₯Ό νμ ν μ μμ΅λλ€.
5. μ€λΌν΄ μ€μΌμ€λ¬ μμ
λ€μμ μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ μμ½ μμ μ μμ±νλ μμ μ λλ€.
5.1. νλ‘κ·Έλ¨ μμ±νκΈ°
BEGIN
DBMS_SCHEDULER.CREATE_PROGRAM(
program_name => 'my_program',
program_type => 'PLSQL_BLOCK',
program_action => 'BEGIN my_procedure; END;',
enabled => TRUE);
END;
/
μμ μμ λ my_program
μ΄λ¦μ νλ‘κ·Έλ¨μ μμ±ν©λλ€. μ΄ νλ‘κ·Έλ¨μ PL/SQL λΈλ‘μΌλ‘ ꡬμ±λμ΄ μμΌλ©°, my_procedure
λΌλ νλ‘μμ κ° μ€νλ©λλ€.
5.2. μ€μΌμ€ μμ±νκΈ°
BEGIN
DBMS_SCHEDULER.CREATE_SCHEDULE(
schedule_name => 'my_schedule',
repeat_interval => 'FREQ=DAILY; BYHOUR=3,4,5,8; BYMINUTE=0',
enabled => TRUE);
END;
/
μμ μμ μμλ my_schedule
μ΄λ¦μ μ€μΌμ€μ μμ±ν©λλ€. repeat_interval
μ ν΅ν΄ μμ
μ λ§€μΌ 3μ, 4μ, 5μ, 8μμ μ€ννλλ‘ μ€μ νμμ΅λλ€.
5.3. μμ μμ±νκΈ°
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'my_job',
program_name => 'my_program',
schedule_name => 'my_schedule',
enabled => TRUE);
END;
/
μμ μμ μμλ my_job
μ΄λ¦μ μμ½ μμ
μ μμ±ν©λλ€. νλ‘κ·Έλ¨μ my_program
μ μ¬μ©νκ³ , μ€μΌμ€μ my_schedule
μ μ¬μ©νμ¬ μμ
μ΄ μ€νλ©λλ€.
μ΄μ μμ½λ μμ μ μ€μ λ μ€μΌμ€μ λ°λΌ μ£ΌκΈ°μ μΌλ‘ μ€νλ κ²μ λλ€.
μμ μμλ₯Ό λ°λΌ μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ μμ½ μμ μ μμ±ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μνλ μμ μ νΉμ μκ°λμ μλμΌλ‘ μ€νμν¬ μ μμ΅λλ€.
μ€λΌν΄ μ€μΌμ€λ¬ μμ
λ€μμ μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ μμ½ μμ μ μμ±νλ μμ μ λλ€.
νλ‘κ·Έλ¨ μμ±νκΈ°
BEGIN
DBMS_SCHEDULER.CREATE_PROGRAM(
program_name => 'my_program',
program_type => 'PLSQL_BLOCK',
program_action => 'BEGIN my_procedure; END;',
enabled => TRUE);
END;
/
μμ μμ λ my_program
μ΄λ¦μ νλ‘κ·Έλ¨μ μμ±ν©λλ€. μ΄ νλ‘κ·Έλ¨μ PL/SQL λΈλ‘μΌλ‘ ꡬμ±λμ΄ μμΌλ©°, my_procedure
λΌλ νλ‘μμ κ° μ€νλ©λλ€.
μ€μΌμ€ μμ±νκΈ°
BEGIN
DBMS_SCHEDULER.CREATE_SCHEDULE(
schedule_name => 'my_schedule',
repeat_interval => 'FREQ=DAILY; BYHOUR=3,4,5,8; BYMINUTE=0',
enabled => TRUE);
END;
/
μμ μμ μμλ my_schedule
μ΄λ¦μ μ€μΌμ€μ μμ±ν©λλ€. repeat_interval
μ ν΅ν΄ μμ
μ λ§€μΌ 3μ, 4μ, 5μ, 8μμ μ€ννλλ‘ μ€μ νμμ΅λλ€.
μμ μμ±νκΈ°
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'my_job',
program_name => 'my_program',
schedule_name => 'my_schedule',
enabled => TRUE);
END;
/
μμ μμ μμλ my_job
μ΄λ¦μ μμ½ μμ
μ μμ±ν©λλ€. νλ‘κ·Έλ¨μ my_program
μ μ¬μ©νκ³ , μ€μΌμ€μ my_schedule
μ μ¬μ©νμ¬ μμ
μ΄ μ€νλ©λλ€.
μ΄μ μμ½λ μμ μ μ€μ λ μ€μΌμ€μ λ°λΌ μ£ΌκΈ°μ μΌλ‘ μ€νλ κ²μ λλ€.
μμ μμλ₯Ό λ°λΌ μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ μμ½ μμ μ μμ±ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μνλ μμ μ νΉμ μκ°λμ μλμΌλ‘ μ€νμν¬ μ μμ΅λλ€.
μ€λΌν΄ μ€μΌμ€λ¬ μμ
νλ‘κ·Έλ¨ μμ±νκΈ°
BEGIN
DBMS_SCHEDULER.CREATE_PROGRAM(
program_name => 'my_program',
program_type => 'PLSQL_BLOCK',
program_action => 'BEGIN my_procedure; END;',
enabled => TRUE);
END;
/
μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ μμ½ μμ
μ μμ±νκΈ° μν΄μλ λ¨Όμ νλ‘κ·Έλ¨μ μμ±ν΄μΌ ν©λλ€. μμ μμ λ my_program
μ΄λΌλ μ΄λ¦μ νλ‘κ·Έλ¨μ μμ±νλ λ°©λ²μ 보μ¬μ€λλ€. μ΄ νλ‘κ·Έλ¨μ PL/SQL λΈλ‘μΌλ‘ ꡬμ±λμ΄ μμΌλ©°, my_procedure
λΌλ νλ‘μμ κ° μ€νλ©λλ€.
μ€μΌμ€ μμ±νκΈ°
BEGIN
DBMS_SCHEDULER.CREATE_SCHEDULE(
schedule_name => 'my_schedule',
repeat_interval => 'FREQ=DAILY; BYHOUR=3,4,5,8; BYMINUTE=0',
enabled => TRUE);
END;
/
λ€μμΌλ‘, μμ
μ μ€νν μκ°μ μ€μ ν΄μΌ ν©λλ€. μμ μμ μμλ my_schedule
μ΄λΌλ μ΄λ¦μ μ€μΌμ€μ μμ±νλ λ°©λ²μ 보μ¬μ€λλ€. repeat_interval
μ μ¬μ©νμ¬ μμ
μ λ§€μΌ 3μ, 4μ, 5μ, 8μμ μ€ννλλ‘ μ€μ νμμ΅λλ€.
μμ μμ±νκΈ°
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'my_job',
program_name => 'my_program',
schedule_name => 'my_schedule',
enabled => TRUE);
END;
/
λ§μ§λ§μΌλ‘, μμ±ν νλ‘κ·Έλ¨κ³Ό μ€μΌμ€μ κΈ°λ°μΌλ‘ μμ
μ μμ±ν©λλ€. μμ μμ μμλ my_job
μ΄λΌλ μ΄λ¦μ μμ½ μμ
μ μμ±νλ λ°©λ²μ 보μ¬μ€λλ€. program_name
μλ μμ μμ±ν νλ‘κ·Έλ¨μΈ my_program
μ μ€μ νκ³ , schedule_name
μλ my_schedule
μ μ€μ νμ¬ μμ
μ΄ μ€νλ μκ°κ³Ό λ΄μ©μ μ§μ ν©λλ€.
μ΄μ μμ½λ μμ μ μ€μ λ μ€μΌμ€μ λ°λΌ μ£ΌκΈ°μ μΌλ‘ μ€νλ κ²μ λλ€.
μμ μμλ₯Ό λ°λΌ μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ μμ½ μμ μ μμ±ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μνλ μμ μ νΉμ μκ°λμ μλμΌλ‘ μ€νμν¬ μ μμ΅λλ€.
μ€λΌν΄ μ€μΌμ€λ¬ μμ
νλ‘κ·Έλ¨ μμ±νκΈ°
BEGIN
DBMS_SCHEDULER.CREATE_PROGRAM(
program_name => 'my_program',
program_type => 'PLSQL_BLOCK',
program_action => 'BEGIN my_procedure; END;',
enabled => TRUE);
END;
/
μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ μμ½ μμ
μ μμ±νκΈ° μν΄μλ λ¨Όμ νλ‘κ·Έλ¨μ μμ±ν΄μΌ ν©λλ€. μμ μμ λ my_program
μ΄λΌλ μ΄λ¦μ νλ‘κ·Έλ¨μ μμ±νλ λ°©λ²μ 보μ¬μ€λλ€. μ΄ νλ‘κ·Έλ¨μ PL/SQL λΈλ‘μΌλ‘ ꡬμ±λμ΄ μμΌλ©°, my_procedure
λΌλ νλ‘μμ κ° μ€νλ©λλ€.
μ€μΌμ€ μμ±νκΈ°
BEGIN
DBMS_SCHEDULER.CREATE_SCHEDULE(
schedule_name => 'my_schedule',
repeat_interval => 'FREQ=DAILY; BYHOUR=3,4,5,8; BYMINUTE=0',
enabled => TRUE);
END;
/
λ€μμΌλ‘, μμ
μ μ€νν μκ°μ μ€μ ν΄μΌ ν©λλ€. μμ μμ μμλ my_schedule
μ΄λΌλ μ΄λ¦μ μ€μΌμ€μ μμ±νλ λ°©λ²μ 보μ¬μ€λλ€. repeat_interval
μ μ¬μ©νμ¬ μμ
μ λ§€μΌ 3μ, 4μ, 5μ, 8μμ μ€ννλλ‘ μ€μ νμμ΅λλ€.
μμ μμ±νκΈ°
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'my_job',
program_name => 'my_program',
schedule_name => 'my_schedule',
enabled => TRUE);
END;
/
λ§μ§λ§μΌλ‘, μμ±ν νλ‘κ·Έλ¨κ³Ό μ€μΌμ€μ κΈ°λ°μΌλ‘ μμ
μ μμ±ν©λλ€. μμ μμ μμλ my_job
μ΄λΌλ μ΄λ¦μ μμ½ μμ
μ μμ±νλ λ°©λ²μ 보μ¬μ€λλ€. program_name
μλ μμ μμ±ν νλ‘κ·Έλ¨μΈ my_program
μ μ€μ νκ³ , schedule_name
μλ my_schedule
μ μ€μ νμ¬ μμ
μ΄ μ€νλ μκ°κ³Ό λ΄μ©μ μ§μ ν©λλ€.
μ΄μ μμ½λ μμ μ μ€μ λ μ€μΌμ€μ λ°λΌ μ£ΌκΈ°μ μΌλ‘ μ€νλ κ²μ λλ€.
μμ μμλ₯Ό λ°λΌ μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ μμ½ μμ μ μμ±ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μνλ μμ μ νΉμ μκ°λμ μλμΌλ‘ μ€νμν¬ μ μμ΅λλ€.
μ€λΌν΄ μ€μΌμ€λ¬ μμ
νλ‘κ·Έλ¨ μμ±νκΈ°
μμ μμ λ μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ μμ½ μμ μ μμ±νλ κ³Όμ μ 보μ¬μ€λλ€. μμ μ μ€νν νλ‘κ·Έλ¨μ λ¨Όμ μμ±ν΄μΌ ν©λλ€.
BEGIN
DBMS_SCHEDULER.CREATE_PROGRAM(
program_name => 'my_program',
program_type => 'PLSQL_BLOCK',
program_action => 'BEGIN my_procedure; END;',
enabled => TRUE);
END;
/
μμ μμ μμλ my_program
μ΄λΌλ μ΄λ¦μ νλ‘κ·Έλ¨μ μμ±ν©λλ€. μ΄ νλ‘κ·Έλ¨μ PL/SQL λΈλ‘
μΌλ‘ ꡬμ±λμ΄ μμΌλ©°, my_procedure
λΌλ νλ‘μμ κ° μ€νλλλ‘ μ€μ λμ΄ μμ΅λλ€.
μ€μΌμ€ μμ±νκΈ°
μμ μ μ€νν μκ°μ μ€μ ν΄μΌ ν©λλ€. μ΄λ₯Ό μν΄ μ€μΌμ€μ μμ±ν©λλ€.
BEGIN
DBMS_SCHEDULER.CREATE_SCHEDULE(
schedule_name => 'my_schedule',
repeat_interval => 'FREQ=DAILY; BYHOUR=3,4,5,8; BYMINUTE=0',
enabled => TRUE);
END;
/
μμ μμ μμλ my_schedule
μ΄λΌλ μ΄λ¦μ μ€μΌμ€μ μμ±ν©λλ€. repeat_interval
μ μ¬μ©νμ¬ μμ
μ λ§€μΌ 3μ, 4μ, 5μ, 8μμ μ€ννλλ‘ μ€μ λμ΄ μμ΅λλ€.
μμ μμ±νκΈ°
λ§μ§λ§μΌλ‘, μμ±ν νλ‘κ·Έλ¨κ³Ό μ€μΌμ€μ κΈ°λ°μΌλ‘ μμ μ μμ±ν©λλ€.
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'my_job',
program_name => 'my_program',
schedule_name => 'my_schedule',
enabled => TRUE);
END;
/
μμ μμ μμλ my_job
μ΄λΌλ μ΄λ¦μ μμ½ μμ
μ μμ±ν©λλ€. program_name
μλ μμ μμ±ν νλ‘κ·Έλ¨μΈ my_program
μ μ€μ νκ³ , schedule_name
μλ my_schedule
μ μ€μ νμ¬ μμ
μ΄ μ€νλ μκ°κ³Ό λ΄μ©μ μ§μ ν©λλ€.
μ΄μ μ€μ λ μ€μΌμ€μ λ°λΌ μμ½λ μμ μ΄ μ£ΌκΈ°μ μΌλ‘ μ€νλ©λλ€.
μμ μμλ₯Ό λ°λΌ μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ μμ½ μμ μ μμ±ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μνλ μμ μ νΉμ μκ°λμ μλμΌλ‘ μ€νμν¬ μ μμ΅λλ€.
μ€λΌν΄ μ€μΌμ€λ¬ μμ
νλ‘κ·Έλ¨ μμ±νκΈ°
μμ½ μμ
μ μμ±νκΈ° μ μ λ¨Όμ μμ
μ μ€νν νλ‘κ·Έλ¨μ μμ±ν΄μΌ ν©λλ€. μ΄λ₯Ό μν΄ CREATE_PROGRAM
νλ‘μμ λ₯Ό μ¬μ©ν©λλ€.
BEGIN
DBMS_SCHEDULER.CREATE_PROGRAM(
program_name => 'my_program',
program_type => 'PLSQL_BLOCK',
program_action => 'BEGIN my_procedure; END;',
enabled => TRUE);
END;
/
μμ μμ λ my_program
μ΄λΌλ μ΄λ¦μ νλ‘κ·Έλ¨μ μμ±νλ λ°©λ²μ 보μ¬μ€λλ€. ν΄λΉ νλ‘κ·Έλ¨μ PL/SQL λΈλ‘μΌλ‘ ꡬμ±λμ΄ μμΌλ©°, my_procedure
λΌλ νΉμ νλ‘μμ λ₯Ό μ€νν©λλ€.
μ€μΌμ€ μμ±νκΈ°
μμ
μ΄ μ€νλ μκ°μ μ§μ νλ μ€μΌμ€μ μμ±ν΄μΌ ν©λλ€. μ΄λ₯Ό μν΄ CREATE_SCHEDULE
νλ‘μμ λ₯Ό μ¬μ©ν©λλ€.
BEGIN
DBMS_SCHEDULER.CREATE_SCHEDULE(
schedule_name => 'my_schedule',
repeat_interval => 'FREQ=DAILY; BYHOUR=3,4,5,8; BYMINUTE=0',
enabled => TRUE);
END;
/
μμ μμ μμλ my_schedule
μ΄λΌλ μ΄λ¦μ μ€μΌμ€μ μμ±ν©λλ€. repeat_interval
λ΄μμλ μμ
μ΄ λ§€μΌ 3, 4, 5, 8μμ μ€νλλλ‘ μ€μ λμ΄ μμ΅λλ€.
μμ μμ±νκΈ°
νλ‘κ·Έλ¨κ³Ό μ€μΌμ€μ μ€μ ν νμλ μμ
μ μμ±ν΄μΌ ν©λλ€. μ΄λ₯Ό μν΄ CREATE_JOB
νλ‘μμ λ₯Ό μ¬μ©ν©λλ€.
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'my_job',
program_name => 'my_program',
schedule_name => 'my_schedule',
enabled => TRUE);
END;
/
μμ μμ μμλ my_job
μ΄λΌλ μ΄λ¦μ μμ½ μμ
μ μμ±ν©λλ€. program_name
μλ μμ μμ±ν νλ‘κ·Έλ¨μΈ my_program
μ μ€μ νκ³ , schedule_name
μλ my_schedule
μ μ€μ νμ¬ μμ
μ΄ μ€νλ μκ°κ³Ό λ΄μ©μ μ§μ ν©λλ€.
μ΄μ μ€μ ν μ€μΌμ€μ λ°λΌ μμ½λ μμ μ΄ μ£ΌκΈ°μ μΌλ‘ μ€νλ κ²μ λλ€.
μμ μμλ₯Ό λ°λΌ μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ μμ½ μμ μ μμ±ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μνλ μμ μ νΉμ μκ°λμ μλμΌλ‘ μ€νμν¬ μ μμ΅λλ€.
1. μ€λΌν΄ μ€μΌμ€λ¬λ?
μ€λΌν΄ μ€μΌμ€λ¬(Oracle Scheduler)λ μ€λΌν΄ λ°μ΄ν°λ² μ΄μ€μμ μ€νμν¬ μμ μ μμ½νκ³ κ΄λ¦¬νλ κΈ°λ₯μ μ 곡νλ μμ€ν μ λλ€. μ΄λ₯Ό ν΅ν΄ νΉμ μκ°λμ μΌλ ¨μ μμ μ μλμΌλ‘ μ€ννκ±°λ, μ£ΌκΈ°μ μΌλ‘ λ°λ³΅λλ μμ μ μμ½ν μ μμ΅λλ€.
μ€λΌν΄ μ€μΌμ€λ¬λ λ°μ΄ν°λ² μ΄μ€ νκ²½μμ μ€μν μν μ μνν©λλ€. μλ₯Ό λ€μ΄, ν루μ ν λ² λ°μ΄ν°λ² μ΄μ€λ₯Ό λ°±μ νκ³ λ§€μκ° λ°μ΄ν°λ₯Ό λκΈ°ννλ μμ μ μμ½νκ±°λ, 맀주 κΈμμΌ μ€ν 5μμ μ£Όλ¬Έ ν΅κ³ λ³΄κ³ μλ₯Ό μμ±νλ μμ μ μμ½ν μ μμ΅λλ€.
μ€μΌμ€λ¬λ λ°μ΄ν°λ² μ΄μ€ λ΄λΆμμ μ€νλλ μμ μ μ μνκ³ κ΄λ¦¬νλλ° μ¬μ©λλ λ€μν κ°μ²΄λ€μ ν¬ν¨νκ³ μμ΅λλ€. μλ₯Ό λ€μ΄, νλ‘κ·Έλ¨(Program), μ€μΌμ€(Schedule), μμ (Job) λ±μ κ°μ²΄λ₯Ό μ¬μ©νμ¬ μμ μ μ€μ νκ³ μ€νν μ μμ΅λλ€.
μ€μΌμ€λ¬λ λλΆλΆμ λ°μ΄ν°λ² μ΄μ€ λ²μ μμ μ¬μ©ν μ μλ κΈ°λ₯μΌλ‘ ν¬κ΄μ μ΄κ³ κ°λ ₯ν κΈ°λ₯μ μ 곡ν©λλ€. μ΄λ₯Ό ν΅ν΄ λ°μ΄ν°λ² μ΄μ€ κ΄λ¦¬ μμ μ μλννκ³ , μΌκ΄ μ²λ¦¬ μμ μ ν¨μ¨μ μΌλ‘ κ΄λ¦¬ν μ μμ΅λλ€.
μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό νμ©νλ©΄ μΌμΌ μμ½ μμ , μ£Όκ° λ³΄κ³ μ μμ±, λ°μ΄ν°λ² μ΄μ€ μ μ§λ³΄μ μμ λ± λ€μν μμ μ ν¨μ¨μ μΌλ‘ μμ½νκ³ κ΄λ¦¬ν μ μμ΅λλ€.
μ€λΌν΄ μ€μΌμ€λ¬μ κ°λ κ³Ό λͺ©μ μ λν μκ°
μ€λΌν΄ μ€μΌμ€λ¬λ?
μ€λΌν΄ μ€μΌμ€λ¬λ μ€λΌν΄ λ°μ΄ν°λ² μ΄μ€μμ μμ μ μμ½νκ³ κ΄λ¦¬νλ κΈ°λ₯μ μ 곡νλ μμ€ν μ λλ€. μ€μΌμ€λ¬λ νΉμ μκ°λμ μΌλ ¨μ μμ μ μλμΌλ‘ μ€ννκ±°λ, μ£ΌκΈ°μ μΌλ‘ λ°λ³΅λλ μμ μ μμ½ν μ μμ΅λλ€.
μ€λΌν΄ μ€μΌμ€λ¬μ λͺ©μ
μ€λΌν΄ μ€μΌμ€λ¬μ μ£Όμ λͺ©μ μ λ€μκ³Ό κ°μ΅λλ€:
μλνλ μμ μ€ν: μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ νΉμ μκ°μ μΌλ ¨μ μμ μ μλμΌλ‘ μ€νν μ μμ΅λλ€. λ°μ΄ν°λ² μ΄μ€ λ΄λΆμμ μ€νλμ΄μΌ νλ λ°±κ·ΈλΌμ΄λ μμ μ΄λ νΉμ νλ‘μμ λ₯Ό μμ½νμ¬ μλμΌλ‘ μ€νν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μκ°κ³Ό μΈλ ₯μ μ μ½ν μ μμ΅λλ€.
λ°λ³΅ μμ μμ½: μ£ΌκΈ°μ μΌλ‘ λ°λ³΅λλ μμ μ μμ½ν μ μμ΅λλ€. 맀μΌ, 맀주, 맀μ νΉμ λ μ§μ μκ°μ μμ μ μ€ννλλ‘ μμ½ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ λ°λ³΅μ μΈ μμ μ ν¨μ¨μ μΌλ‘ μ²λ¦¬ν μ μμ΅λλ€.
μΌκ΄ μ²λ¦¬ μμ κ΄λ¦¬: λλμ μμ μ μΌκ΄μ μΌλ‘ μ²λ¦¬ν μ μμ΅λλ€. μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ λλμ λ°μ΄ν°λ₯Ό μ²λ¦¬νκ±°λ λ€λ₯Έ μ ν리μΌμ΄μ κ³Όμ μ°λ μμ μ μμ½ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μμ μ μμ μ±κ³Ό ν¨μ¨μ±μ ν₯μμν¬ μ μμ΅λλ€.
μμΈ μ²λ¦¬μ μλ¦Ό: μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ μμΈ μν©μ λν μ²λ¦¬ λ°©λ²μ μ μν μ μμ΅λλ€. μλ₯Ό λ€μ΄, μμ μ€ν μ€ μλ¬κ° λ°μνκ±°λ μμ μ΄ μ ν μκ°μ λμ΄μ μ€νλ κ²½μ° μλ¦Όμ λ°μ μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μμΈ μν©μ μ μνκ² λμν μ μμ΅λλ€.
μ€λΌν΄ μ€μΌμ€λ¬λ λ°μ΄ν°λ² μ΄μ€ κ΄λ¦¬ μμ μ μλννκ³ ν¨μ¨μ μΌλ‘ κ΄λ¦¬ν μ μλ κ°λ ₯ν λꡬμ λλ€. μμ μμ½κ³Ό μ€ν, μμΈ μ²λ¦¬, μλ¦Ό λ±μ λ€μν κΈ°λ₯μ μ 곡νμ¬ λ°μ΄ν°λ² μ΄μ€ μ΄μ λ° μ μ§λ³΄μ μμ μ ν¨μ¨μ μ΄κ³ μμ μ μΌλ‘ μνν μ μμ΅λλ€.
λ°μ΄ν°λ² μ΄μ€ λλ νΉμ μμ μ μλνλ₯Ό μν΄ μ¬μ©λλ λꡬ
μ€λΌν΄ μ€μΌμ€λ¬
μ€λΌν΄ μ€μΌμ€λ¬λ λ°μ΄ν°λ² μ΄μ€ λλ νΉμ μμ μ μλννκΈ° μν΄ μ¬μ©λλ κ°λ ₯ν λꡬμ λλ€. μ΄ λꡬλ₯Ό μ¬μ©νμ¬ μμ μ μμ½νκ³ κ΄λ¦¬ν μ μμΌλ©°, λ€μν κΈ°λ₯μ μ 곡νμ¬ λ°μ΄ν°λ² μ΄μ€ κ΄λ¦¬ μμ μ ν¨μ¨μ μΌλ‘ μνν μ μμ΅λλ€.
μμ μμ½κ³Ό κ΄λ¦¬
μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©νλ©΄ νΉμ μκ°λμ μμ μ μμ½νκ³ μλμΌλ‘ μ€νν μ μμ΅λλ€. μλ₯Ό λ€μ΄, λ§€μΌ μλ²½μ λ°μ΄ν°λ² μ΄μ€λ₯Ό λ°±μ νκ³ , μ£Όκ° λ³΄κ³ μλ₯Ό μμ±νλ μμ μ μμ½ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μΌμμ μΈ μμ μ μλννμ¬ μκ°κ³Ό μΈλ ₯μ μ μ½ν μ μμ΅λλ€. λν, μ€μΌμ€λ¬λ₯Ό ν΅ν΄ μμ μ μ°μ μμμ μ€ν μ£ΌκΈ° λ±μ μ€μ νμ¬ κ΄λ¦¬ν μ μμ΅λλ€.
λ°λ³΅ μμ μμ½
μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ μμ μ μ£ΌκΈ°μ μΌλ‘ λ°λ³΅νμ¬ μμ½ν μ μμ΅λλ€. 맀주, 맀μ νΉμ λ μ§μ μκ°μ μμ μ μ€ννλλ‘ μμ½ν μ μμΌλ©°, μ£ΌκΈ° μ€μ μ ν΅ν΄ μ νν λμ μ£ΌκΈ°λ₯Ό μ‘°μ ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ λ°λ³΅μ μΈ μμ μ ν¨μ¨μ μΌλ‘ μ²λ¦¬ν μ μμ΅λλ€.
μμΈ μ²λ¦¬μ μλ¦Ό
μ€μΌμ€λ¬λ₯Ό μ¬μ©νλ©΄ μμΈ μν©μ λν μ²λ¦¬ λ°©λ²μ μ μν μ μμ΅λλ€. μμ μ€ν μ€ μλ¬κ° λ°μνκ±°λ μμ μ΄ μ ν μκ°μ μ΄κ³Όν κ²½μ° μλ¦Όμ λ°μ μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μμΈ μν©μ λν λΉ λ₯Έ λμμ΄ κ°λ₯νλ©°, μμ μ μμ μ±κ³Ό μ λ’°μ±μ ν₯μμν¬ μ μμ΅λλ€.
λ€μν μμ μ ν μ§μ
μ€λΌν΄ μ€μΌμ€λ¬λ λ€μν μμ μ νμ μ§μν©λλ€. SQL λ¬Έμ₯, PL/SQL νλ‘μμ , λ°μ΄ν°λ² μ΄μ€ μμ , μ΄μ체μ λͺ λ Ή λ± λ€μν μμ μ μμ½νκ³ μ€νν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ λ°μ΄ν°λ² μ΄μ€ κ΄λ¦¬ μμ , λ°μ΄ν° λκΈ°ν, λ°μ΄ν° μ λ°μ΄νΈ λ± λ€μν μμ μ μλνν μ μμ΅λλ€.
μ€λΌν΄ μ€μΌμ€λ¬λ λ°μ΄ν°λ² μ΄μ€ κ΄λ¦¬ μμ μ ν¨μ¨μ μΌλ‘ μλννκΈ° μν κ°λ ₯ν λꡬμ λλ€. μμ μμ½κ³Ό κ΄λ¦¬, λ°λ³΅ μμ μμ½, μμΈ μ²λ¦¬μ μλ¦Ό λ±μ κΈ°λ₯μ μ 곡νμ¬ λ°μ΄ν°λ² μ΄μ€ μ΄μκ³Ό μ μ§λ³΄μ μμ μ ν¨μ¨μ μΌλ‘ μνν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μμ μ μμ μ±κ³Ό μ λ’°μ±μ λμΌ μ μμΌλ©°, κΈ°μ μ μ 무 ν¨μ¨μ±μ ν₯μμν¬ μ μμ΅λλ€.
λ°μ΄ν°λ² μ΄μ€ λλ νΉμ μμ μ μλνλ₯Ό μν΄ μ¬μ©λλ λꡬ
μ€λΌν΄ μ€μΌμ€λ¬
μ€λΌν΄ μ€μΌμ€λ¬λ λ°μ΄ν°λ² μ΄μ€ λλ νΉμ μμ μ μλννκΈ° μν΄ μ¬μ©λλ κ°λ ₯ν λꡬμ λλ€. μ΄ λꡬλ₯Ό μ¬μ©νμ¬ μμ μ μμ½νκ³ κ΄λ¦¬ν μ μμΌλ©°, λ€μν κΈ°λ₯μ μ 곡νμ¬ λ°μ΄ν°λ² μ΄μ€ κ΄λ¦¬ μμ μ ν¨μ¨μ μΌλ‘ μνν μ μμ΅λλ€.
μμ μμ½κ³Ό κ΄λ¦¬
μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©νλ©΄ νΉμ μκ°λμ μμ μ μμ½νκ³ μλμΌλ‘ μ€νν μ μμ΅λλ€. μλ₯Ό λ€μ΄, λ§€μΌ μλ²½μ λ°μ΄ν°λ² μ΄μ€λ₯Ό λ°±μ νκ³ , μ£Όκ° λ³΄κ³ μλ₯Ό μμ±νλ μμ μ μμ½ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μΌμμ μΈ μμ μ μλννμ¬ μκ°κ³Ό μΈλ ₯μ μ μ½ν μ μμ΅λλ€. λν, μ€μΌμ€λ¬λ₯Ό ν΅ν΄ μμ μ μ°μ μμμ μ€ν μ£ΌκΈ° λ±μ μ€μ νμ¬ κ΄λ¦¬ν μ μμ΅λλ€.
λ°λ³΅ μμ μμ½
μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ μμ μ μ£ΌκΈ°μ μΌλ‘ λ°λ³΅νμ¬ μμ½ν μ μμ΅λλ€. 맀주, 맀μ νΉμ λ μ§μ μκ°μ μμ μ μ€ννλλ‘ μμ½ν μ μμΌλ©°, μ£ΌκΈ° μ€μ μ ν΅ν΄ μ νν λμ μ£ΌκΈ°λ₯Ό μ‘°μ ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ λ°λ³΅μ μΈ μμ μ ν¨μ¨μ μΌλ‘ μ²λ¦¬ν μ μμ΅λλ€.
μμΈ μ²λ¦¬μ μλ¦Ό
μ€μΌμ€λ¬λ₯Ό μ¬μ©νλ©΄ μμΈ μν©μ λν μ²λ¦¬ λ°©λ²μ μ μν μ μμ΅λλ€. μμ μ€ν μ€ μλ¬κ° λ°μνκ±°λ μμ μ΄ μ ν μκ°μ μ΄κ³Όν κ²½μ° μλ¦Όμ λ°μ μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μμΈ μν©μ λν λΉ λ₯Έ λμμ΄ κ°λ₯νλ©°, μμ μ μμ μ±κ³Ό μ λ’°μ±μ ν₯μμν¬ μ μμ΅λλ€.
λ€μν μμ μ ν μ§μ
μ€λΌν΄ μ€μΌμ€λ¬λ λ€μν μμ μ νμ μ§μν©λλ€. SQL λ¬Έμ₯, PL/SQL νλ‘μμ , λ°μ΄ν°λ² μ΄μ€ μμ , μ΄μ체μ λͺ λ Ή λ± λ€μν μμ μ μμ½νκ³ μ€νν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ λ°μ΄ν°λ² μ΄μ€ κ΄λ¦¬ μμ , λ°μ΄ν° λκΈ°ν, λ°μ΄ν° μ λ°μ΄νΈ λ± λ€μν μμ μ μλνν μ μμ΅λλ€.
μ€λΌν΄ μ€μΌμ€λ¬λ λ°μ΄ν°λ² μ΄μ€ κ΄λ¦¬ μμ μ ν¨μ¨μ μΌλ‘ μλννκΈ° μν κ°λ ₯ν λꡬμ λλ€. μμ μμ½κ³Ό κ΄λ¦¬, λ°λ³΅ μμ μμ½, μμΈ μ²λ¦¬μ μλ¦Ό λ±μ κΈ°λ₯μ μ 곡νμ¬ λ°μ΄ν°λ² μ΄μ€ μ΄μκ³Ό μ μ§λ³΄μ μμ μ ν¨μ¨μ μΌλ‘ μνν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μμ μ μμ μ±κ³Ό μ λ’°μ±μ λμΌ μ μμΌλ©°, κΈ°μ μ μ 무 ν¨μ¨μ±μ ν₯μμν¬ μ μμ΅λλ€.
2. μ€λΌν΄ μ€μΌμ€λ¬ μ€μ νκΈ°
μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ μμ μ μλμΌλ‘ μμ½νκ³ μ€ννκΈ° μν΄μλ μ€μΌμ€λ¬λ₯Ό μ€μ ν΄μΌ ν©λλ€. μ€λΌν΄ μ€μΌμ€λ¬ μ€μ μ λ€μκ³Ό κ°μ λ¨κ³λ₯Ό λ°λ¦ λλ€.
2.1 μ€μΌμ€λ¬ νμ±ν
μ€λΌν΄ λ°μ΄ν°λ² μ΄μ€μμ μ€μΌμ€λ¬κ° λΉνμ±νλμ΄ μλ€λ©΄, λ¨Όμ μ€μΌμ€λ¬λ₯Ό νμ±νν΄μΌ ν©λλ€. μ€μΌμ€λ¬λ₯Ό νμ±ννλ €λ©΄ λ€μ SQL λ¬Έμ₯μ μ€ννλ©΄ λ©λλ€.
BEGIN
DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE('SCHEDULER_DISABLED', 'FALSE');
END;
/
μ΄ λͺ λ Ήμ μ€ννλ©΄ μ€μΌμ€λ¬κ° νμ±νλ©λλ€.
2.2 μ‘ ν΄λμ€ μμ±
μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ μμ½νκ³ μ νλ μμ μ λ¨μμΈ μ‘(Job) ν΄λμ€λ₯Ό μμ±ν΄μΌ ν©λλ€. μ‘ ν΄λμ€λ λμΌν μμ μ νμ κ°μ§ μμ λ€μ κ·Έλ£Ήννκ³ κ΄λ¦¬νκΈ° μν΄ μ¬μ©λ©λλ€. λ€μ SQL λ¬Έμ₯μ μ¬μ©νμ¬ μ‘ ν΄λμ€λ₯Ό μμ±ν μ μμ΅λλ€.
BEGIN
DBMS_SCHEDULER.CREATE_JOB_CLASS(
job_class_name => 'MY_JOB_CLASS',
resource_consumer_group => 'DEFAULT_CONSUMER_GROUP',
comments => 'This is my job class'
);
END;
/
μ μμ μμ 'MY_JOB_CLASS'λ μ‘ ν΄λμ€μ μ΄λ¦μ λλ€. νμμ λ°λΌ μ΄λ¦μ λ³κ²½ν μ μμ΅λλ€. 'DEFAULT_CONSUMER_GROUP'μ μ‘ ν΄λμ€κ° μ¬μ©ν 리μμ€ μ»¨μλ¨Έ κ·Έλ£Ήμ μ΄λ¦μ λλ€. λν, νμμ λ°λΌ μ£Όμμ μΆκ°ν μ μμ΅λλ€.
2.3 μ€μΌμ€ μμ±
μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ μμ½νκ³ μ νλ μμ μ μ€μΌμ€ μμ±μ ν΅ν΄ λ±λ‘ν©λλ€. μ€μΌμ€μ μμ μ΄ μ€νλ μκ°λμ μ£ΌκΈ°λ₯Ό μ§μ νλλ° μ¬μ©λ©λλ€. λ€μμ μ€μΌμ€μ μμ±νλ μμ μ½λμ λλ€.
BEGIN
DBMS_SCHEDULER.CREATE_SCHEDULE(
schedule_name => 'DAILY_SCHEDULE',
repeat_interval => 'FREQ=DAILY; BYHOUR=2; BYMINUTE=0; BYSECOND=0',
start_date => SYSTIMESTAMP,
end_date => NULL,
comments => 'This is a daily schedule'
);
END;
/
μ μμ μμ 'DAILY_SCHEDULE'μ μ€μΌμ€μ μ΄λ¦μ λλ€. νμμ λ°λΌ μ΄λ¦μ λ³κ²½ν μ μμ΅λλ€. 'FREQ=DAILY; BYHOUR=2; BYMINUTE=0; BYSECOND=0'λ λ§€μΌ μλ²½ 2μμ μμ μ μ€ννλλ‘ μ€μΌμ€μ μ€μ ν©λλ€. μ΄νμ νμμ λ°λΌ μμμΌκ³Ό μ’ λ£μΌμ μ€μ ν μ μμΌλ©°, μ£Όμμ μΆκ°ν μλ μμ΅λλ€.
2.4 μ‘ μμ±
λ§μ§λ§μΌλ‘, μ€μΌμ€μ μ°κ²°λλ μμ μΈ μ‘(Job)μ μμ±ν©λλ€. μ‘μ μ€μ λ‘ μ€νλ SQL λ¬Έμ₯, PL/SQL μ½λ, λ°μ΄ν°λ² μ΄μ€ μμ λ±μ μ μνλλ° μ¬μ©λ©λλ€. λ€μμ μ‘μ μμ±νλ μμ μ½λμ λλ€.
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'MY_JOB',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN MY_PROCEDURE; END;',
job_class => 'MY_JOB_CLASS',
schedule_name => 'DAILY_SCHEDULE',
enabled => TRUE,
comments => 'This is my job'
);
END;
/
μ μμ μμ 'MY_JOB'μ μ‘μ μ΄λ¦μ λλ€. νμμ λ°λΌ μ΄λ¦μ λ³κ²½ν μ μμ΅λλ€. 'PLSQL_BLOCK'μ μ‘μ μ νμΌλ‘ PL/SQL μ½λ λΈλ‘μ μ€ννλλ‘ μ§μ ν©λλ€. 'BEGIN MY_PROCEDURE; END;'λ μ€νλ PL/SQL μ½λ λΈλ‘μ λλ€. 'MY_JOB_CLASS'λ μμ μμ±ν μ‘ ν΄λμ€μ μ΄λ¦μΌλ‘, μ‘μ ν΄λΉ μ‘ ν΄λμ€μ μνλλ‘ μ§μ ν©λλ€. 'DAILY_SCHEDULE'μ μμ μμ±ν μ€μΌμ€μ μ΄λ¦μΌλ‘, μ‘μ΄ ν΄λΉ μ€μΌμ€μ μ°κ²°λλλ‘ μ§μ ν©λλ€. μ΄νμ νμμ λ°λΌ μ‘μ νμ±ν μ¬λΆμ μ£Όμμ μΆκ°ν μ μμ΅λλ€.
μ΄λ κ² μ€μΌμ€λ¬λ₯Ό μ€μ νλ©΄ μμ μ μλμΌλ‘ μμ½νκ³ μ€νν μ μμ΅λλ€. μ μμ μ½λλ₯Ό νμμ λ°λΌ μμ νμ¬ λλ§μ μ€μΌμ€λ¬λ₯Ό μ€μ ν΄λ³΄μΈμ.
- μ€λΌν΄ λ°μ΄ν°λ² μ΄μ€μ μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό νμ±ννλ λ°©λ²
μ€λΌν΄ λ°μ΄ν°λ² μ΄μ€μμ μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό νμ±ννκΈ° μν΄μλ λ€μκ³Ό κ°μ λ¨κ³λ₯Ό λ°λ₯΄λ©΄ λ©λλ€.
1. DBMS_SCHEDULER μ€μ νμΈ
λ¨Όμ , λ°μ΄ν°λ² μ΄μ€μμ DBMS_SCHEDULER μ€μ μ νμΈν΄μΌ ν©λλ€. DBMS_SCHEDULERλ μ€λΌν΄ μ€μΌμ€λ¬μ λν μΈν°νμ΄μ€λ₯Ό μ 곡νλ ν¨ν€μ§μ λλ€. μ€μ μ νμΈνκΈ° μν΄ λ€μ SQL λ¬Έμ₯μ μ€νν©λλ€.
SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Scheduler'
μ΄ λͺ λ Ήμ μ€ννλ©΄ 'TRUE' λλ 'FALSE'λΌλ κ²°κ³Όκ° λ°νλ©λλ€. 'TRUE'λ μ€μΌμ€λ¬κ° νμ±νλμ΄ μλ μνλ₯Ό λνλ΄λ©°, 'FALSE'λ λΉνμ±νλμ΄ μλ μνλ₯Ό λνλ λλ€.
2. μ€μΌμ€λ¬ νμ±ν
μ€μΌμ€λ¬κ° λΉνμ±νλμ΄ μλ€λ©΄, μ€μΌμ€λ¬λ₯Ό νμ±νν΄μΌ ν©λλ€. μ€μΌμ€λ¬λ₯Ό νμ±ννλ €λ©΄ SYSDBA κΆνμΌλ‘ λ°μ΄ν°λ² μ΄μ€μ μ μν ν λ€μ SQL λ¬Έμ₯μ μ€νν©λλ€.
BEGIN
DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE('SCHEDULER_DISABLED', 'FALSE');
END;
/
μ λͺ λ Ήμ μ€ννλ©΄ μ€μΌμ€λ¬κ° νμ±νλ©λλ€. μΆκ°μ μΈ μ€μ μ΄ νμνμ§ μμΌλ©°, μ΄μ μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ μμ μ μμ½νκ³ μ€νν μ μμ΅λλ€.
3. μ€μΌμ€λ¬ νμ±ν μ¬λΆ νμΈ
μ€μΌμ€λ¬κ° μ μμ μΌλ‘ νμ±νλμλμ§ νμΈνκΈ° μν΄ λ€μ DBMS_SCHEDULER μ€μ μ νμΈν©λλ€. μμμμ κ°μ΄ λ€μ SQL λ¬Έμ₯μ μ€ννμ¬ μ€μΌμ€λ¬μ μνλ₯Ό νμΈν μ μμ΅λλ€.
SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Scheduler'
μ΄μ 'TRUE'λΌλ κ²°κ³Όκ° λ°νλλ€λ©΄ μ€μΌμ€λ¬κ° νμ±νλμμμ μλ―Έν©λλ€.
μ΄λ κ² μ€μΌμ€λ¬λ₯Ό νμ±ννκ³ μ€μ νμ¬ λ°μ΄ν°λ² μ΄μ€μμ μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©ν μ μμ΅λλ€. μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ μμ μ μμ½νκ³ μ€ννλ €λ©΄ μΆκ°μ μΈ μμ κ³Ό μ€μ μ΄ νμν©λλ€.
- μ€μΌμ€λ¬λ₯Ό μν νμ κ΅¬μ± μμ λ° μ€μ
μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©νκΈ° μν΄μλ λͺ κ°μ§ νμ κ΅¬μ± μμμ μ€μ μ΄ νμν©λλ€. μλλ μ€μΌμ€λ¬λ₯Ό μν νμ κ΅¬μ± μμμ μ€μ μ λν μ€λͺ μ λλ€.
1. μ‘ ν΄λμ€(Job Class)
μ‘ ν΄λμ€λ μ€μΌμ€λ¬ λ΄μμ μμ λ€μ κ·Έλ£Ήννκ³ κ΄λ¦¬νκΈ° μν κ΅¬μ± μμμ λλ€. μ‘ ν΄λμ€λ₯Ό μμ±νλ©΄ μ μ¬ν μμ λ€μ λμΌν ν΄λμ€μ μνλλ‘ κ·Έλ£Ήνν μ μμ΅λλ€. μ‘ ν΄λμ€λ₯Ό μμ±νκΈ° μν΄μλ λ€μ SQL λ¬Έμ₯μ μ¬μ©ν©λλ€.
BEGIN
DBMS_SCHEDULER.CREATE_JOB_CLASS(
job_class_name => 'MY_JOB_CLASS',
resource_consumer_group => 'DEFAULT_CONSUMER_GROUP',
comments => 'This is my job class'
);
END;
/
job_class_name
μ μ‘ ν΄λμ€μ μ΄λ¦μ μ§μ νλ©°, νμμ λ°λΌ λ³κ²½ν μ μμ΅λλ€. resource_consumer_group
μ μ‘ ν΄λμ€μ μν μμ
λ€μ΄ μ¬μ©ν 리μμ€ μ»¨μλ¨Έ κ·Έλ£Ήμ μ§μ ν©λλ€. comments
λ μ£Όμμ μΆκ°ν μ μλ μ΅μ
μ
λλ€.
2. μ€μΌμ€(Schedule)
μ€μΌμ€μ μμ
μ΄ μ€νλλ μκ°κ³Ό μ£ΌκΈ°λ₯Ό μ€μ νλ κ΅¬μ± μμμ
λλ€. μμ
μ μμ½ν λ μ€μΌμ€μ μ¬μ©νμ¬ μμ
μ΄ μΈμ μ€νλ μ§ μ€μ ν μ μμ΅λλ€. μ€μΌμ€μ CREATE_SCHEDULE
νλ‘μμ λ₯Ό μ¬μ©νμ¬ μμ±ν©λλ€.
BEGIN
DBMS_SCHEDULER.CREATE_SCHEDULE(
schedule_name => 'DAILY_SCHEDULE',
repeat_interval => 'FREQ=DAILY; BYHOUR=2; BYMINUTE=0; BYSECOND=0',
start_date => SYSTIMESTAMP,
end_date => NULL,
comments => 'This is a daily schedule'
);
END;
/
schedule_name
μ μ€μΌμ€μ μ΄λ¦μ μ§μ ν©λλ€. repeat_interval
μ μμ
μ΄ λ°λ³΅λ μ£ΌκΈ°λ₯Ό μ€μ ν©λλ€. start_date
λ μ€μΌμ€μ΄ μμλλ μΌμλ₯Ό μ§μ νλ©°, νμμ λ°λΌ λ³κ²½ν μ μμ΅λλ€. end_date
λ μ€μΌμ€μ΄ μ’
λ£λλ μΌμλ₯Ό μ§μ νλ μ΅μ
μ΄λ©° NULL
λ‘ μ€μ νλ©΄ μ€μΌμ€μ μ’
λ£μΌμ μμμ μλ―Έν©λλ€. comments
λ μ£Όμμ μΆκ°ν μ μλ μ΅μ
μ
λλ€.
3. μμ (Job)
μμ
μ μ€μ λ‘ μ€νλ λ΄μ©μ μ μνλ κ΅¬μ± μμλ‘, μ€μΌμ€μ μν΄ μμ½λ μμ
μ
λλ€. μμ
μ νΉμ μ ν(PL/SQL λΈλ‘, μ€ν¬λ¦½νΈ, λ°μ΄ν°λ² μ΄μ€ μμ
λ±)κ³Ό μ€νν λ΄μ©μ μ§μ ν΄μΌ ν©λλ€. μμ
μ CREATE_JOB
νλ‘μμ λ₯Ό μ¬μ©νμ¬ μμ±ν©λλ€.
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'MY_JOB',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN MY_PROCEDURE; END;',
job_class => 'MY_JOB_CLASS',
schedule_name => 'DAILY_SCHEDULE',
enabled => TRUE,
comments => 'This is my job'
);
END;
/
job_name
μ μμ
μ μ΄λ¦μ μ§μ ν©λλ€. job_type
μ μμ
μ μ νμ μ§μ ν©λλ€. job_action
μ μμ
μ΄ μ€νν λ΄μ©(PL/SQL μ½λ, μ€ν¬λ¦½νΈ λ±)μ μ§μ ν©λλ€. job_class
λ μμ
μ΄ μν μ‘ ν΄λμ€λ₯Ό μ§μ ν©λλ€. schedule_name
μ μμ
μ΄ μ°κ²°λ μ€μΌμ€μ μ΄λ¦μ μ§μ ν©λλ€. enabled
λ μμ
μ΄ νμ±ν μνμΈμ§ μ¬λΆλ₯Ό μ€μ νλ μ΅μ
μ
λλ€. comments
λ μ£Όμμ μΆκ°ν μ μλ μ΅μ
μ
λλ€.
μ΄λ¬ν κ΅¬μ± μμμ μ€μ μ νμ©νμ¬ μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό ν¨κ³Όμ μΌλ‘ μ¬μ©ν μ μμ΅λλ€. νμμ λ°λΌ μ μ½λλ₯Ό μμ νκ³ μΆκ°μ μΈ μ΅μ λ€μ μ¬μ©ν΄λ³΄μΈμ.
μ€μΌμ€λ¬λ₯Ό μν νμ κ΅¬μ± μμ λ° μ€μ
μ€μΌμ€λ¬λ₯Ό μ¬μ©νκΈ° μν΄μλ λͺ κ°μ§ νμ κ΅¬μ± μμμ μ€μ μ΄ νμν©λλ€. μ΄ μΉμ μμλ μ€μΌμ€λ¬λ₯Ό μν νμ κ΅¬μ± μμμ μ€μ μ λν΄ μμΈν μ€λͺ νκ² μ΅λλ€.
- μ‘ ν΄λμ€(Job Class)
μ‘ ν΄λμ€λ μ€μΌμ€λ¬ λ΄μμ μμ λ€μ κ·Έλ£Ήννκ³ κ΄λ¦¬νκΈ° μν κ΅¬μ± μμμ λλ€. μ‘ ν΄λμ€λ₯Ό μμ±νλ©΄ μ μ¬ν μμ λ€μ λμΌν ν΄λμ€μ μνλλ‘ κ·Έλ£Ήνν μ μμ΅λλ€.
BEGIN
DBMS_SCHEDULER.CREATE_JOB_CLASS(
job_class_name => 'MY_JOB_CLASS',
resource_consumer_group => 'DEFAULT_CONSUMER_GROUP',
comments => 'This is my job class'
);
END;
/
μμ μμμμ job_class_name
μ μ‘ ν΄λμ€μ μ΄λ¦μ μ§μ ν©λλ€. resource_consumer_group
μ μ‘ ν΄λμ€μ μν μμ
λ€μ΄ μ¬μ©ν 리μμ€ μ»¨μλ¨Έ κ·Έλ£Ήμ μ§μ ν©λλ€. comments
λ μ£Όμμ μΆκ°νλ μ©λλ‘ μ¬μ©λλ©°, μ ν μ¬νμ
λλ€.
- μ€μΌμ€(Schedule)
μ€μΌμ€μ μμ μ΄ μ€νλλ μκ°κ³Ό μ£ΌκΈ°λ₯Ό μ€μ νλ κ΅¬μ± μμμ λλ€. μμ μ μμ½ν λ μ€μΌμ€μ μ¬μ©νμ¬ μμ μ΄ μΈμ μ€νλ μ§ μ€μ ν μ μμ΅λλ€.
BEGIN
DBMS_SCHEDULER.CREATE_SCHEDULE(
schedule_name => 'DAILY_SCHEDULE',
repeat_interval => 'FREQ=DAILY; BYHOUR=2; BYMINUTE=0; BYSECOND=0',
start_date => SYSTIMESTAMP,
end_date => NULL,
comments => 'This is a daily schedule'
);
END;
/
μμ μμμμ schedule_name
μ μ€μΌμ€μ μ΄λ¦μ μ§μ ν©λλ€. repeat_interval
μ μμ
μ΄ λ°λ³΅λ μ£ΌκΈ°λ₯Ό μ€μ ν©λλ€. start_date
λ μ€μΌμ€μ΄ μμλλ μΌμλ₯Ό μ§μ νλ©°, νμμ λ°λΌ λ³κ²½ν μ μμ΅λλ€. end_date
λ μ€μΌμ€μ΄ μ’
λ£λλ μΌμλ₯Ό μ§μ νλ μ΅μ
μ
λλ€. comments
λ μ£Όμμ μΆκ°νλ μ©λλ‘ μ¬μ©λλ©°, μ ν μ¬νμ
λλ€.
- μμ (Job)
μμ μ μ€μ λ‘ μ€νλ λ΄μ©μ μ μνλ κ΅¬μ± μμλ‘, μ€μΌμ€μ μν΄ μμ½λ μμ μ λλ€. μμ μ νΉμ μ ν(PL/SQL λΈλ‘, μ€ν¬λ¦½νΈ, λ°μ΄ν°λ² μ΄μ€ μμ λ±)κ³Ό μ€νν λ΄μ©μ μ§μ ν΄μΌ ν©λλ€.
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'MY_JOB',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN MY_PROCEDURE; END;',
job_class => 'MY_JOB_CLASS',
schedule_name => 'DAILY_SCHEDULE',
enabled => TRUE,
comments => 'This is my job'
);
END;
/
μμ μμμμ job_name
μ μμ
μ μ΄λ¦μ μ§μ ν©λλ€. job_type
μ μμ
μ μ νμ μ§μ ν©λλ€. job_action
μ μμ
μ΄ μ€νν λ΄μ©(PL/SQL μ½λ, μ€ν¬λ¦½νΈ λ±)μ μ§μ ν©λλ€. job_class
λ μμ
μ΄ μν μ‘ ν΄λμ€λ₯Ό μ§μ ν©λλ€. schedule_name
μ μμ
μ΄ μ°κ²°λ μ€μΌμ€μ μ΄λ¦μ μ§μ ν©λλ€. enabled
λ μμ
μ΄ νμ±ν μνμΈμ§ μ¬λΆλ₯Ό μ€μ νλ μ΅μ
μ
λλ€. comments
λ μ£Όμμ μΆκ°νλ μ©λλ‘ μ¬μ©λλ©°, μ ν μ¬νμ
λλ€.
μμμ μ€λͺ ν κ΅¬μ± μμμ μ€μ μ νμ©νμ¬ μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό ν¨κ³Όμ μΌλ‘ μ¬μ©ν μ μμ΅λλ€. νμμ λ°λΌ μ½λλ₯Ό μμ νκ³ μΆκ°μ μΈ μ΅μ λ€μ μ¬μ©ν΄λ³΄μΈμ. μ΄λ¬ν μ€μ λ€μ ν΅ν΄ μμ μ μμ½νκ³ μ€νν μ μκ² λ©λλ€.
3. μ€λΌν΄ μ€μΌμ€λ¬ μμ½ μμ μμ±νκΈ°
μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ μμ½λ μμ μ μμ±νλ λ°©λ²μ λν΄ μμλ³΄κ² μ΅λλ€. μμ½λ μμ μ νΉμ μκ° λλ μ£ΌκΈ°μ λ§μΆ° μλμΌλ‘ μ€νλλλ‘ μ€μ λ©λλ€.
μμ μ ν μ ν
λ¨Όμ , μμ½ μμ μ μ νμ μ νν΄μΌ ν©λλ€. μ€λΌν΄ μ€μΌμ€λ¬λ λ€μν μμ μ νμ μ§μν©λλ€. μΌλ°μ μΌλ‘ μ¬μ©λλ λ κ°μ§ μμ μ νμ "PL/SQL λΈλ‘"κ³Ό "μ€ν¬λ¦½νΈ"μ λλ€.
- PL/SQL λΈλ‘ μμ μ ν μμ:
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'MY_JOB',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN MY_PROCEDURE; END;',
enabled => TRUE,
comments => 'This is my job'
);
END;
/
- μ€ν¬λ¦½νΈ μμ μ ν μμ:
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'MY_JOB',
job_type => 'EXECUTABLE',
job_action => '/path/to/my_script.sh',
enabled => TRUE,
comments => 'This is my job'
);
END;
/
μμ μμμμ job_name
μ μμ
μ μ΄λ¦μ μ§μ ν©λλ€. job_type
μ μμ
μ μ νμ μ§μ ν©λλ€. job_action
μ μμ
μ΄ μ€νν λ΄μ©μ μ§μ ν©λλ€. enabled
λ μμ
μ΄ νμ±ν μνμΈμ§ μ¬λΆλ₯Ό μ€μ νλ μ΅μ
μ
λλ€. comments
λ μ£Όμμ μΆκ°ν μ μλ μ΅μ
μ
λλ€.
μ€μΌμ€ μ§μ
μμ½ μμ
μλ μΈμ μμ
μ΄ μ€νλ μ§λ₯Ό μ§μ ν΄μΌ ν©λλ€. μ€μΌμ€μ CREATE_SCHEDULE
νλ‘μμ λ₯Ό μ¬μ©νμ¬ μμ±λ©λλ€.
BEGIN
DBMS_SCHEDULER.CREATE_SCHEDULE(
schedule_name => 'DAILY_SCHEDULE',
repeat_interval => 'FREQ=DAILY; BYHOUR=2; BYMINUTE=0; BYSECOND=0',
start_date => SYSTIMESTAMP,
end_date => NULL,
comments => 'This is a daily schedule'
);
END;
/
μμ μμμμ schedule_name
μ μ€μΌμ€μ μ΄λ¦μ μ§μ ν©λλ€. repeat_interval
μ μμ
μ΄ λ°λ³΅λ μ£ΌκΈ°λ₯Ό μ€μ ν©λλ€. start_date
λ μ€μΌμ€μ΄ μμλλ μΌμλ₯Ό μ§μ νλ©°, νμμ λ°λΌ λ³κ²½ν μ μμ΅λλ€. end_date
λ μ€μΌμ€μ΄ μ’
λ£λλ μΌμλ₯Ό μ§μ νλ μ΅μ
μ
λλ€. comments
λ μ£Όμμ μΆκ°ν μ μλ μ΅μ
μ
λλ€.
μμ κ³Ό μ€μΌμ€ μ°κ²°
μμ±ν μμ
κ³Ό μ€μΌμ€μ μ°κ²°νμ¬ μ€μΌμ€μ μν΄ μμ
μ΄ μμ½λλλ‘ μ€μ ν΄μΌ ν©λλ€. μ΄λ CREATE_JOB
νλ‘μμ λ₯Ό μ¬μ©νμ¬ μνλ©λλ€.
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'MY_JOB',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN MY_PROCEDURE; END;',
schedule_name => 'DAILY_SCHEDULE',
enabled => TRUE,
comments => 'This is my job'
);
END;
/
μμ μμμμ job_name
μ μμ
μ μ΄λ¦μ μ§μ ν©λλ€. job_type
μ μμ
μ μ νμ μ§μ ν©λλ€. job_action
μ μμ
μ΄ μ€νν λ΄μ©μ μ§μ ν©λλ€. schedule_name
μ μμ
μ΄ μ°κ²°λ μ€μΌμ€μ μ΄λ¦μ μ§μ ν©λλ€. enabled
λ μμ
μ΄ νμ±ν μνμΈμ§ μ¬λΆλ₯Ό μ€μ νλ μ΅μ
μ
λλ€. comments
λ μ£Όμμ μΆκ°ν μ μλ μ΅μ
μ
λλ€.
μμ μ€ν νμΈ
μμ
μ΄ μ μμ μΌλ‘ μμ±λμλμ§ νμΈνκΈ° μν΄μλ DBA_SCHEDULER_JOBS
λ·°λ₯Ό 쿼리νλ©΄ λ©λλ€.
SELECT *
FROM DBA_SCHEDULER_JOBS
WHERE job_name = 'MY_JOB';
μμ μμμμ MY_JOB
κ³Ό κ°μ μμ
μ΄λ¦μ μμ μ μμ
μ΄λ¦μΌλ‘ λ³κ²½ν΄μΌ ν©λλ€.
μ΄μ κ°μ΄ μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ μμ½ μμ μ μμ±ν μ μμ΅λλ€. νμμ λ°λΌ μμ μ ν, μ€μΌμ€ λ° μμ μ€νμ λν μ€μ μ λ³κ²½νκ³ μΆκ°μ μΈ μ΅μ λ€μ μ¬μ©ν΄λ³΄μΈμ. μ΄λ₯Ό ν΅ν΄ μ€μΌμ€μ λ°λΌ μμ μ΄ μλμΌλ‘ μμ½λμ΄ μ€νλ μ μμ΅λλ€.
- μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ΄μ©νμ¬ μ£ΌκΈ°μ λλ νΉμ μκ°μ μμ μ μμ½νλ λ°©λ²
μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ μ£ΌκΈ°μ μΌλ‘ μμ μ μμ½νκ±°λ νΉμ μκ°μ μμ μ μμ½νλ λ°©λ²μ λν΄ μμλ³΄κ² μ΅λλ€.
μ£ΌκΈ°μ μμ μμ½νκΈ°
μ£ΌκΈ°μ μΌλ‘ μμ μ μμ½νκΈ° μν΄μ λ°λ³΅ μ£ΌκΈ°λ₯Ό μ€μ ν΄μΌ ν©λλ€. λ€μμ λ§€μΌ 10μμ μμ μ΄ μ€νλλλ‘ μμ½νλ μμ μ λλ€.
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'MY_JOB',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN MY_PROCEDURE; END;',
start_date => SYSTIMESTAMP,
repeat_interval => 'FREQ=DAILY; BYHOUR=10; BYMINUTE=0; BYSECOND=0;',
enabled => TRUE,
comments => 'This is a daily job'
);
END;
/
μμ μμ μμ repeat_interval
맀κ°λ³μμ 'FREQ=DAILY; BYHOUR=10; BYMINUTE=0; BYSECOND=0;'
μ κ°μ΄ μ£ΌκΈ°λ₯Ό μ€μ νμμ΅λλ€. μ΄ μ€μ μ λ§€μΌ 10μ 0λΆ 0μ΄μ μμ
μ΄ μ€νλλλ‘ ν©λλ€.
νΉμ μκ°μ μμ μμ½νκΈ°
νΉμ μκ°μ μμ μ μμ½νκΈ° μν΄μ μμ μΌμλ₯Ό μ€μ ν΄μΌ ν©λλ€. λ€μμ 2022λ 1μ 1μΌ μ€μ 9μμ μμ μ΄ μ€νλλλ‘ μμ½νλ μμ μ λλ€.
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'MY_JOB',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN MY_PROCEDURE; END;',
start_date => TO_TIMESTAMP('2022-01-01 09:00:00', 'YYYY-MM-DD HH24:MI:SS'),
enabled => TRUE,
comments => 'This is a one-time job'
);
END;
/
μμ μμ μμ start_date
맀κ°λ³μμ TO_TIMESTAMP('2022-01-01 09:00:00', 'YYYY-MM-DD HH24:MI:SS')
μ κ°μ΄ μμ μΌμλ₯Ό μ€μ νμμ΅λλ€. μ΄ μ€μ μ 2022λ
1μ 1μΌ μ€μ 9μμ μμ
μ΄ μ€νλλλ‘ ν©λλ€.
μμ μμ½ νμΈνκΈ°
μμ
μ΄ μ μμ μΌλ‘ μμ½λμλμ§ νμΈνκΈ° μν΄ DBA_SCHEDULER_JOBS
λ·°λ₯Ό 쿼리νλ©΄ λ©λλ€. λ€μμ μμ½λ μμ
μ νμΈνλ μμ μ
λλ€.
SELECT *
FROM DBA_SCHEDULER_JOBS
WHERE job_name = 'MY_JOB';
μμ μμ μμ MY_JOB
κ³Ό κ°μ μμ
μ΄λ¦μ μμ μ μμ
μ΄λ¦μΌλ‘ λ³κ²½ν΄μΌ ν©λλ€.
μ΄μ κ°μ΄ μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ μ£ΌκΈ°μ μΌλ‘ λλ νΉμ μκ°μ μμ μ μμ½ν μ μμ΅λλ€. μ£ΌκΈ°μ μΈ μμ μ μμ½ν λλ λ°λ³΅ μ£ΌκΈ°λ₯Ό μ€μ νκ³ , νΉμ μκ°μ μμ μ μμ½ν λλ μμ μΌμλ₯Ό μ€μ νλ©΄ λ©λλ€. νμμ λ°λΌ μμ μ ν, μ€μΌμ€ λ° μμ μ€νμ λν μ€μ μ λ³κ²½νκ³ μΆκ°μ μΈ μ΅μ λ€μ μ¬μ©ν΄λ³΄μΈμ. μ΄λ₯Ό ν΅ν΄ μ€μΌμ€μ λ°λΌ μμ μ΄ μλμΌλ‘ μμ½λμ΄ μ€νλ μ μμ΅λλ€.
- μμ μ μ’ λ₯μ μμ½ λ°©λ²μ λν μ€λͺ
μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ μμ½ μμ μ μμ±νκΈ° μν΄μλ μμ μ μ’ λ₯μ μμ½ λ°©λ²μ μμμΌ ν©λλ€. μ΄λ² λ¨λ½μμλ μμ μ μ’ λ₯μ μμ½ λ°©λ²μ λν΄ μμΈνκ² μ€λͺ νκ² μ΅λλ€.
μμ μ μ’ λ₯
μ€λΌν΄ μ€μΌμ€λ¬λ λ€μν μμ μ νμ μ§μν©λλ€. μ£Όλ‘ μ¬μ©λλ μμ μ νμ λ€μκ³Ό κ°μ΅λλ€:
1. PL/SQL λΈλ‘
PL/SQL λΈλ‘μ κ°μ₯ μΌλ°μ μΌλ‘ μ¬μ©λλ μμ μ νμ λλ€. PL/SQL λΈλ‘μ μ¬μ©νμ¬ Oracle λ°μ΄ν°λ² μ΄μ€μμ μ€νν λ‘μ§μ μμ±ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, νλ‘μμ λ ν¨μλ₯Ό νΈμΆνκ±°λ DML λ¬Έμ μ€ννλ λ± λ€μν μμ μ μνν μ μμ΅λλ€.
2. μ€ν¬λ¦½νΈ
μ€ν¬λ¦½νΈ μμ μ νμ μΈλΆ μ€ν¬λ¦½νΈ νμΌμ μ€ννλ μμ μ μ§μ ν λ μ¬μ©λ©λλ€. μΈλΆ μ€ν¬λ¦½νΈ νμΌμ λ°μ΄ν°λ² μ΄μ€ μλ²μμ μ€νλ μ μλ μΈμ΄λ‘ μμ±λ μ μμΌλ©°, μλ₯Ό λ€μ΄ Shell μ€ν¬λ¦½νΈλ Perl μ€ν¬λ¦½νΈ λ±μ μ€νν μ μμ΅λλ€.
3. λ°μ΄ν° νν
λ°μ΄ν° νν μμ μ νμ λ°μ΄ν°λ² μ΄μ€ κ°μ²΄λ ν μ΄λΈμ λ°±μ , 볡μ, μ΄λ λ±κ³Ό κ°μ λ°μ΄ν° κ΄λ ¨ μμ μ μνν λ μ¬μ©λ©λλ€. λ°μ΄ν°λ₯Ό μμΆνκ±°λ μνΈννλ λ±μ μΆκ° μμ λ μ€μ ν μ μμ΅λλ€.
4. μλ° ν΄λμ€
μλ° ν΄λμ€ μμ μ νμ μλ° μΈμ΄λ‘ μμ±λ ν΄λμ€λ₯Ό μ€ννλ μμ μ μ§μ ν λ μ¬μ©λ©λλ€. μ΄ μμ μ νμ μ¬μ©νλ €λ©΄ Oracle λ°μ΄ν°λ² μ΄μ€μ μλ° μ€ν νκ²½μ΄ μ€μ λμ΄ μμ΄μΌ ν©λλ€.
μμ μμ½ λ°©λ²
μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ μμ½ μμ μ μμ±νκΈ° μν΄μλ μμ μ μμ½νκΈ° μν μ€μΌμ€μ μμ±ν΄μΌ ν©λλ€. μ£Όλ‘ μ¬μ©λλ μμ½ λ°©λ²μ λ€μκ³Ό κ°μ΅λλ€:
1. μ£ΌκΈ°μ μμ½
μ£ΌκΈ°μ μμ½μ μμ μ μΌμ ν μ£ΌκΈ°λ‘ λ°λ³΅νμ¬ μ€ννλλ‘ μ€μ νλ λ°©λ²μ λλ€. μλ₯Ό λ€μ΄, 맀μΌ, 맀 μ£Ό, 맀 μ λ± μ κΈ°μ μΌλ‘ λ°λ³΅λλ μμ μ μμ½ν μ μμ΅λλ€. λ°λ³΅ μ£ΌκΈ°λ₯Ό μ€μ νμ¬ μμ μ΄ μ€νλ μμ μ μ§μ νλ©΄ λ©λλ€.
2. νΉμ μκ° μμ½
νΉμ μκ° μμ½μ μμ μ νΉμ ν λ μ§μ μκ°μ μ€ννλλ‘ μ€μ νλ λ°©λ²μ λλ€. μλ₯Ό λ€μ΄, 2022λ 1μ 1μΌ μ€μ 10μμ μμ μ μ€ννλλ‘ μμ½ν μ μμ΅λλ€. μμ μΌμμ λ μΌμλ₯Ό μ€μ νμ¬ μμ μ΄ μ€νλ μμ μ μ§μ νλ©΄ λ©λλ€.
3. μΊλ¦°λ μμ½
μΊλ¦°λ μμ½μ μμ μ μΌλ°μ μΈ μ£ΌκΈ°λ νΉμ μκ°μ μμ½νλ κ² μ΄μΈμλ νΉμ ν λ μ§ λλ μμΌμλ§ μμ μ μ€ννλλ‘ μ€μ νλ λ°©λ²μ λλ€. μλ₯Ό λ€μ΄, 맀주 κΈμμΌ λλ μλ§μλ§ μμ μ μ€ννλλ‘ μμ½ν μ μμ΅λλ€. μΊλ¦°λ κ°μ²΄λ₯Ό μμ±νμ¬ μμ μ΄ μμ½λ μΌμλ₯Ό μ§μ νλ©΄ λ©λλ€.
μ΄μ²λΌ μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ μμ½ μμ μ μμ±νκΈ° μν΄μλ μμ μ μ’ λ₯μ μμ½ λ°©λ²μ μμμΌ ν©λλ€. μμ μ νμ λ°λΌ μμ μ μ μνκ³ μμ½ λ°©λ²μ λ°λΌ μ€μΌμ€μ μ€μ νμ¬ μμ μ μμ½ν μ μμ΅λλ€. νμμ λ°λΌ μΆκ°μ μΈ μ΅μ λ€μ μ¬μ©νμ¬ μΈλΆ μ€μ μ μ‘°μ ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μ€μΌμ€μ λ°λΌ μμ μ΄ μλμΌλ‘ μμ½λμ΄ μ€νλ μ μμ΅λλ€.
μμ μ μ’ λ₯μ μμ½ λ°©λ²μ λν μ€λͺ
μμ μ μ’ λ₯μ μμ½ λ°©λ²μ λν΄ μμλ³΄κ² μ΅λλ€.
μμ μ μ’ λ₯
μ€λΌν΄ μ€μΌμ€λ¬λ λ€μν μμ μ νμ μ§μν©λλ€. μΌλ°μ μΌλ‘ μ¬μ©λλ μμ μ νμ λ€μκ³Ό κ°μ΅λλ€:
1. PL/SQL λΈλ‘
PL/SQL λΈλ‘μ μ€λΌν΄ λ°μ΄ν°λ² μ΄μ€μμ μ€νλλ λ‘μ§μ μμ±νλ λ° μ¬μ©λ©λλ€. μλ₯Ό λ€μ΄, νλ‘μμ λ ν¨μλ₯Ό νΈμΆνλ μμ μ΄λ DML λ¬Έμ μ€ννλ μμ λ±μ μνν μ μμ΅λλ€.
2. μ€ν¬λ¦½νΈ
μ€ν¬λ¦½νΈ μμ μ νμ μΈλΆ μ€ν¬λ¦½νΈ νμΌμ μ€ννλ μμ μ μ§μ ν λ μ¬μ©λ©λλ€. λ°μ΄ν°λ² μ΄μ€ μλ²μμ μ€νλ μ μλ μΈμ΄λ‘ μμ±λ μ€ν¬λ¦½νΈ νμΌ(μ: Shell μ€ν¬λ¦½νΈ, Perl μ€ν¬λ¦½νΈ)μ μ€νν μ μμ΅λλ€.
3. λ°μ΄ν° νν
λ°μ΄ν° νν μμ μ νμ λ°μ΄ν°λ² μ΄μ€ κ°μ²΄λ ν μ΄λΈμ λ°±μ , 볡μ, μ΄λ λ±κ³Ό κ°μ λ°μ΄ν° κ΄λ ¨ μμ μ μνν λ μ¬μ©λ©λλ€. λ°μ΄ν°λ₯Ό μμΆνκ±°λ μνΈννλ λ±μ μμ λ μ€μ ν μ μμ΅λλ€.
4. μλ° ν΄λμ€
μλ° ν΄λμ€ μμ μ νμ μλ° μΈμ΄λ‘ μμ±λ ν΄λμ€λ₯Ό μ€ννλ μμ μ μ§μ ν λ μ¬μ©λ©λλ€. λ°μ΄ν°λ² μ΄μ€μ μλ° μ€ν νκ²½μ΄ μ€μ λμ΄ μμ΄μΌ ν©λλ€.
μμ½ λ°©λ²
μμ μ μμ½νλ λ°©λ²μλ λ€μκ³Ό κ°μ λ°©λ²μ΄ μμ΅λλ€:
1. μ£ΌκΈ°μ μμ½
μ£ΌκΈ°μ μμ½μ μμ μ μΌμ ν μ£ΌκΈ°λ‘ λ°λ³΅νμ¬ μ€ννλλ‘ μ€μ νλ λ°©λ²μ λλ€. μλ₯Ό λ€μ΄, 맀μΌ, 맀주 λλ 맀μ λ°λ³΅λλ μμ μ μμ½ν μ μμ΅λλ€. λ°λ³΅ μ£ΌκΈ°λ₯Ό μ€μ νμ¬ μμ μ΄ μ€νλ μμ μ μ§μ ν μ μμ΅λλ€.
2. νΉμ μκ° μμ½
νΉμ μκ° μμ½μ μμ μ νΉμ ν λ μ§μ μκ°μ μ€ννλλ‘ μ€μ νλ λ°©λ²μ λλ€. μλ₯Ό λ€μ΄, 2022λ 1μ 1μΌ μ€μ 9μμ μμ μ μ€ννλλ‘ μμ½ν μ μμ΅λλ€. μμ μΌμμ λ μΌμλ₯Ό μ€μ νμ¬ μμ μ΄ μ€νλ μμ μ μ§μ ν μ μμ΅λλ€.
3. μΊλ¦°λ μμ½
μΊλ¦°λ μμ½μ μμ μ μ£ΌκΈ°μ μΌλ‘ μμ½νλ κ²κ³Όλ λ€λ₯΄κ² νΉμ ν λ μ§, μμΌ λλ μμλ§ μμ μ μ€ννλλ‘ μ€μ νλ λ°©λ²μ λλ€. μλ₯Ό λ€μ΄, 맀주 κΈμμΌμ΄λ 맀μ λ§μ§λ§ λ μ μμ μ μ€ννλλ‘ μμ½ν μ μμ΅λλ€. μΊλ¦°λ κ°μ²΄λ₯Ό μμ±νμ¬ μμ μ΄ μμ½λ μΌμλ₯Ό μ§μ ν μ μμ΅λλ€.
μ΄μ κ°μ΄ μμ μ μ’ λ₯μ μμ½ λ°©λ²μ μκ³ μλ€λ©΄ μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ μμ½ μμ μ μμ±ν μ μμ΅λλ€. μμ μ νμ λ°λΌ μμ μ μ μνκ³ μμ½ λ°©λ²μ λ°λΌ μ€μΌμ€μ μ€μ νμ¬ μμ μ μμ½ν μ μμ΅λλ€. νμ νμμ λ§κ² μμ μ μ€μ νκ³ μΆκ°μ μΈ μ΅μ λ€μ μ¬μ©νμ¬ μΈλΆ μ€μ μ μ‘°μ ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μ€μΌμ€μ λ°λΌ μμ μ΄ μλμΌλ‘ μμ½λμ΄ μ€νλ μ μμ΅λλ€.
4. μ€λΌν΄ μ€μΌμ€λ¬ μ€ν μν λͺ¨λν°λ§νκΈ°
μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ μμ½ μμ μ μμ±ν νμλ μμ μ μ€ν μνλ₯Ό λͺ¨λν°λ§νμ¬ νμΈν μ μμ΅λλ€. μ΄ λ¨λ½μμλ μ€λΌν΄ μ€μΌμ€λ¬ μ€ν μνλ₯Ό λͺ¨λν°λ§νλ λ°©λ²μ λν΄ μμΈνκ² μ€λͺ νκ² μ΅λλ€.
μ€ν μν νμΈ
μ€λΌν΄ μ€μΌμ€λ¬μ μ€ν μνλ₯Ό νμΈνκΈ° μν΄μλ λ€μ λͺ λ Ήμ΄λ₯Ό μ¬μ©ν μ μμ΅λλ€:
SELECT job_name, status, log_date, run_duration
FROM user_scheduler_job_run_details;
μμ SQL 쿼리λ user_scheduler_job_run_details
λ·°λ₯Ό ν΅ν΄ μ€νλ μμ
μ μν λ° λ‘κ·Έλ₯Ό μ‘°νν©λλ€. job_name
μ μ€νλ μμ
μ μ΄λ¦, status
λ μ€ν μν(μ±κ³΅, μ€ν¨ λ±), log_date
λ μμ
μ΄ μ€νλ λ μ§ λ° μκ°, run_duration
μ μμ
μ΄ μ€νλ μκ°μ λνλ
λλ€. μ΄λ₯Ό ν΅ν΄ μ€νλ μμ
μ μνμ μ€ν μκ°μ νμΈν μ μμ΅λλ€.
μλ¬ λ‘κ·Έ νμΈ
μμ
μ€ν μ€ μλ¬κ° λ°μν κ²½μ°, ν΄λΉ μλ¬ λ‘κ·Έλ₯Ό νμΈνμ¬ μμΈμ νμ
ν μ μμ΅λλ€. μ€λΌν΄ μ€μΌμ€λ¬μμλ job_run_details
λ·°λ₯Ό ν΅ν΄ μμ
μ€νμ λν μμΈν λ‘κ·Έλ₯Ό νμΈν μ μμ΅λλ€:
SELECT log_date, job_name, error# as error_code, additional_info
FROM user_scheduler_job_run_details
WHERE status = 'FAILED';
μμ SQL 쿼리λ μ€ν¨ν μμ
μ λν λ‘κ·Έλ₯Ό μ‘°νν©λλ€. log_date
λ μ€νλ λ μ§ λ° μκ°, job_name
μ μμ
μ μ΄λ¦, error_code
λ λ°μν μλ¬μ μ½λ, additional_info
λ μΆκ°μ μΈ μλ¬ μ 보λ₯Ό λνλ
λλ€. μ΄λ₯Ό ν΅ν΄ μ€ν¨ν μμ
μ λν μμΈν μλ¬ μ 보λ₯Ό νμΈν μ μμ΅λλ€.
μμ½ μμ λͺ¨λν°λ§
μ€λΌν΄ μ€μΌμ€λ¬μ μμ½λ μμ λ€μ νμ¬ μνλ₯Ό λͺ¨λν°λ§νλ λ°©λ²μ λν΄ μμλ³΄κ² μ΅λλ€. λ€μ λͺ λ Ήμ΄λ₯Ό μ¬μ©νλ©΄ μμ½λ μμ μ μνλ₯Ό νμΈν μ μμ΅λλ€:
SELECT job_name, owner, state, last_start_date, next_run_date
FROM user_scheduler_jobs;
μμ SQL 쿼리λ user_scheduler_jobs
λ·°λ₯Ό ν΅ν΄ μμ½λ μμ
λ€μ νμ¬ μνλ₯Ό μ‘°νν©λλ€. job_name
μ μμ
μ μ΄λ¦, owner
λ μμ
μ μμ ν μ¬μ©μ, state
λ μμ
μ μν(νμ±, λΉνμ± λ±), last_start_date
λ μμ
μ΄ λ§μ§λ§μΌλ‘ μ€νλ λ μ§ λ° μκ°, next_run_date
λ μμ
μ λ€μ μ€ν μμ μΌμ λνλ
λλ€. μ΄λ₯Ό ν΅ν΄ μμ½λ μμ
λ€μ μνμ λ§μ§λ§ μ€νμΌ, λ€μ μ€ν μμ μΌμ νμΈν μ μμ΅λλ€.
μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ μμ±ν μμ μ μ€ν μνλ₯Ό λͺ¨λν°λ§νμ¬ νμΈν μ μμ΅λλ€. μ€ν μν νμΈ, μλ¬ λ‘κ·Έ νμΈ, μμ½ μμ λͺ¨λν°λ§ λ±μ λ°©λ²μ μ¬μ©νμ¬ μμ μ μ€ν μνλ₯Ό μ€μκ°μΌλ‘ νμΈν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μμ½ μμ μ΄ μ μμ μΌλ‘ μ€νλκ³ μλμ§ νμΈν μ μμ΅λλ€.
- μ€λΌν΄ μ€μΌμ€λ¬μμ μ€νλκ³ μλ μμ μ λν λͺ¨λν°λ§ λ°©λ²
μ€λΌν΄ μ€μΌμ€λ¬μμ μ€νλκ³ μλ μμ μ λͺ¨λν°λ§νλ λ°©λ²μ λν΄ μμΈνκ² μ€λͺ νκ² μ΅λλ€.
1. V$SESSION λ·° μ¬μ©
μ€λΌν΄ λ°μ΄ν°λ² μ΄μ€μμλ V$SESSION
λ·°λ₯Ό ν΅ν΄ νμ¬ μ€ν μ€μΈ μΈμ
μ 보λ₯Ό μ‘°νν μ μμ΅λλ€. μ΄λ₯Ό μ¬μ©νμ¬ μ€λΌν΄ μ€μΌμ€λ¬μμ μ€νλκ³ μλ μμ
μ νμΈν μ μμ΅λλ€. λ€μ SQL 쿼리λ₯Ό μ€ννμ¬ νμ¬ μ€ν μ€μΈ μμ
μ μ‘°νν μ μμ΅λλ€:
SELECT s.sid, s.serial#, s.username, s.program
FROM v$session s
WHERE s.program LIKE '%ORACLE_SCHEDULER%'
μμ 쿼리λ V$SESSION
λ·°λ₯Ό μ¬μ©νμ¬ μ€μΌμ€λ¬ νλ‘μΈμ€λ‘ μ€ν μ€μΈ μΈμ
μ νν°λ§ν©λλ€. sid
λ μΈμ
ID, serial#
μ μΈμ
μλ¦¬μΌ λ²νΈ, username
μ μΈμ
μ¬μ©μ μ΄λ¦, program
μ μΈμ
μμ μ€ν μ€μΈ νλ‘κ·Έλ¨μ λνλ
λλ€. μ΄λ₯Ό ν΅ν΄ νμ¬ μ€νλκ³ μλ μμ
κ³Ό ν΄λΉ μμ
μ μ€ν μ€μΈ μΈμ
μ 보λ₯Ό νμΈν μ μμ΅λλ€.
2. DBA_SCHEDULER_RUNNING_JOBS λ·° μ¬μ©
μ€λΌν΄ λ°μ΄ν°λ² μ΄μ€μμλ DBA_SCHEDULER_RUNNING_JOBS
λ·°λ₯Ό ν΅ν΄ νμ¬ μ€ν μ€μΈ μ€μΌμ€λ¬ μμ
μ μ‘°νν μ μμ΅λλ€. λ€μ SQL 쿼리λ₯Ό μ€ννμ¬ νμ¬ μ€ν μ€μΈ μμ
μ μ‘°νν μ μμ΅λλ€:
SELECT sid, serial#, job_name, instance_id, state, log_date
FROM dba_scheduler_running_jobs
μμ 쿼리λ DBA_SCHEDULER_RUNNING_JOBS
λ·°λ₯Ό μ¬μ©νμ¬ νμ¬ μ€ν μ€μΈ μμ
μ λν μ 보λ₯Ό μ‘°νν©λλ€. sid
λ μΈμ
ID, serial#
μ μΈμ
μλ¦¬μΌ λ²νΈ, job_name
μ μμ
μ΄λ¦, instance_id
λ λ°μ΄ν°λ² μ΄μ€ μΈμ€ν΄μ€ ID, state
λ μμ
μ μν, log_date
λ μμ
μ€ν λ‘κ·Έμ λ μ§ λ° μκ°μ λνλ
λλ€. μ΄λ₯Ό ν΅ν΄ νμ¬ μ€ν μ€μΈ μμ
κ³Ό κ΄λ ¨λ μΈμ
μ 보 λ° μ€ν λ‘κ·Έλ₯Ό νμΈν μ μμ΅λλ€.
μ€λΌν΄ μ€μΌμ€λ¬μμ μ€νλκ³ μλ μμ
μ λͺ¨λν°λ§νκΈ° μν΄ V$SESSION
λ·°λ DBA_SCHEDULER_RUNNING_JOBS
λ·°λ₯Ό μ¬μ©νμ¬ μμ
μ λν μΈμ
μ 보μ μ€ν λ‘κ·Έλ₯Ό μ‘°νν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ νμ¬ μ€ν μ€μΈ μμ
μ μνμ μ€ν μ 보λ₯Ό μ€μκ°μΌλ‘ νμΈν μ μμ΅λλ€.
- μ€ν μν, μλ£ μ¬λΆ λ±μ μ 보 νμΈ λ° κ΄λ¦¬ λ°©λ²
μ€λΌν΄ μ€μΌμ€λ¬μμ μμ μ μ€ν μνμ μλ£ μ¬λΆ λ±μ μ 보λ₯Ό νμΈνκ³ κ΄λ¦¬νλ λ°©λ²μ λν΄ μμΈνκ² μ€λͺ νκ² μ΅λλ€.
1. USER_SCHEDULER_JOB_RUN_DETAILS λ·° μ¬μ©
μμ
μ μ€ν μνμ μλ£ μ¬λΆλ₯Ό νμΈνκΈ° μν΄ μ€λΌν΄ λ°μ΄ν°λ² μ΄μ€μμλ USER_SCHEDULER_JOB_RUN_DETAILS
λ·°λ₯Ό μ¬μ©ν μ μμ΅λλ€. λ€μ SQL 쿼리λ₯Ό μ€ννμ¬ μμ
μ μ€ν μνμ μλ£ μ¬λΆ λ±μ μ 보λ₯Ό μ‘°νν μ μμ΅λλ€:
SELECT job_name, status, log_date, run_duration
FROM user_scheduler_job_run_details;
μμ 쿼리λ USER_SCHEDULER_JOB_RUN_DETAILS
λ·°λ₯Ό ν΅ν΄ μ€νλ μμ
μ μν(status
)μ μ€ν λ‘κ·Έ(log_date
)λ₯Ό μ‘°νν©λλ€. job_name
μ μμ
μ μ΄λ¦, run_duration
μ μμ
μ μ€ν μκ°μ λνλ
λλ€. μ΄λ₯Ό ν΅ν΄ μμ
μ μ€ν μνμ μ€ν μκ°μ νμΈν μ μμ΅λλ€.
2. μλ¬ λ‘κ·Έ νμΈ
μμ
μ€ν μ€μ μλ¬κ° λ°μν κ²½μ°, ν΄λΉ μλ¬ λ‘κ·Έλ₯Ό νμΈνμ¬ μμΈμ νμ
ν μ μμ΅λλ€. μ€λΌν΄ μ€μΌμ€λ¬μμλ USER_SCHEDULER_JOB_RUN_DETAILS
λ·°λ₯Ό ν΅ν΄ μμ
μ€νμ λν μμΈν λ‘κ·Έλ₯Ό μ‘°νν μ μμ΅λλ€. λ€μ SQL 쿼리λ₯Ό μ€ννμ¬ μ€ν¨ν μμ
μ λν λ‘κ·Έλ₯Ό μ‘°νν μ μμ΅λλ€:
SELECT log_date, job_name, error# as error_code, additional_info
FROM user_scheduler_job_run_details
WHERE status = 'FAILED';
μμ 쿼리λ status
κ° 'FAILED'μΈ μμ
μ λν λ‘κ·Έλ₯Ό μ‘°νν©λλ€. log_date
λ μ€νλ λ μ§ λ° μκ°, job_name
μ μμ
μ μ΄λ¦, error_code
λ λ°μν μλ¬μ μ½λ, additional_info
λ μΆκ°μ μΈ μλ¬ μ 보λ₯Ό λνλ
λλ€. μ΄λ₯Ό ν΅ν΄ μ€ν¨ν μμ
μ λν μμΈν μλ¬ μ 보λ₯Ό νμΈν μ μμ΅λλ€.
3. μμ½ μμ λͺ¨λν°λ§
μ€λΌν΄ μ€μΌμ€λ¬μ μμ½λ μμ
λ€μ νμ¬ μνλ₯Ό λͺ¨λν°λ§νκΈ° μν΄μλ USER_SCHEDULER_JOBS
λ·°λ₯Ό μ΄μ©ν μ μμ΅λλ€. λ€μ SQL 쿼리λ₯Ό μ€ννμ¬ μμ½λ μμ
λ€μ μν λ° μ€ν μ 보λ₯Ό μ‘°νν μ μμ΅λλ€:
SELECT job_name, owner, state, last_start_date, next_run_date
FROM user_scheduler_jobs;
μμ 쿼리λ USER_SCHEDULER_JOBS
λ·°λ₯Ό ν΅ν΄ μμ½λ μμ
λ€μ νμ¬ μν(state
)μ λ§μ§λ§ μ€νμΌ(last_start_date
), λ€μ μ€ν μμ μΌ(next_run_date
)μ μ‘°νν©λλ€. μ΄λ₯Ό ν΅ν΄ μμ½λ μμ
λ€μ μνμ μ€ν μ 보λ₯Ό νμΈν μ μμ΅λλ€.
μ€λΌν΄ μ€μΌμ€λ¬μμ μμ
μ μ€ν μνμ μλ£ μ¬λΆ λ±μ μ 보λ₯Ό νμΈνκ³ κ΄λ¦¬νκΈ° μν΄ USER_SCHEDULER_JOB_RUN_DETAILS
λ·°λ₯Ό μ¬μ©νμ¬ μ€ν μνμ μ€ν λ‘κ·Έλ₯Ό μ‘°νν μ μμ΅λλ€. μλ¬ λ‘κ·Έλ₯Ό νμΈνμ¬ μμ
μ€ν μ€μ λ°μν μλ¬μ λν μμΈν μ 보λ₯Ό νμ
ν μλ μμ΅λλ€. λν, USER_SCHEDULER_JOBS
λ·°λ₯Ό ν΅ν΄ μμ½λ μμ
λ€μ μνμ μ€ν μ 보λ₯Ό νμΈν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μμ
μ μ€ν μνμ μλ£ μ¬λΆ λ±μ λͺ¨λν°λ§νκ³ νμν κ΄λ¦¬ μμ
μ μνν μ μμ΅λλ€.
μ€ν μν, μλ£ μ¬λΆ λ±μ μ 보 νμΈ λ° κ΄λ¦¬ λ°©λ²
μ€λΌν΄ μ€μΌμ€λ¬μμλ μμ μ μ€ν μν, μλ£ μ¬λΆ λ±μ μ 보λ₯Ό μ½κ² νμΈνκ³ κ΄λ¦¬ν μ μμ΅λλ€. μ΄λ₯Ό μν΄ λ€μν λ°©λ²μ μ¬μ©ν μ μμ΅λλ€.
V$SESSION
λ·° μ¬μ©
λ¨Όμ , μμ
μ΄ νμ¬ μ€ν μ€μΈμ§λ₯Ό νμΈνκΈ° μν΄ V$SESSION
λ·°λ₯Ό μ¬μ©ν μ μμ΅λλ€. λ€μμ ν΄λΉ λ·°λ₯Ό μ¬μ©νμ¬ μ€ν μ€μΈ μμ
μ μ‘°ννλ SQL 쿼리μ
λλ€:
SELECT s.sid, s.serial#, s.username, s.program
FROM v$session s
WHERE s.program LIKE '%ORACLE_SCHEDULER%'
μμ 쿼리λ V$SESSION
λ·°λ₯Ό νμ©νμ¬ μ€μΌμ€λ¬ νλ‘μΈμ€λ‘ μ€ν μ€μΈ μΈμ
μ νν°λ§ν©λλ€. sid
λ μΈμ
ID, serial#
μ μΈμ
μλ¦¬μΌ λ²νΈ, username
μ μΈμ
μ¬μ©μ μ΄λ¦, program
μ μΈμ
μμ μ€ν μ€μΈ νλ‘κ·Έλ¨μ λνλ
λλ€. μ΄λ₯Ό ν΅ν΄ νμ¬ μ€ν μ€μΈ μμ
κ³Ό ν΄λΉ μμ
μ μ€ν μ€μΈ μΈμ
μ 보λ₯Ό νμΈν μ μμ΅λλ€.
DBA_SCHEDULER_RUNNING_JOBS
λ·° μ¬μ©
λ λ€λ₯Έ λ°©λ²μΌλ‘λ DBA_SCHEDULER_RUNNING_JOBS
λ·°λ₯Ό μ¬μ©νμ¬ νμ¬ μ€ν μ€μΈ μ€μΌμ€λ¬ μμ
μ μ‘°ννλ κ²μ
λλ€. λ€μμ ν΄λΉ λ·°λ₯Ό μ¬μ©ν SQL 쿼리μ
λλ€:
SELECT sid, serial#, job_name, instance_id, state, log_date
FROM dba_scheduler_running_jobs
μμ 쿼리λ DBA_SCHEDULER_RUNNING_JOBS
λ·°λ₯Ό ν΅ν΄ νμ¬ μ€ν μ€μΈ μμ
μ λν μ 보λ₯Ό μ‘°νν©λλ€. sid
λ μΈμ
ID, serial#
μ μΈμ
μλ¦¬μΌ λ²νΈ, job_name
μ μμ
μ΄λ¦, instance_id
λ λ°μ΄ν°λ² μ΄μ€ μΈμ€ν΄μ€ ID, state
λ μμ
μ μν, log_date
λ μμ
μ€ν λ‘κ·Έμ λ μ§ λ° μκ°μ λνλ
λλ€. μ΄λ₯Ό ν΅ν΄ νμ¬ μ€ν μ€μΈ μμ
κ³Ό κ΄λ ¨λ μΈμ
μ 보 λ° μ€ν λ‘κ·Έλ₯Ό νμΈν μ μμ΅λλ€.
USER_SCHEDULER_JOB_RUN_DETAILS
λ·° μ¬μ©
μμ
μ μ€ν μν, μλ£ μ¬λΆ λ±μ μ 보λ₯Ό νμΈνκΈ° μν΄μλ USER_SCHEDULER_JOB_RUN_DETAILS
λ·°λ₯Ό μ¬μ©ν μ μμ΅λλ€. λ€μμ ν΄λΉ λ·°λ₯Ό μ¬μ©νμ¬ μμ
μ 보λ₯Ό μ‘°ννλ SQL 쿼리μ
λλ€:
SELECT job_name, status, log_date, run_duration
FROM user_scheduler_job_run_details;
μμ 쿼리λ USER_SCHEDULER_JOB_RUN_DETAILS
λ·°λ₯Ό ν΅ν΄ μ€νλ μμ
μ μν(status
)μ μ€ν λ‘κ·Έ(log_date
)λ₯Ό μ‘°νν©λλ€. job_name
μ μμ
μ μ΄λ¦, run_duration
μ μμ
μ μ€ν μκ°μ λνλ
λλ€. μ΄λ₯Ό ν΅ν΄ μμ
μ μ€ν μνμ μ€ν μκ°μ νμΈν μ μμ΅λλ€.
μμ½ μμ λͺ¨λν°λ§
μμ½λ μμ
λ€μ μνλ₯Ό λͺ¨λν°λ§νκΈ° μν΄μλ USER_SCHEDULER_JOBS
λ·°λ₯Ό μ¬μ©ν μ μμ΅λλ€. λ€μμ ν΄λΉ λ·°λ₯Ό μ¬μ©νμ¬ μμ½λ μμ
λ€μ μν λ° μ€ν μ 보λ₯Ό μ‘°ννλ SQL 쿼리μ
λλ€:
SELECT job_name, owner, state, last_start_date, next_run_date
FROM user_scheduler_jobs;
μμ 쿼리λ USER_SCHEDULER_JOBS
λ·°λ₯Ό ν΅ν΄ μμ½λ μμ
λ€μ νμ¬ μν(state
)μ λ§μ§λ§ μ€νμΌ(last_start_date
), λ€μ μ€ν μμ μΌ(next_run_date
)μ μ‘°νν©λλ€. μ΄λ₯Ό ν΅ν΄ μμ½λ μμ
λ€μ μνμ μ€ν μ 보λ₯Ό νμΈν μ μμ΅λλ€.
μμ λ°©λ²λ€μ ν΅ν΄ μ€ν μν, μλ£ μ¬λΆ λ±μ μ 보λ₯Ό νμΈνκ³ μ€μΌμ€λ¬ μμ μ μ μ νκ² κ΄λ¦¬ν μ μμ΅λλ€. νμν κ²½μ° λ‘κ·Έ μ 보λ₯Ό ν΅ν΄ λ¬Έμ λ°μ μμΈμ νμ νκ³ , μμ½λ μμ λ€μ μνλ₯Ό λͺ¨λν°λ§νμ¬ μ μμ λμνλ κ²μ΄ μ’μ΅λλ€.
5. μ€λΌν΄ μ€μΌμ€λ¬ μμ
μ€λΌν΄ μ€μΌμ€λ¬λ νΉμ μκ°μ μμ μ μμ½νμ¬ μλμΌλ‘ μ€νν μ μλ κ°λ ₯ν κΈ°λ₯μ μ 곡ν©λλ€. μ΄μ μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©ν κ°λ¨ν μμ λ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€.
μμ μμ±
λ¨Όμ , μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ μμ μ μμ±ν΄μΌ ν©λλ€. λ€μ SQL λ¬Έμ μ€ννμ¬ κ°λ¨ν μ€μΌμ€λ¬ μμ μ μμ±ν μ μμ΅λλ€:
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'my_job',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN
DBMS_OUTPUT.PUT_LINE(''Hello, World!'');
END;',
start_date => SYSTIMESTAMP,
repeat_interval => 'freq=hourly; byminute=0;',
end_date => NULL,
enabled => TRUE,
comments => 'This is a test job.');
END;
/
μμ μμ μμ CREATE_JOB
νλ‘μμ λ₯Ό μ¬μ©νμ¬ my_job
μ΄λΌλ μ΄λ¦μ μμ
μ μμ±ν©λλ€. μμ
μ νμ PLSQL_BLOCK
μΌλ‘ μ€μ νκ³ , μμ
μ‘μ
μ νλ μΈ SQL λΈλ‘μΌλ‘ μ§μ λ©λλ€. μ΄ μμ μμλ "Hello, World!"λ₯Ό μΆλ ₯νλ κ°λ¨ν PL/SQL λΈλ‘μ΄ μμ
μ‘μ
μΌλ‘ μ¬μ©λ©λλ€.
μμ μ μμ λ μ§μ λ°λ³΅ κ°κ²©μ μ§μ νμ¬ μμ½λ©λλ€. μμ μμ μμλ μμ μ μμνλ μκ°μ νμ¬ μκ°μΌλ‘ μ€μ ν λ€μ, ν μκ°λ§λ€ μμ μ λ°λ³΅νλλ‘ μ€μ νμ΅λλ€.
μμ λͺ¨λν°λ§
μμ
μ΄ μ±κ³΅μ μΌλ‘ μμ±λλ©΄, μ΄μ μμ
μ μνλ₯Ό λͺ¨λν°λ§ν μ μμ΅λλ€. λ€μ SQL 쿼리λ₯Ό μ€ννμ¬ my_job
μμ
μ μνμ μ€ν λ‘κ·Έλ₯Ό νμΈν μ μμ΅λλ€:
SELECT job_name, status, log_date, run_duration
FROM user_scheduler_job_run_details
WHERE job_name = 'my_job'
μμ 쿼리λ USER_SCHEDULER_JOB_RUN_DETAILS
λ·°λ₯Ό ν΅ν΄ μμ
μ μν (status
)μ μ€ν λ‘κ·Έ (log_date
)λ₯Ό μ‘°νν©λλ€. run_duration
μ μμ
μ μ€ν μκ°μ λνλ
λλ€. μ΄λ₯Ό ν΅ν΄ μμ
μ μ€ν μνμ μ€ν μκ°μ νμΈν μ μμ΅λλ€.
μμ μμ
μμ μ λ μ΄μ νμνμ§ μμ κ²½μ°, λ€μ SQL λ¬Έμ μ€ννμ¬ μμ μ μμ ν μ μμ΅λλ€:
BEGIN
DBMS_SCHEDULER.DROP_JOB('my_job');
END;
/
μμ μμ μμλ DROP_JOB
νλ‘μμ λ₯Ό μ¬μ©νμ¬ my_job
μμ
μ μμ ν©λλ€.
μ΄λ κ² μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©ν μμ λ₯Ό ν΅ν΄ μμ μ μμ±, λͺ¨λν°λ§νκ³ μμ νλ λ°©λ²μ μμ보μμ΅λλ€. μ΄λ₯Ό μμ©νμ¬ λ³΅μ‘ν μμ μ€μΌμ€λ§ λ° μλνμ νμ©ν μ μμ΅λλ€. μΆκ°μ μΈ κΈ°λ₯κ³Ό μ΅μ μ λν΄μλ μ€λΌν΄ λ¬Έμλ₯Ό μ°Έμ‘°νλ κ²μ΄ λμμ΄ λ©λλ€.
- μ€μ μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©ν μμ μκ°
μ΄μ μ€μ λ‘ μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©ν μμ λ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€. μ΄ μμ λ νΉμ λ μ§μ μκ°μ ν μ΄λΈμμ λ°μ΄ν°λ₯Ό μΆμΆνμ¬ λ€λ₯Έ ν μ΄λΈλ‘ μ΄λμν€λ μμ μ μμ½νλ κ²μ λͺ©νλ‘ ν©λλ€.
μμ μμ±
λ¨Όμ , μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ μμ μ μμ±ν΄μΌ ν©λλ€. λ€μ SQL λ¬Έμ μ€ννμ¬ μμ μ μμ±ν μ μμ΅λλ€:
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'data_migration_job',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN
INSERT INTO target_table
SELECT *
FROM source_table
WHERE date_column = TRUNC(SYSDATE);
END;',
start_date => SYSTIMESTAMP + INTERVAL '1' DAY,
repeat_interval => 'freq=daily; byhour=3;',
end_date => NULL,
enabled => TRUE,
comments => 'This job migrates data from source table to target table daily.');
END;
/
μμ μμ μμ CREATE_JOB
νλ‘μμ λ₯Ό μ¬μ©νμ¬ data_migration_job
μ΄λΌλ μ΄λ¦μ μμ
μ μμ±ν©λλ€. μμ
μ νμ PLSQL_BLOCK
μΌλ‘ μ€μ νκ³ , μμ
μ‘μ
μ νλ μΈ SQL λΈλ‘μΌλ‘ μ§μ λ©λλ€. μ΄ μμ μμλ source_table
μμ νΉμ λ μ§μ λ°μ΄ν°λ₯Ό μΆμΆνμ¬ target_table
λ‘ μ΄λμν€λ PL/SQL λΈλ‘μ μμ
μ‘μ
μΌλ‘ μ¬μ©ν©λλ€.
μμ μ μμ λ μ§μ λ°λ³΅ κ°κ²©μ μ§μ νμ¬ μμ½λ©λλ€. μμ μμ μμλ μμ μ μμνλ μκ°μ 1μΌ λ€λ‘ μ€μ νκ³ , λ§€μΌ μ€μ 3μμ μμ μ΄ λ°λ³΅νλλ‘ μ€μ νμ΅λλ€.
μμ λͺ¨λν°λ§
μμ
μ΄ μ±κ³΅μ μΌλ‘ μμ±λλ©΄, μ΄μ μμ
μ μνλ₯Ό λͺ¨λν°λ§ν μ μμ΅λλ€. λ€μ SQL 쿼리λ₯Ό μ€ννμ¬ data_migration_job
μμ
μ μνμ μ€ν λ‘κ·Έλ₯Ό νμΈν μ μμ΅λλ€:
SELECT job_name, status, log_date, run_duration
FROM user_scheduler_job_run_details
WHERE job_name = 'data_migration_job'
μμ 쿼리λ USER_SCHEDULER_JOB_RUN_DETAILS
λ·°λ₯Ό ν΅ν΄ μμ
μ μν (status
)μ μ€ν λ‘κ·Έ (log_date
)λ₯Ό μ‘°νν©λλ€. run_duration
μ μμ
μ μ€ν μκ°μ λνλ
λλ€. μ΄λ₯Ό ν΅ν΄ μμ
μ μ€ν μνμ μ€ν μκ°μ νμΈν μ μμ΅λλ€.
μμ μμ
μμ μ λ μ΄μ νμνμ§ μμ κ²½μ°, λ€μ SQL λ¬Έμ μ€ννμ¬ μμ μ μμ ν μ μμ΅λλ€:
BEGIN
DBMS_SCHEDULER.DROP_JOB('data_migration_job');
END;
/
μμ μμ μμλ DROP_JOB
νλ‘μμ λ₯Ό μ¬μ©νμ¬ data_migration_job
μμ
μ μμ ν©λλ€.
μ΄λ κ² μ€μ μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©ν μμ λ₯Ό ν΅ν΄ μμ μ μμ±, λͺ¨λν°λ§νκ³ μμ νλ λ°©λ²μ μμ보μμ΅λλ€. μ΄λ₯Ό μμ©νμ¬ λ³΅μ‘ν μμ μ€μΌμ€λ§ λ° μλνμ νμ©ν μ μμ΅λλ€. μΆκ°μ μΈ κΈ°λ₯κ³Ό μ΅μ μ λν΄μλ μ€λΌν΄ λ¬Έμλ₯Ό μ°Έμ‘°νλ κ²μ΄ λμμ΄ λ©λλ€.
- μμ λ₯Ό ν΅ν΄ μ€λΌν΄ μ€μΌμ€λ¬μ νμ© λ°©λ² λ° κ²°κ³Ό νμΈ
μμ μμ μμλ μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ λ°μ΄ν° λ§μ΄κ·Έλ μ΄μ μμ μ μμ½νλ λ°©λ²μ μ΄ν΄λ³΄μμ΅λλ€. μ΄μ μμ λ₯Ό ν΅ν΄ μ€λΌν΄ μ€μΌμ€λ¬μ νμ© λ°©λ²κ³Ό μμ μ€ν κ²°κ³Όλ₯Ό νμΈνλ λ°©λ²μ λν΄ μμλ³΄κ² μ΅λλ€.
μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό ν΅ν μμ μμ±
μμ μμλ CREATE_JOB
νλ‘μμ λ₯Ό μ¬μ©νμ¬ μμ
μ μμ±νμ΅λλ€. λ€μκ³Ό κ°μ μ΅μ
μ μ€μ νμ¬ μμ
μ μμ±ν μ μμ΅λλ€:
job_name
: μμ μ μ΄λ¦μ μ§μ ν©λλ€.job_type
: μμ μ μ νμ μ§μ ν©λλ€. μ¬κΈ°μλ PL/SQL λΈλ‘μΌλ‘ μ€μ νμ΅λλ€.job_action
: μμ μ μ‘μ μ μ§μ ν©λλ€. PL/SQL λΈλ‘ μμ μ€μ μμ μ μμ±ν©λλ€.start_date
: μμ μ μμνλ λ μ§μ μκ°μ μ€μ ν©λλ€.repeat_interval
: μμ μ λ°λ³΅νλ κ°κ²©μ μ€μ ν©λλ€. μμ μμλ λ§€μΌ μ€μ 3μμ μμ μ λ°λ³΅νλλ‘ μ€μ νμ΅λλ€.end_date
: μμ μ μ’ λ£νλ λ μ§μ μκ°μ μ€μ ν©λλ€. μ¬κΈ°μλ 무νν λ°λ³΅νλλ‘ μ€μ νμ΅λλ€.enabled
: μμ μ νμ±ννκ±°λ λΉνμ±νν μ μμ΅λλ€.
μμ μμ μμλ data_migration_job
μ΄λΌλ μ΄λ¦μ μμ
μ μμ±νμ΅λλ€. μμ
μ νμ PL/SQL λΈλ‘μ΄κ³ , μμ
μ‘μ
μ source_table
μμ νΉμ λ μ§μ λ°μ΄ν°λ₯Ό μΆμΆνμ¬ target_table
λ‘ μ΄λμν€λ μμ
μ
λλ€. μμ
μ 1μΌ λ€λΆν° μμνμ¬ λ§€μΌ μ€μ 3μμ λ°λ³΅νλλ‘ μ€μ λμμ΅λλ€. λν, μμ
μ 무기νμΌλ‘ λ°λ³΅νλλ‘ μ€μ λμμ΅λλ€.
μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό ν΅ν μμ λͺ¨λν°λ§
μμ
μ΄ μμ±λλ©΄, USER_SCHEDULER_JOB_RUN_DETAILS
λ·°λ₯Ό ν΅ν΄ μμ
μ μνμ μ€ν λ‘κ·Έλ₯Ό νμΈν μ μμ΅λλ€. λ€μκ³Ό κ°μ 쿼리λ₯Ό μ€ννμ¬ μμ
μ μ€ν μνμ μ€ν λ‘κ·Έλ₯Ό μ‘°νν μ μμ΅λλ€:
SELECT job_name, status, log_date, run_duration
FROM user_scheduler_job_run_details
WHERE job_name = 'data_migration_job'
μμ 쿼리λ μμ μ μ΄λ¦, μ€ν μν, μ€ν λ‘κ·Έμ λ μ§ λ° μκ°, μ€ν μκ°μ μ‘°νν©λλ€. μ΄λ₯Ό ν΅ν΄ μμ μ΄ μ±κ³΅μ μΌλ‘ μ€νλμλμ§, μ€ν μκ°μ΄ μμκ³Ό μΌμΉνλμ§ λ±μ νμΈν μ μμ΅λλ€.
μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό ν΅ν μμ μμ
μμ
μ΄ λ μ΄μ νμνμ§ μμ κ²½μ°, DROP_JOB
νλ‘μμ λ₯Ό μ¬μ©νμ¬ μμ
μ μμ ν μ μμ΅λλ€. λ€μκ³Ό κ°μ SQL λ¬Έμ μ€ννμ¬ μμ
μ μμ ν μ μμ΅λλ€:
BEGIN
DBMS_SCHEDULER.DROP_JOB('data_migration_job');
END;
/
μμ μμ μμλ data_migration_job
μμ
μ μμ ν©λλ€. μ΄λ₯Ό ν΅ν΄ λ μ΄μ μμ
μ μ€ννμ§ μλλ‘ μ€μ ν μ μμ΅λλ€.
μ΄λ κ² μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©ν μμ λ₯Ό ν΅ν΄ μμ μ μμ±νκ³ λͺ¨λν°λ§νλ©° μμ νλ λ°©λ²μ μμ보μμ΅λλ€. μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό ν΅ν΄ μμ μ μμ½νκ³ μ€ν κ²°κ³Όλ₯Ό νμΈνμ¬ μλνλ μμ κ΄λ¦¬λ₯Ό ν¨κ³Όμ μΌλ‘ μνν μ μμ΅λλ€.
μμ λ₯Ό ν΅ν΄ μ€λΌν΄ μ€μΌμ€λ¬μ νμ© λ°©λ² λ° κ²°κ³Ό νμΈ
μμ μμ μμλ μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ λ°μ΄ν° λ§μ΄κ·Έλ μ΄μ μμ μ μμ½νλ λ°©λ²μ μ΄ν΄λ³΄μμ΅λλ€. μ΄μ μμ λ₯Ό ν΅ν΄ μ€λΌν΄ μ€μΌμ€λ¬μ νμ© λ°©λ²κ³Ό μμ μ€ν κ²°κ³Όλ₯Ό νμΈνλ λ°©λ²μ λν΄ μμλ³΄κ² μ΅λλ€.
μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό ν΅ν μμ μμ±νκΈ°
μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ μμ μ μμ±νλ μ½λλ λ€μκ³Ό κ°μ΅λλ€:
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'data_migration_job',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN
INSERT INTO target_table
SELECT *
FROM source_table
WHERE date_column = TRUNC(SYSDATE);
END;',
start_date => SYSTIMESTAMP + INTERVAL '1' DAY,
repeat_interval => 'freq=daily; byhour=3;',
end_date => NULL,
enabled => TRUE,
comments => 'This job migrates data from source table to target table daily.');
END;
/
μμ μ½λμμ CREATE_JOB
νλ‘μμ λ₯Ό μ¬μ©νμ¬ μμ
μ μμ±ν©λλ€. μμ
μ μ΄λ¦μ data_migration_job
μΌλ‘ μ§μ ν©λλ€. job_type
μ PLSQL_BLOCK
μΌλ‘ μ€μ νμ¬ PL/SQL λΈλ‘μ μμ
νμ
μΌλ‘ μ§μ ν©λλ€.
job_action
μ μ€μ λ‘ μνν μμ
λ΄μ©μ PL/SQL λΈλ‘μΌλ‘ μμ±ν©λλ€. μ΄ μμ μμλ source_table
μμ μ€λ λ μ§μ λμΌν λ μ§μ λ°μ΄ν°λ₯Ό κ°μ Έμ target_table
λ‘ μ΄λμν€λ μμ
μΌλ‘ μ€μ λμ΄ μμ΅λλ€.
μμ
μ μμ λ μ§μ μκ°μ start_date
λ‘ μ€μ ν©λλ€. μ¬κΈ°μλ SYSTIMESTAMP ν¨μλ₯Ό μ¬μ©νμ¬ νμ¬ μκ°μμ 1μΌ νλ‘ μ€μ νμμ΅λλ€.
μμ
μ λ°λ³΅ κ°κ²©μ repeat_interval
λ‘ μ€μ ν©λλ€. μμ μμ μμλ λ§€μΌ μ€μ 3μμ μμ
μ΄ λ°λ³΅νλλ‘ μ€μ νμ΅λλ€.
μμ
μ μ’
λ£ λ μ§μ μκ°μ μ€μ νμ¬ μμ
μ μΌμμ μΌλ‘ μ νν μ μμ΅λλ€. μμ μμ μμλ μμ
μ 무기νμΌλ‘ μ€μ νκΈ° μν΄ end_date
λ₯Ό NULLλ‘ μ€μ νμμ΅λλ€.
enabled
λ₯Ό TRUEλ‘ μ€μ νμ¬ μμ
μ νμ±νμν΅λλ€.
μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό ν΅ν μμ λͺ¨λν°λ§νκΈ°
μμ
μ΄ μμ±λλ©΄ USER_SCHEDULER_JOB_RUN_DETAILS
λ·°λ₯Ό ν΅ν΄ μμ
μ μνμ μ€ν λ‘κ·Έλ₯Ό νμΈν μ μμ΅λλ€. λ€μμ 쿼리λ μμ
μ μ€ν μνμ μ€ν λ‘κ·Έλ₯Ό μ‘°νν©λλ€:
SELECT job_name, status, log_date, run_duration
FROM user_scheduler_job_run_details
WHERE job_name = 'data_migration_job'
μμ 쿼리λ job_name
μ΄ data_migration_job
μΈ μμ
μ μ΄λ¦, μ€ν μν, μ€ν λ‘κ·Έμ λ μ§ λ° μκ°, μ€ν μκ°μ μ‘°νν©λλ€.
μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό ν΅ν μμ μμ νκΈ°
μμ μ΄ λ μ΄μ νμνμ§ μμ κ²½μ° λ€μμ μ½λλ₯Ό μ¬μ©νμ¬ μμ μ μμ ν μ μμ΅λλ€:
BEGIN
DBMS_SCHEDULER.DROP_JOB('data_migration_job');
END;
/
μμ μ½λλ DROP_JOB
νλ‘μμ λ₯Ό μ¬μ©νμ¬ data_migration_job
μμ
μ μμ ν©λλ€.
μ΄λ κ² μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©ν μμ λ₯Ό ν΅ν΄ μμ μ μμ±νκ³ λͺ¨λν°λ§νλ©° μμ νλ λ°©λ²μ μμ보μμ΅λλ€. μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό ν΅ν΄ μμ μ μμ½νκ³ μ€ν κ²°κ³Όλ₯Ό νμΈνμ¬ μΌμ ν μ£ΌκΈ°λ‘ λ°λ³΅λλ μμ μ μλνν μ μμ΅λλ€.
μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ μμ μμ½νκΈ°
μ€λΌν΄ μ€μΌμ€λ¬λ λ°μ΄ν°λ² μ΄μ€ μμ μ μμ½νκ³ μλμΌλ‘ μ€νν μ μλ κ°λ ₯ν κΈ°λ₯μ λλ€. λ€μμ μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©νμ¬ μμ μ μμ½νλ λ°©λ²μ λλ€.
1. μμ μμ±νκΈ°
μμ
μ μμ±νκΈ° μν΄ DBMS_SCHEDULER.CREATE_JOB
νλ‘μμ λ₯Ό μ¬μ©ν©λλ€. μ΄ νλ‘μμ λ₯Ό νΈμΆν λ, job_name
, job_type
, job_action
, start_date
, repeat_interval
, end_date
, enabled
λ±μ νλΌλ―Έν°λ₯Ό μ€μ ν©λλ€.
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'my_job',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN
-- μ€νν μμ
λ΄μ©μ μ
λ ₯νμΈμ
END;',
start_date => SYSTIMESTAMP,
repeat_interval => 'FREQ=DAILY; INTERVAL=1',
end_date => NULL,
enabled => TRUE
);
END;
/
μμ μμ μμλ my_job
μ΄λΌλ μ΄λ¦μ μμ
μ μμ±νλ©°, μμ
νμ
μ PL/SQL λΈλ‘μΌλ‘ μ€μ λμ΄ μμ΅λλ€. job_action
μ μ€μ λ‘ μμ
μ μνν PL/SQL μ½λλ₯Ό μ
λ ₯νλ λΆλΆμ
λλ€. start_date
λ μμ
μ΄ μμλλ μΌμμ μκ°μ μλ―Ένλλ°, SYSTIMESTAMP
λ‘ νμ¬ μκ°μ μ¬μ©νμμ΅λλ€. repeat_interval
μ μμ
μ λ°λ³΅ν μ£ΌκΈ°μ κ°κ²©μ μ§μ νλ λΆλΆμ
λλ€. μμ μμ μμλ λ§€μΌ 1μΌμ© λ°λ³΅νλλ‘ μ€μ λμ΄ μμ΅λλ€. end_date
λ μμ
μ μ’
λ£νλ λ μ§μ μκ°μ μ§μ νλλ°, NULLλ‘ μ€μ νλ©΄ μμ
μ΄ λ¬΄κΈ°νμΌλ‘ λ°λ³΅λ©λλ€. λ§μ§λ§μΌλ‘ enabled
λ μμ
μ νμ±νν μ§ μ¬λΆλ₯Ό μ§μ νλλ°, TRUEλ‘ μ€μ νλ©΄ μμ
μ΄ λ°λ‘ μ€νλ μ μλλ‘ ν©λλ€.
2. μμ λͺ¨λν°λ§νκΈ°
μμ
μ΄ μμ±λλ©΄ μμ
μ μνμ μ€ν κ²°κ³Όλ₯Ό νμΈνκΈ° μν΄ USER_SCHEDULER_JOB_RUN_DETAILS
λ·°λ₯Ό μ¬μ©ν μ μμ΅λλ€.
SELECT job_name, status, log_date, run_duration
FROM user_scheduler_job_run_details
WHERE job_name = 'my_job';
μμ 쿼리λ my_job
μ΄λΌλ μ΄λ¦μ μμ
μ μ€ν μν, μ€ν λ‘κ·Έμ λ μ§ λ° μκ°, μ€ν μκ°μ μ‘°ννλ μμ μ
λλ€.
3. μμ μμ νκΈ°
λ μ΄μ νμνμ§ μμ μμ
μ DBMS_SCHEDULER.DROP_JOB
νλ‘μμ λ₯Ό μ¬μ©νμ¬ μμ ν μ μμ΅λλ€.
BEGIN
DBMS_SCHEDULER.DROP_JOB('my_job');
END;
/
μμ μ½λλ my_job
μ΄λΌλ μ΄λ¦μ μμ
μ μμ νλ μμ μ
λλ€. μμ
μ΄ μμ λλ©΄ λ μ΄μ μμ½λ μμ
μ΄ μ€νλμ§ μκ² λ©λλ€.
μ€λΌν΄ μ€μΌμ€λ¬λ₯Ό μ¬μ©νλ©΄ λ°μ΄ν°λ² μ΄μ€ μμ μ μλννμ¬ μΌμ ν κ°κ²©μΌλ‘ μ€νν μ μμ΅λλ€. μμ μ μμ±, λͺ¨λν°λ§, μμ λ°©λ²μ μ΅νκ³ μ€μ μ 무μμ νμ©ν΄ 보μΈμ.
λκΈ