Professional Documents
Culture Documents
Job 1
Job 1
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/cauhinhthaotactudongvoioracleschedulerp1.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 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/cauhinhthaotactudongvoioracleschedulerp1.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/cauhinhthaotactudongvoioracleschedulerp1.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/cauhinhthaotactudongvoioracleschedulerp1.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/cauhinhthaotactudongvoioracleschedulerp1.html 5/5