Sử dụng bộ lập lịch

Một phần của tài liệu đề thi quản trị cơ sở dữ liệu phân tán 5 (Trang 41 - 109)

CSDL Oracle cung cấp khả năng tác vụ CSDL qua bộ lập lịch Oracle(Bô lập lịch).

Sử dụng nhiều thành phần khác nhau của bộ lập lịch và các chủ đề:

• Các đối tượng bộ lập lịch và tên của chúng-Scheduler Objects and Their Naming Mỗi đối tượng bộ lập lịch là đối tượng lược đồ CSDL hoàn chỉnh dạng tên

[schema.]name. Các đối tượng lập lịch theo chính xác các luật tên cho các đối tượng CSDL và chia xẻ không gian tên SQL với các đối tượng CSDL khác.

Khi các tên cho đối tượng lập lịch được dùng trong gói DBMS_SCHEDULER , các luật tên SQL cũng tiếp tục được tuân theo . Mặc định là chữ hoa trừ khi giói hạn bằng ngoặc kép. VD:khi tạo môt tác vụ, job_name => 'my_job' ~ job_name => 'My_Job' ~ job_name => 'MY_JOB', nhưng không giống job_name => '"my_job"'. Các luật tên này

cũng tuân thủ khi liệt kê dsach phân cáh bằng dấu phẩy của đối tượng lập lịch trong gói DBMS_SCHEDULER package.

• Sử dụng các tác vụ-Using Jobs

Job là tổ hợp của một lập lịch và chương trình với các biên bổ sung bởi chương trình. Ta xem một số job cơ bản :

• Các nhiệm vụ cua job và các thủ tục của nó-Job Tasks and Their Procedures Các nhiệm vụ chung và thủ tục cùng đặc quyền tương ứng:

Table 27-1 Job Tasks and Their Procedures

Task Procedure Privilege Needed

Create a job CREATE_JOB CREATE JOB or CREATE ANY JOB

Alter a job SET_ATTRIBUTE ALTER or CREATE ANY JOB or be the owner Run a job RUN_JOB ALTER or CREATE ANY JOB or be the owner Copy a job COPY_JOB ALTER or CREATE ANY JOB or be the owner Drop a job DROP_JOB ALTER or CREATE ANY JOB or be the owner Stop a job STOP_JOB ALTER or CREATE ANY JOB or be the owner Disable a job DISABLE ALTER or CREATE ANY JOB or be the owner Enable a job ENABLE ALTER or CREATE ANY JOB or be the owner

• Creating Jobs

Sử dụng thủ tục CREATE_JOB hay bộ quản trị hãng .Khi tạo job, phải đặc tả hành động, lập lịch, các thuộc tính khác. VD: tạo thủ tục tên update_sales , gọi thủ tục lưu sẵn trong lược đồ OPS cập nhật bảng summary sales:

BEGIN

DBMS_SCHEDULER.CREATE_JOB ( job_name => 'update_sales',

job_type => 'STORED_PROCEDURE',

job_action => 'OPS.SALES_PKG.UPDATE_SALES_SUMMARY', start_date => '28-APR-03 07.00.00 PM Australia/Sydney',

repeat_interval => 'FREQ=DAILY;INTERVAL=2', /* every other day */

end_date => '20-NOV-04 07.00.00 PM Australia/Sydney', job_class => 'batch_update_jobs',

comments => 'My new job');

END;

/

Có thể tạo job theo lược đồ khác bằng cách đặc tả schema.job_name . người tạo job vì vậy không nhất thiết là người sở hữu. Người sử hữu là người sử dụng lược đồ của mình tạo ra, trong khi người tạo job là nsd job họ tạo ra. Job được vận hành với đặc quyền của lược đồ trong đó job được tạo ra. Môi trương NSL(?) của job khi chạy là những gì nó có được khi job được tạo

Sau khi job được tạo, nó có thể được truy vấn khi dùng *_SCHEDULER_JOBS views.

Các job được tạo mặc định bị vô hiệu hóa và cần enable để chạy khi cần.

Các job được thiết lập tự động bị hủy mặc định sau khi nó đã xong. Thiết lập thuộc tính auto_drop thành FALSE làm job nhất quán. Chú ý các job lặp lại không tự động hủy trừ khi nó đạt đến giới hạn( số chạy lớn nhất(max_runs) hay số sự cố lớn nhất(max_failures) Setting Job Attributes(Thiết lập thuộc tính job)

Có thể thiết lậpj ttinh job khi tạo hay thiết lập sau khi tạo dùng thủ tục

SET_ATTRIBUTE hay Enterprise Manager (Một vài ttinh job có thể chỉ được thiết lập với thủ tục SET_ATTRIBUTE hay Enterprise Manager )

Setting Job Arguments(Thiết lập các biến job) Sau khi tạo job, cần thiết lập các biến job nếu:

• Hoạt động job inline là thủ tục được lưu hay các vận hành khác đòi hỏi các biến

• Job tham chiếu một đối tượng chương trình có tên và ta muốn đè lên một hay nhiều biến chương trình mặc định

• Job tham chiếu một đối tượng chương trình có tên và 1 hay nhiều biên chương trìnhf là không được gán gtri mặc định

Để thiết lập các biến job, dùng thủ tục SET_JOB_ARGUMENT_VALUE hay SET_JOB_ANYDATA_VALUE procedures hay Enterprise Manager.

SET_JOB_ANYDATA_VALUE được dùng cho các kiểu dữ liệu phức tạp nhưng được đóng gói trong một đối tượng ANYDATA.

Ví dụ một job cần cqacs biến nó bắt đầu một chương trình báo cáo yêu cầu ngày bắt đầu và kết thúc . Sau đây thiết lập biến ngày kết thúc với biến thứ hai là từ chương trình báo cáo:

BEGIN

DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE ( job_name => 'ops_reports',

argument_position => 2,

argument_value => '12-DEC-03');

END;

/

Nếu sử dụng thủ tục này trên các biến mà gtri của nó đã được thiết lập nó sẽ bị ghi đè. Ta cần thiết lập các gtri biến dùng hoawcjteen biến hoawcjvij trí biến, Để dùng tên biến, job phải tham chiếu đối tượng chương trình và biến phải được gán một tên trong đtương chương trình. Nếu chương trình là inline, chỉ việc thiết lập vi trí được hỗ trợ. Các biến không được hỗ trợ cho các job kiểu plsql_block.

Để chuyển các gtri đã được thiết lập, dùng thủ tục RESET_JOB_ARGUMENT . Thủ tục này có thể được dùng cho cả các biến thông thường và ANYDATA

Ways of Creating Jobs (Các cách tạo job)

Dùng thủ tục CREATE_JOB hay Enterprise Manager. Vì các thủ tục này là xếp chồng nên có vài cách khác nhau dùng nó. Theemnwax để inlining một job trong khi tạo job, cần tạo job trỏ đến chương trình hay lập lịch đã gán tên. Ta sẽ bàn:

• Creating Jobs Using a Named Program

• Creating Jobs Using a Named Schedule

• Creating Jobs Using a Named Program and Schedule

Creating Jobs Using a Named Program(Tạo job dùng tên chương trình)

Ta có thể tạo job với tên chương trìnhf thay cho hành động inlining của nó. Để tạo job như vậy, ta đặc tả gtri program_name trong thủ tục CREATE_JOB khi tạo job và không đặc tả các gtri job_type, job_action & number_of_arguments.

Để dùng một chương trình đã có khi tạo job, người sở hữu của job phải là người sở hữu chương trình hay có quyền EXECUTE trên đó. VD: dùng thủ tục CREATE_JOB với chương trìnhf đã có tên để tạo job my_new_job1

BEGIN

DBMS_SCHEDULER.CREATE_JOB ( job_name => 'my_new_job1',

program_name => 'my_saved_program',

repeat_interval => 'FREQ=DAILY;BYHOUR=12', comments => 'Daily at noon');

END;

/

Creating Jobs Using a Named Schedule(Tạo job dùng lập lịch đã có tên)

Có thể tạo job bằng cách trỏ đến tên lập lịch thay cho lập lịch inlining của nó. Để tạo job làm việc đó, ta đặc tả giá trị tên schedule_name trong thủ tục CREATE_JOB khi tạo job và không đặc tả các gtri cho start_date, repeat_interval, và end_date.

Ta có thể dùng bất kỳ tên lập lịch nào để tạo job và mọi lập lịch được tạo để truy nhập đến PUBLIC. VD dùng thủ tục CREATE_JOB với lập lịch đã có tên theo lệnh sau với việc tạo job có tên my_new_job2:

BEGIN

DBMS_SCHEDULER.CREATE_JOB ( job_name => 'my_new_job2', job_type => 'PLSQL_BLOCK',

job_action => 'BEGIN SALES_PKG.UPDATE_SALES_SUMMARY;

END;',

schedule_name => 'my_saved_schedule');

END;

/

Creating Jobs Using a Named Program and Schedule(Tạo job dùng chương trình và lập lịch đã có tên)

Job có thể được tao bằng cách trỏ đến cả chương trìnhf và lập lịch. Ví dụ dùng thủ tục CREATE_JOB với tên chương trình và lập lịch bởi câu lệnh sau, tạo job mới có tên my_new_job3 dựa trên chương trình my_saved_program1 và lập lịch

my_saved_schedule1 đã có : BEGIN

DBMS_SCHEDULER.CREATE_JOB ( job_name => 'my_new_job3',

program_name => 'my_saved_program1', schedule_name => 'my_saved_schedule1');

END;

/

• Copying Jobs

Ta sao chép job dung thủ tục COPY_JOB hay Enterprise Manager. Nó gọi bản sao của mọi thuộc tính của job cũ đến job mới trừ khi job mới được tạo lại disable và có tên khác đi

• Altering Jobs

Ta thay đổi job bằng SET_ATTRIBUTE procedure hay Enterprise Manager. Mọi job có thể thay đổi trừ tên job, mọi thuộc tính có thể thay đổi. Và nêu một thể hiện của job đang chạy khi gọi SET_ATTRIBUTE tạo ra, nó không ảnh hưởng bởi lời gọi. Sự thay đổi chỉ nhìn thấy trong tơng lai.

Nói chung không nên thay đổi job đã được tạo tự động bởi CSDL. Job được tạo bởi CSDL có cột SYSTEM được thiết lập TRUE trong job view . Các ttinh của job có sẵn trong *_SCHEDULER_JOBS views.

Giá trị thực hoàn hảo cho việc chạy các job để thay đổi các ttinh của chính job dùng thủ tục SET_ATTRIBUTE , tuy nhiên sự thay đổi này sẽ không lấy được cho tới khi việc chạy lập lịch tới của job.

• Running Jobs

Thông thường, các job chạy bất đồng bộ.NSD tạo một job và API lập tức trả lại và chỉ thị liêu việc tạo có thành công hay không. Để tìm ra liệu job có tành công hay không, nsd phải truy vấn bảng job hay log job. Trong khi đó là hành vi mong muốn, với nhiều trường hợp đặc biệt, CSDL cũng cho phép nsd chay các job một cách đồng bộ.

Running Jobs Asynchronously(Cahyj các job không đồng bộ)

Ta có thể tạo một job chạy không đbộ dựa trên lập lịch đã định nghĩa khi job được tạo. Trong trường hợp này, job được đệ trình đến bộ phối hợp job và được nhặt ra bởi các slave job để chạy

Running Jobs Synchronously(Chạy các job đồng bộ)

Sau khi job đã được tạo, ta có thể chạy job đbộ dùng thủ tục RUN_JOB với việc dùng biến use_current_session thiết lập TRUE. Trong trường hợp này, job sẽ chạy trong phiên nsd viện dẫn lời gọi RUN_JOB thay cho bị nhặt bởi bộ phối hợp và vận hành bởi slave job.

Ta có thể sử dụng thủ tục RUN_JOB để ktra một job hay chạy job bên ngoai của lập lịch đặc tả. Việc chạy một job với RUN_JOB với biên

use_current_session thiết lập TRUE không thay đổi việc đếm cho

failure_count và run_count với job. Việc Job chạy được phản ánh trong log job. Lỗi runtime phát ra bởi job quay lại bộ gọi RUN_JOB. .

Khi dùng RUN_JOB để chạy một job, no chỉ ra một xích, use_current_session phải được thiết lập FALSE. Job Run Environment (Môi trường chạy job)

Các job được chay với đặc quyền được gán đến người sở hữu trực tiếp hay gián tiếp qua vai đăng nhập mặc định. Vai OS bên ngoài không được hỗ trợ. Đặc quyền có ý nghĩa đã cho, nsd có thể tạo các job trong lược đồ của nsd khác.

Người tạo và sở hữu job có thể khác nhau.VD: nếu jim có đặc quyền CREATE ANY JOB và tạo một job trong lược đồ scott, thì job sẽ chay với đặc quyền của scott.

Môi trường NLS của phiên trong đó job được tạo được lưu lại và được dùng khi job đang được vận hành. Để thay đổi môi trương NLS trong đó 1 job chạy, job cần được tạo trong phiên với thiết lập NLS khác.

Running External Jobs( Chạy các job ngoài)

Một job ngoài là một job chạy ngoài CSDL. Mọi job ngoài chạy như một nsd guest quyền thấp khi đã được xác định bởi người quản trị CSDL trong khi cấu hinhfhoox trợ job ngoài. Vì việc vhanh sẽ chạy như một account guest quyền thấp, ta cần ktra nó đã truy nhhaapj file hay tài nguyên chưa. Hầu hết nhưng không phải tất cả các nền hỗ trợ các job ngoài.Với các platform không hỗ trwoj như thế, việc tạo hay thiết lập ttinh của một job hay một chương trình kiểu EXECUTABLE trả về một lỗi. Xem thêm tài liệu

Với job ngoài, job_type được đặc tả như EXECUTABLE(nếu dùng các chương trình có tên thì program_type sẽ là EXECUTABLE). job_action (hay program_action tương ứng nếu dùng chương trình được gán tên) là đường dẫn phụ thuộc OS đầy đủ của vận hành bên ngoài thêm tùy chọn các biến dòng lệnh. VD: , /usr/local/bin/perl or C:\perl\bin\perl . Cac biên chương trình hay job cho kiểu EXECUTABLE phải là một kiểu string như CHAR, VARCHAR2, or VARCHAR.

Một vài bước bổ sung sau cài đặt phải được yêu cầu rằng các job ngoài chạy như một nsd guest quyền thấp. Xem tài liệu đặc tả hệ thống cho bất kỳ các bước cấu hình sau cài đặt.

Capturing Standard Error Output for External Jobs(Bắt các đầu ra chuẩn cho các job ngoài)

Khi một job ngoài viết ra stderr , 200B đầu được ghi lại trong cột

additional_info của *_SCHEDULER_JOB_RUN_DETAILS. Thông tin là trong dạng cặp tên/giá tri:

STANDARD_ERROR="text"

• Stopping Jobs

Ta dừng 1 hay nhiêu job sử dụng thủ tục STOP_JOB và Enterprise Manager.

STOP_JOB chấp nhận dsach các lớp job phân cách dấu phẩy. Nếu một lớp job được cung cấp, mọi job đang chạy trong lớp job bị dung. VD: lệnh dừng job1 và mọi job thuốc lớp job dw_jobs:

BEGIN

DBMS_SCHEDULER.STOP_JOB('job1, sys.dw_jobs');

END;

/

Mọi thể hiện của các job được gán bị dừng lại. Sau khi dừng job, trạng thái của job on- time thiết lập STOPPED, trạng thái của các job lặp lại thiết lập SCHEDULED(vì việc chạy tiếp theo của job đã được lập lịch). Thêm nữa, một lối vào được tạo trong log job với OPERATION thiết lập ‘STOPPED’ và ADDITIONAL_INFO được thiết lập 'REASON="Stop job called by user: username"'.

MẶc định, các bộ lập lịch có gắng dừng nhẹ nhàng một job dùng có chế ngắt. Pphap này cho đkhiển lại các quá trình slave, chúng có thể thu thập các thống kê của việc chạy job. Nêu tùy chọn forrce là TRUE thì job sẽ kết thúc bất thường và một số thống kê sẽ không dành sẵn cho việc chay job.

Dừng một job đang chy một xích sẽ dừng mmoij bước đang chạy(bằng việc gọi STOP_JOB với tùy chọn thiết lập TRUE treenmooix bước)

Khi job bị dừng, chỉ có gdich hiện thời được rollback. Vì thế dữ liệu sẽ không nhất quán

Stopping External Jobs(Dừng các job ngoài)

Các bộ lập lịch đưa ra công cụ của các job ngoài một cơ chế xóa nhẹ nhàng sau khi các job ngoài của chúng khi STOP_JOB được gọi với tùy chọn forrce là

FALSE. Trong UNIX, điều này được thực hiện bởi tín hiệu SIGTERM đến tiến trình đưa ra bởi một agent job ngoài. Công cụ của job ngoài la mong bẫy đượ

SIGTERM trong một đkhiển ngắt, xóa những công việc mà job đã làm và thoat.

Trong Windows, STOP_JOB với force thiết lập FALSE chỉ hỗ trợ Windows XP, Windows 2003, và các OS sau . Trên các platform khác, ttrinhf đưa ra bởi agent job ngoài là một ttrinh console. Để dừng nó, bộ lập lịch gửi tín hiệu

CTRL_BREAK đến ttrinh. CTRL_BREAK có thể được đkhiển bởi việc đăng ký một bộ đkhiển với chương trình con SetConsoleCtrlHandler()

• Dropping Jobs(hủy job)

Sử dung thủ tục the DROP_JOB hay Enterprise Manager .DROP_JOB chấp nhận một dsach job và lớp job phân cách bằng dấu phẩy. Nếu lớp job được cung cấp, mọi job trong lớp job bj hủy dù lớp job bản thân nó không bị hủy.

You drop a one or more jobs using the DROP_JOB procedure or Enterprise Manager. DROP_JOB accepts a comma-delimited list of jobs and job classes.

If a job class is supplied, all jobs in the job class are dropped, although the job class itself is not dropped.

Dropping a job results in the job being removed from the job table, its metadata being removed, and it no longer being visible in the

*_SCHEDULER_JOBS views. Therefore, no more runs of the job will be executed.

If an instance of the job is running at the time of the call, the call results in an error. You can still drop the job by setting the force option in the call to TRUE. Setting the force option to TRUE first attempts to stop the running job instance (by calling STOP_JOB with the force option set to FALSE), and then drops the job. By default, force is set to FALSE.

For example, the following statement drops jobs job1 and job3, and all jobs in job classes jobclass1 and jobclass2:

BEGIN

DBMS_SCHEDULER.DROP_JOB ('job1, job3, sys.jobclass1, sys.jobclass2');

END;

/

The DROP_JOB_CLASS procedure should be used to drop a job class. See

"Dropping Job Classes" for information about how to drop job classes.

See Oracle Database PL/SQL Packages and Types Reference for detailed information about the DROP_JOB procedure.

Disabling Jobs (Vô hiệu lực job)

Ta vô hiệu lực job bằng cách dùng thủ tục DISABLE hay Enterprise Manager. Một job có thể trở nên vô hiệu do một số nguyên nhân khác: lớp job chứa job bị drop, chương trình hay thủ tục nó trỏ đến bị drop. Lưu ý rằng chương trình hay thủ tục job trỏ đến bị vô hiệu, job sẽ không bị vô hiệu và vì thế kết quả là lỗi khi bộ ll cố chạy job.

Vô hiệu job có nghĩa là dù metadata của job có ở đó, nó cũng không chạy và các bộ phối hợp job sẽ không nhặt được các job này để xử lý. Khi job là vô hiệu, state của nó trong bảng job bị thay đổi thành disable.

Khi một job bị vô hiệu với tùy chọn force thiết lập FALSE và job hiện đang chạy,một lỗi se được trả về. Khi force là TRUE, job sẽ bị vô hiệu, nhưng thể hiện hiện thời được phép kết thúc.

Ta có thể vô hiệu một vài job trong một lời gọi bằng cách cung cấp tên job hay lớp job khi gọi thủ tục DISABLE. Ví dụ lênh vô hiệu có cả job và lớp job:

BEGIN

DBMS_SCHEDULER.DISABLE('job1, job2, job3, sys.jobclass1, sys.jobclass2');

END;

/

• Enabling Jobs (Hiệu lực job)

Bạn hiệu lực một hay nhiều job bằng cách dùng thủ tục ENABLE hay Enterprise Manager . Ảnh hưởng của việc dùng thủ tục này là job sẽ không được nhặt bởi bộ phối hợp job cho xử lý. Job được tạo mặc định vô hiệu, ta

Một phần của tài liệu đề thi quản trị cơ sở dữ liệu phân tán 5 (Trang 41 - 109)

Tải bản đầy đủ (DOC)

(109 trang)
w