λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μΉ΄ν…Œκ³ λ¦¬ μ—†μŒ

였라클 μŠ€μΌ€μ€„λŸ¬ μ‚¬μš©λ²• & 예제

by 5566 2023. 8. 27.

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) λ“±μ˜ 개체λ₯Ό μ‚¬μš©ν•˜μ—¬ μž‘μ—…μ„ μ„€μ •ν•˜κ³  μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μŠ€μΌ€μ€„λŸ¬λŠ” λŒ€λΆ€λΆ„μ˜ λ°μ΄ν„°λ² μ΄μŠ€ λ²„μ „μ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” κΈ°λŠ₯으둜 포괄적이고 κ°•λ ₯ν•œ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 λ°μ΄ν„°λ² μ΄μŠ€ 관리 μž‘μ—…μ„ μžλ™ν™”ν•˜κ³ , 일괄 처리 μž‘μ—…μ„ 효율적으둜 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

였라클 μŠ€μΌ€μ€„λŸ¬λ₯Ό ν™œμš©ν•˜λ©΄ 일일 μ˜ˆμ•½ μž‘μ—…, μ£Όκ°„ λ³΄κ³ μ„œ 생성, λ°μ΄ν„°λ² μ΄μŠ€ μœ μ§€λ³΄μˆ˜ μž‘μ—… λ“± λ‹€μ–‘ν•œ μž‘μ—…μ„ 효율적으둜 μ˜ˆμ•½ν•˜κ³  관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

였라클 μŠ€μΌ€μ€„λŸ¬μ˜ κ°œλ…κ³Ό λͺ©μ μ— λŒ€ν•œ μ†Œκ°œ

였라클 μŠ€μΌ€μ€„λŸ¬λž€?

였라클 μŠ€μΌ€μ€„λŸ¬λŠ” 였라클 λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μž‘μ—…μ„ μ˜ˆμ•½ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” μ‹œμŠ€ν…œμž…λ‹ˆλ‹€. μŠ€μΌ€μ€„λŸ¬λŠ” νŠΉμ • μ‹œκ°„λŒ€μ— 일련의 μž‘μ—…μ„ μžλ™μœΌλ‘œ μ‹€ν–‰ν•˜κ±°λ‚˜, 주기적으둜 λ°˜λ³΅λ˜λŠ” μž‘μ—…μ„ μ˜ˆμ•½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

였라클 μŠ€μΌ€μ€„λŸ¬μ˜ λͺ©μ 

였라클 μŠ€μΌ€μ€„λŸ¬μ˜ μ£Όμš” λͺ©μ μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

  1. μžλ™ν™”λœ μž‘μ—… μ‹€ν–‰: μŠ€μΌ€μ€„λŸ¬λ₯Ό μ‚¬μš©ν•˜μ—¬ νŠΉμ • μ‹œκ°„μ— 일련의 μž‘μ—…μ„ μžλ™μœΌλ‘œ μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ°μ΄ν„°λ² μ΄μŠ€ λ‚΄λΆ€μ—μ„œ μ‹€ν–‰λ˜μ–΄μ•Ό ν•˜λŠ” λ°±κ·ΈλΌμš΄λ“œ μž‘μ—…μ΄λ‚˜ νŠΉμ • ν”„λ‘œμ‹œμ €λ₯Ό μ˜ˆμ•½ν•˜μ—¬ μžλ™μœΌλ‘œ μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 μ‹œκ°„κ³Ό 인λ ₯을 μ ˆμ•½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  2. 반볡 μž‘μ—… μ˜ˆμ•½: 주기적으둜 λ°˜λ³΅λ˜λŠ” μž‘μ—…μ„ μ˜ˆμ•½ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 맀일, 맀주, 맀월 νŠΉμ • λ‚ μ§œμ™€ μ‹œκ°„μ— μž‘μ—…μ„ μ‹€ν–‰ν•˜λ„λ‘ μ˜ˆμ•½ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 반볡적인 μž‘μ—…μ„ 효율적으둜 μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  3. 일괄 처리 μž‘μ—… 관리: λŒ€λŸ‰μ˜ μž‘μ—…μ„ μΌκ΄„μ μœΌλ‘œ μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μŠ€μΌ€μ€„λŸ¬λ₯Ό μ‚¬μš©ν•˜μ—¬ λŒ€λŸ‰μ˜ 데이터λ₯Ό μ²˜λ¦¬ν•˜κ±°λ‚˜ λ‹€λ₯Έ μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Όμ˜ 연동 μž‘μ—…μ„ μ˜ˆμ•½ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 μž‘μ—…μ˜ μ•ˆμ •μ„±κ³Ό νš¨μœ¨μ„±μ„ ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

  4. μ˜ˆμ™Έ μ²˜λ¦¬μ™€ μ•Œλ¦Ό: μŠ€μΌ€μ€„λŸ¬λ₯Ό μ‚¬μš©ν•˜μ—¬ μ˜ˆμ™Έ 상황에 λŒ€ν•œ 처리 방법을 μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μž‘μ—… μ‹€ν–‰ 쀑 μ—λŸ¬κ°€ λ°œμƒν•˜κ±°λ‚˜ μž‘μ—…μ΄ μ œν•œ μ‹œκ°„μ„ λ„˜μ–΄μ„œ 싀행될 경우 μ•Œλ¦Όμ„ 받을 수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 μ˜ˆμ™Έ 상황을 μ‹ μ†ν•˜κ²Œ λŒ€μ‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

였라클 μŠ€μΌ€μ€„λŸ¬λŠ” λ°μ΄ν„°λ² μ΄μŠ€ 관리 μž‘μ—…μ„ μžλ™ν™”ν•˜κ³  효율적으둜 관리할 수 μžˆλŠ” κ°•λ ₯ν•œ λ„κ΅¬μž…λ‹ˆλ‹€. μž‘μ—… μ˜ˆμ•½κ³Ό μ‹€ν–‰, μ˜ˆμ™Έ 처리, μ•Œλ¦Ό λ“±μ˜ λ‹€μ–‘ν•œ κΈ°λŠ₯을 μ œκ³΅ν•˜μ—¬ λ°μ΄ν„°λ² μ΄μŠ€ 운영 및 μœ μ§€λ³΄μˆ˜ μž‘μ—…μ„ 효율적이고 μ•ˆμ •μ μœΌλ‘œ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ°μ΄ν„°λ² μ΄μŠ€ λ˜λŠ” νŠΉμ • μž‘μ—…μ˜ μžλ™ν™”λ₯Ό μœ„ν•΄ μ‚¬μš©λ˜λŠ” 도ꡬ

였라클 μŠ€μΌ€μ€„λŸ¬

였라클 μŠ€μΌ€μ€„λŸ¬λŠ” λ°μ΄ν„°λ² μ΄μŠ€ λ˜λŠ” νŠΉμ • μž‘μ—…μ„ μžλ™ν™”ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” κ°•λ ₯ν•œ λ„κ΅¬μž…λ‹ˆλ‹€. 이 도ꡬλ₯Ό μ‚¬μš©ν•˜μ—¬ μž‘μ—…μ„ μ˜ˆμ•½ν•˜κ³  관리할 수 있으며, λ‹€μ–‘ν•œ κΈ°λŠ₯을 μ œκ³΅ν•˜μ—¬ λ°μ΄ν„°λ² μ΄μŠ€ 관리 μž‘μ—…μ„ 효율적으둜 μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μž‘μ—… μ˜ˆμ•½κ³Ό 관리

였라클 μŠ€μΌ€μ€„λŸ¬λ₯Ό μ‚¬μš©ν•˜λ©΄ νŠΉμ • μ‹œκ°„λŒ€μ— μž‘μ—…μ„ μ˜ˆμ•½ν•˜κ³  μžλ™μœΌλ‘œ μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 맀일 μƒˆλ²½μ— λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό λ°±μ—…ν•˜κ³ , μ£Όκ°„ λ³΄κ³ μ„œλ₯Ό μƒμ„±ν•˜λŠ” μž‘μ—…μ„ μ˜ˆμ•½ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 일상적인 μž‘μ—…μ„ μžλ™ν™”ν•˜μ—¬ μ‹œκ°„κ³Ό 인λ ₯을 μ ˆμ•½ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, μŠ€μΌ€μ€„λŸ¬λ₯Ό 톡해 μž‘μ—…μ˜ μš°μ„ μˆœμœ„μ™€ μ‹€ν–‰ μ£ΌκΈ° 등을 μ„€μ •ν•˜μ—¬ 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

반볡 μž‘μ—… μ˜ˆμ•½

μŠ€μΌ€μ€„λŸ¬λ₯Ό μ‚¬μš©ν•˜μ—¬ μž‘μ—…μ„ 주기적으둜 λ°˜λ³΅ν•˜μ—¬ μ˜ˆμ•½ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 맀주, 맀월 νŠΉμ • λ‚ μ§œμ™€ μ‹œκ°„μ— μž‘μ—…μ„ μ‹€ν–‰ν•˜λ„λ‘ μ˜ˆμ•½ν•  수 있으며, μ£ΌκΈ° 섀정을 톡해 μ •ν™•ν•œ λ™μž‘ μ£ΌκΈ°λ₯Ό μ‘°μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 반볡적인 μž‘μ—…μ„ 효율적으둜 μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ˜ˆμ™Έ μ²˜λ¦¬μ™€ μ•Œλ¦Ό

μŠ€μΌ€μ€„λŸ¬λ₯Ό μ‚¬μš©ν•˜λ©΄ μ˜ˆμ™Έ 상황에 λŒ€ν•œ 처리 방법을 μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μž‘μ—… μ‹€ν–‰ 쀑 μ—λŸ¬κ°€ λ°œμƒν•˜κ±°λ‚˜ μž‘μ—…μ΄ μ œν•œ μ‹œκ°„μ„ μ΄ˆκ³Όν•  경우 μ•Œλ¦Όμ„ 받을 수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 μ˜ˆμ™Έ 상황에 λŒ€ν•œ λΉ λ₯Έ λŒ€μ‘μ΄ κ°€λŠ₯ν•˜λ©°, μž‘μ—…μ˜ μ•ˆμ •μ„±κ³Ό 신뒰성을 ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

λ‹€μ–‘ν•œ μž‘μ—… μœ ν˜• 지원

였라클 μŠ€μΌ€μ€„λŸ¬λŠ” λ‹€μ–‘ν•œ μž‘μ—… μœ ν˜•μ„ μ§€μ›ν•©λ‹ˆλ‹€. 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μ΄λΌλŠ” μ΄λ¦„μ˜ μž‘μ—…μ„ μ‚­μ œν•˜λŠ” μ˜ˆμ œμž…λ‹ˆλ‹€. μž‘μ—…μ΄ μ‚­μ œλ˜λ©΄ 더 이상 μ˜ˆμ•½λœ μž‘μ—…μ΄ μ‹€ν–‰λ˜μ§€ μ•Šκ²Œ λ©λ‹ˆλ‹€.

였라클 μŠ€μΌ€μ€„λŸ¬λ₯Ό μ‚¬μš©ν•˜λ©΄ λ°μ΄ν„°λ² μ΄μŠ€ μž‘μ—…μ„ μžλ™ν™”ν•˜μ—¬ μΌμ •ν•œ κ°„κ²©μœΌλ‘œ μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μž‘μ—…μ˜ 생성, λͺ¨λ‹ˆν„°λ§, μ‚­μ œ 방법을 읡히고 μ‹€μ œ μ—…λ¬΄μ—μ„œ ν™œμš©ν•΄ λ³΄μ„Έμš”.

λŒ“κΈ€