You are on page 1of 5

26/3/2017 Cấu hình thao tác tự động với Oracle Scheduler (P1) | Quân's blog

Cấu hình thao tác tự động với Oracle Scheduler (P1)
 An article by trungquan710      1 Comment

Từ các phiên bản cũ, Oracle đã cung cấp khả năng lập lịch tự động chạy task (tạo job) với package  DBMS_JOB.
Tuy nhiên cách này có nhiều hạn chế và bất tiện. Do đó, từ phiên bản 10g, Oracle cung cấp Scheduler để  thay thế
cho DBMS_JOB, hỗ trợ đa năng, mạnh mẽ hơn trong việc tạo các thao tác tự động chạy theo lịch hẹn sẵn.

Các  phiên  bản  sau  này  vẫn  hỗ  trợ  DBMS_JOB,  nhưng  chỉ  nhằm  mục  đích  hỗ  trợ  tương  thích.  Ta  vẫn  nên
xài  Oracle  Scheduler  hơn.  Để  sử  dụng,  có  thể  dùng  package  DBMS_SCHEDULER  hoặc  dùng  giao  diện  trên
Enterprise Manager, hay các công cụ như Toad…

Do  nhiều  tính  năng  nên  cấu  trúc  của  Oracle  Scheduler  cũng  khá  phức  tạp,  với  nhiều  thành  phần  con:  jobs,
schedules, programs, job classes, windows… Ta sẽ tìm hiểu sơ qua định nghĩa về các đối tượng trong phần 1
này.

Các process và tham số liên quan
 

Trong database, tham số job_queue_processes quy định số process tối đa có thể sinh ra để chạy job. Nếu tham số
này bằng  0,  Oracle  Scheduler  coi  như  bị  disable  (kể  cả  DBMS_JOB  cũng  bị  disable).  Mặc  định  tham  số  này
là 1000, cũng là giá trị maximum cho phép.

1 SQL> show parameter job
2  
3 NAME             TYPE   VALUE
4 ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ ­­­­­­­­­­­ ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
5 job_queue_processes        integer   1000

Ở bài kiến trúc Oracle process ta đã biết được 2 process liên quan:

CJQ0: job coordinator process, monitor table DBA_SCHEDULER_JOBS, tạo các job slave process. Process này
có thể deactive/bị kill mà không làm crash database, vì sẽ tự động sinh ra lại khi cần thiết

Jnnn: các job slave process, chạy job

Program
https://trungquan710.com/oracle/cau­hinh­thao­tac­tu­dong­voi­oracle­scheduler­p1.html 1/5
 
26/3/2017 Cấu hình thao tác tự động với Oracle Scheduler (P1) | Quân's blog

Program là 1 đối tượng chỉ chứa thông tin về công việc/thao tác cần thực hiện. Do  đó  ta  có  thể  định  nghĩa


program, cùng với các tham số, để có thể tạo nhiều job khác nhau gọi program đó trong các tình huống khác nhau. 

Program có thể là 1 khối lệnh PL/SQL, 1 stored procedure hay 1 script lưu trữ bên ngoài database.

Schedule
 

Nếu program chỉ chứa thông tin về thao tác thì schedule chỉ chứa thông tin về lịch chạy: thời gian bắt đầu, thời
gian kết thúc, tần suất lặp lại (repeat interval).

Thời gian bắt đầu mặc định là thời điểm hiện tại. Thời gian kết thúc là thời điểm job không còn hiệu lực nữa. Tần suất
lặp lại ta có thể quy định bằng các giá trị

1 YEARLY
2 MONTHLY
3 WEEKLY
4 DAILY
5 HOURLY
6 MINUTELY
7 SECONDLY

và có thể chỉ định rõ thêm thời điểm bằng các giá trị

1 BYMONTH
2 BYWEEKNO
3 BYYEARDAY
4 BYMONTHDAY
5 BYHOUR
6 BYMINUTE
7 BYSECOND

VD:

– Chạy 6 tiếng 1 lần

https://trungquan710.com/oracle/cau­hinh­thao­tac­tu­dong­voi­oracle­scheduler­p1.html 2/5
1 repeat_interval=>'freq=hourly; interval=6'
26/3/2017 Cấu hình thao tác tự động với Oracle Scheduler (P1) | Quân's blog

– Chạy vào ngày 2 đầu mỗi tháng ở mỗi quý, ngay khi resource cho phép

1 repeat_interval=>'freq=yearly; bymonth=jan,apr,jul,oct; bymonthday=2'

– Chạy vào 6h10 mỗi sáng thứ 2, 2 tuần 1 lần

1 repeat_interval=>'freq=weekly; interval=2; byday=mon; byhour=6; byminute=10'

Job
 

Job là công việc/thao tác cần thực hiện tại 1 thời điểm xác định

Công việc: có thể là 1 câu SQL, 1 khối lệnh PL/SQL, 1 stored procedure, external procedure…

Thời điểm xác định: 1 thời điểm ngày giờ cụ thể, có thể bao gồm cả tần suất để lặp lại công việc

Job bao gồm 2 thành phần trên. Do đó ta có thể sử dụng DBMS_SCHEDULER.CREATE_JOB để tạo job theo nhiều
cách:

Công việc chi tiết + Thời điểm chi tiết

Program + Thời điểm chi tiết

Công việc chi tiết + Schedule

Program + Schedule

Tuy vậy, bình thường, ta hay tạo job với định nghĩa công việc và thời điểm chi tiết, mà ít khi sử dụng program và
schedule.

Chain
 

Chain là 1 chuỗi thao tác, sau khi chạy xong 1 program ta có thể gọi đến 1 program khác, hay 1 subchain, hay 1
event gì đó.
https://trungquan710.com/oracle/cau­hinh­thao­tac­tu­dong­voi­oracle­scheduler­p1.html 3/5
26/3/2017 Cấu hình thao tác tự động với Oracle Scheduler (P1) | Quân's blog

VD chain: chạy program A, sau đó chạy program B, nếu cả 2 thành công thì chạy program C, nếu không thì chạy
program D.

Job Class
 

Job class nhằm mục đích nhóm các job vào cùng 1 nhóm để gán vào consumer group phù hợp, nhằm sử dụng
hiệu quả tài nguyên. Nếu không chỉ định, mặc định các job sẽ nằm ở DEFAULT_JOB_CLASS.

Window
 

Thay vì cố định 1 thời điểm như schedule, window rộng rãi hơn khi quy định 1 khoảng thời gian. Trong khoảng
thời  gian  đó,  Oracle  sẽ  chọn  thời  điểm  phù  hợp  để  start  job.  Ta  cũng  có  thể  cấu  hình  Resource  plan  đi  kèm  với
window. Tại 1 thời điểm chỉ có thể active 1 window.

Window Group
 

Ta có thể nhóm nhiều window vào 1 window group để dễ quản lý theo nhu cầu.

Các quyền liên quan tới scheduler
 
CREATE JOB

CREATE ANY JOB

EXECUTE ANY PROGRAM

EXECUTE ANY CLASS

MANAGE SCHEDULER

EXECUTE ON

ALTER ON

ALL ON

Các view data dictionary
 
https://trungquan710.com/oracle/cau­hinh­thao­tac­tu­dong­voi­oracle­scheduler­p1.html 4/5
26/3/2017 Cấu hình thao tác tự động với Oracle Scheduler (P1) | Quân's blog

Để kiểm tra các thông tin liên quan đến Oracle Scheduler, có thể query trong các view DBA_SCHEDULER_* như:

– DBA_SCHEDULER_JOBS

– DBA_SCHEDULER_RUNNING_JOBS

– DBA_SCHEDULER_JOB_RUN_DETAILS

– DBA_SCHEDULER_PROGRAMS

– DBA_SCHEDULER_SCHEDULES…

https://trungquan710.com/oracle/cau­hinh­thao­tac­tu­dong­voi­oracle­scheduler­p1.html 5/5

You might also like