溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle Scheduler能實現(xiàn)哪些功能

發(fā)布時間:2021-12-22 09:28:55 來源:億速云 閱讀:159 作者:iii 欄目:關系型數(shù)據(jù)庫

這篇文章主要介紹“Oracle Scheduler能實現(xiàn)哪些功能”,在日常操作中,相信很多人在Oracle Scheduler能實現(xiàn)哪些功能問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”O(jiān)racle Scheduler能實現(xiàn)哪些功能”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

Oracle Scheduler可以幫助DBA或者數(shù)據(jù)庫用戶自動調(diào)度和運行各種類型的作業(yè),比如數(shù)據(jù)庫備份、收集優(yōu)化器統(tǒng)計信息、生成各種報表或者執(zhí)行業(yè)務流程等等,也可以把Schedule和Resource Manager結(jié)合起來通過時間窗口激活指定的Resource Plan,完成企業(yè)在資源管理和作業(yè)調(diào)度上的各種復雜需求,在10g之前可以通過DBMS_JOB工具來實現(xiàn)類似的功能,但毫無疑問,DBMS_SCHEDULER的靈活性和多樣性比起老版本工具都有了極大的提升。

一,功能概述
 Oracle Scheduler到底可以實現(xiàn)那些具體功能呢?來看一下官方文檔給出的解釋:

 . Run database program units
    可以在本地或者遠程數(shù)據(jù)庫執(zhí)行的數(shù)據(jù)庫程序包括:PL/SQL 匿名塊、PL/SQL 存儲過程、JAVA 存儲過程以及鏈

 . Run external executables, (executables that are external to the database)
    執(zhí)行外部的可執(zhí)行文件,包括應用程序、Shell腳本、Windows批處理文件,如果要在遠程主機執(zhí)行外部作業(yè),遠程主機只需要安裝Agent而不需要Database

 . Schedule job execution using the following methods:
    .Time-based scheduling
        You can schedule a job to run at a particular date and time, either once or on a repeating basis.
    .Event-based scheduling
        You can start jobs in response to system or business events. Your applications can detect events and then signal the Scheduler. Depending on the type of signal         sent, the Scheduler starts a specific job. 
    .Dependency scheduling
        You can set the Scheduler to run tasks based on the outcome of one or more previous tasks. You can define complex dependency chains that include branching         and nested chains.

 . Prioritize jobs based on business requirements.
    .Controlling Resources by Job Class
        把有相同特性的Job指定到一個Job Class,再把Job Class映射到Resource Consumer Group,實現(xiàn)對調(diào)度作業(yè)的資源分配控制
    .Controlling Job Prioritization based on Schedules
        通過時間窗口改變作業(yè)的優(yōu)先等級,創(chuàng)建Window在一個時間范圍激活相應的 Resource Plan 來控制不同作業(yè)在不同時段的優(yōu)先等級

 . Manage and monitor jobs

 . Execute and manage jobs in a clustered environment
 

    支持在RAC環(huán)境管理調(diào)度作業(yè)

二,基本概念
Oracle Scheduler包含的主要對象包括:Schedule,Program,Job,Job Class,Chain,Window,Database Destination,File Watcher,Credential ...具體介紹如下:

. Schedule (時間)
    通過 DBMS_SCHEDULER 包中的過程 CREATE_SCHEDULE 定義調(diào)度的開始時間,結(jié)束時間以及重復間隔
    CREATE_EVENT_SCHEDULE 過程用來創(chuàng)建由事件觸發(fā)的時間表,由一個特定時間段內(nèi)的一個事件調(diào)起一項任務

. Program (程序)
    定義了作業(yè)的形式及內(nèi)容,作業(yè)形式可以是PL/SQL 匿名塊,也可以是存儲過程或者外部可執(zhí)行文件,執(zhí)行的存儲過程帶有輸入?yún)?shù)時必須以匿名塊運行

. Job (作業(yè))
    通過CREATE_JOB創(chuàng)建一個作業(yè),這個存儲過程使用了重載,所以輸入?yún)?shù)的選擇可以非常靈活,既可以獨立設置作業(yè)的時間、內(nèi)容、Job Class,也可以引用已     經(jīng)存在的Schedule 和 Program 來簡化作業(yè)的創(chuàng)建

. Job Class (作業(yè)類)

    作業(yè)類中定義了Resource Consumer Group ,Service(RAC),日志等級,日志保留時間。要注意的一點是在Resource Manager中,service 參數(shù)會將會話映射到一個 資源用戶組,如果同時指定了RAC節(jié)點和用戶組,用戶組參數(shù)優(yōu)先

. Chain (鏈)
    說白了就是一系列的作業(yè)通過鏈來建立起一套依賴關系,大概的思路是這樣的:先使 CREATE_CHAIN 創(chuàng)建一個鏈,再通過 DEFINE_CHAIN_STEP 和 DEFINE_CHAIN_EVENT_STEP 給要鏈接的 Program、Sub Chain、Event Condition、Event Schedule 分別定義一個別名(step_name),然后拿 DEFINE_CHAIN_RULE 定義這些 Step 的依賴規(guī)則,一通判斷、分支、嵌套之后,鏈就算創(chuàng)建完成了,在 CREATE_JOB 時 (job_type => 'CHAIN',job_action => 'chain_name') 就可以了,做人得講究,這個必須上圖:

Oracle Scheduler能實現(xiàn)哪些功能

. Window (窗口)

    窗口指的是一個介于開始時間和結(jié)束時間之間的時間段,(為什么這么簡單的一個概念被我說的如此繞口,我的小學語文老師呢?您有話要說嗎。。),通常用來調(diào)起作業(yè),或者在不同的時間段激活不同的 Resource Plan 以調(diào)整作業(yè)之間的資源分配,文檔中還提到了 Overlapping Windows ,暫不研究了,來吧,有圖有真相:

Oracle Scheduler能實現(xiàn)哪些功能

. Database Destination (數(shù)據(jù)庫路徑
)
    通過 CREATE_DATABASE_DESTINATION 創(chuàng)建,在 CREATE_JOB 中作為一個輸入?yún)?shù),用來執(zhí)行遠程調(diào)度

Credential (證書)
     證書用來保存OS或者數(shù)據(jù)庫的用戶密碼,在執(zhí)行External Job 或者遠程數(shù)據(jù)庫作業(yè)時使用

. File Watcher (文件監(jiān)視器)
    這個好玩。??梢杂脕頇z測一個OS文件是否存在,根據(jù)文件大小判斷傳輸是否完成,繼而觸發(fā)一個 Event Schedule

 . Lightweight Job (輕量級作業(yè),為什么我的顏色不對呢?
    11gR1之前不被支持,通過 job_style 指定,輕量級作業(yè)并不是一個調(diào)度器對象,它適用于多個頻繁執(zhí)行的小作業(yè),看看官方文檔的介紹:

  • Unlike regular jobs, they are not schema objects.

  • They have significantly better create and drop times over regular jobs because they do not have the overhead of creating a schema object.

  • They have lower average session create time than regular jobs.

  • They have a small footprint on disk for job metadata and run-time data.

三,創(chuàng)建過程
--官方語法:








1,創(chuàng)建調(diào)度作業(yè)執(zhí)行一個 Shell 腳本

執(zhí)行Shell 腳本會在/tmp 生成一個文件:

  1. [oracle@ASM ~]$ cat /tmp/job.sh

  2. #!/bin/bash


  3. /bin/touch /tmp/abc.txt

創(chuàng)建證書,創(chuàng)建并立即執(zhí)行作業(yè):

  1. SQL> exec dbms_scheduler.create_credential('CRE1','user1','abcd1234')


  2. PL/SQL procedure successfully completed.


  3. SQL> exec dbms_scheduler.create_job(dbms_scheduler.generate_job_name,'EXECUTABLE','/tmp/job.sh',0,'','','','DEFAULT_JOB_CLASS',TRUE,FALSE,'Test.','CRE1')


  4. PL/SQL procedure successfully completed.


  5. SQL> select job_name,state,run_count,failure_count,raise_events from dba_scheduler_jobs where comments='Test.';


  6. JOB_NAME   STATE            RUN_COUNT FAILURE_COUNT RAISE_EVENTS

  7. ---------- --------------- ---------- ------------- --------------------

  8. JOB$_127   SUCCEEDED                1             0


  9. SQL> select JOB_NAME,STATUS,CREDENTIAL_NAME,ADDITIONAL_INFO from dba_scheduler_job_run_details where job_name='JOB$_127';


  10. JOB_NAME   STATUS     CREDENTIAL ADDITIONAL_INFO

  11. ---------- ---------- ---------- --------------------------------------------------------------------------------

  12. JOB$_127   SUCCEEDED  CRE1       EXTERNAL_LOG_ID="job_74659_457",

  13.                                  USERNAME="user1"

檢查作業(yè)是否執(zhí)行成功

  1. [oracle@ASM ~]$ ls /tmp/abc.txt

  2. /tmp/abc.txt

2,分別執(zhí)行SQL語句、匿名塊、PL/SQL 存儲過程

  1. SQL> exec dbms_scheduler.create_job(dbms_scheduler.generate_job_name,'PLSQL_BLOCK','insert into scott.t1(dname) values(''BLOCK'');',0,'','','','DEFAULT_JOB_CLASS',TRUE,FALSE,'Test_1')


  2. PL/SQL procedure successfully completed.


  3. SQL> exec dbms_scheduler.create_job(dbms_scheduler.generate_job_name,'PLSQL_BLOCK','BEGIN p2(''50'',''t'',''t''); END;',0,'','','','DEFAULT_JOB_CLASS',TRUE,FALSE,'Test_3')


  4. PL/SQL procedure successfully completed.


  5. SQL> exec dbms_scheduler.create_job(dbms_scheduler.generate_job_name,'STORED_PROCEDURE','p1',0,'','','','DEFAULT_JOB_CLASS',TRUE,FALSE,'Test_2')


  6. PL/SQL procedure successfully completed.

3,創(chuàng)建 Program 并在 Job 中引用

  1. SQL> exec dbms_scheduler.create_program('TEST1','PLSQL_BLOCK','BEGIN p2(''50'',''t'',''t''); END;',0,TRUE,'Pro_1')


  2. PL/SQL procedure successfully completed.


  3. SQL> exec dbms_scheduler.create_job(dbms_scheduler.generate_job_name,program_name => 'TEST1',repeat_interval => '',end_date => '',enabled => TRUE ,auto_drop => FALSE,comments => 'Test_9')


  4. PL/SQL procedure successfully completed.

4,創(chuàng)建 Job 時分別引用 Program 和 Schedule

  1. SQL> BEGIN

  2.   2  DBMS_SCHEDULER.CREATE_SCHEDULE(

  3.   3  SCHEDULE_NAME => 'sch2',

  4.   4  START_DATE => sysdate,

  5.   5  END_DATE => sysdate+3650,

  6.   6  REPEAT_INTERVAL => 'freq=yearly; bymonth=jan,apr,jul,oct; bymonthday=2',    --10年時間里每年每個季度的第一個月的第二天執(zhí)行作業(yè)

  7.   7  COMMENTS => 'Quarterly Report.'

  8.   8 );

  9.   9  END;

  10.  10  /


  11. PL/SQL procedure successfully completed.


  12. SQL> BEGIN

  13.   2  DBMS_SCHEDULER.CREATE_JOB(

  14.   3  dbms_scheduler.generate_job_name,

  15.   4  PROGRAM_NAME=>'TEST1',

  16.   5  SCHEDULE_NAME=>'sch2',

  17.   6  ENABLED=>TRUE,

  18.   7  AUTO_DROP=>FALSE,

  19.   8  COMMENTS=>'Test_99'

  20.   9 );

  21.  10  END;

  22.  11  /


  23. PL/SQL procedure successfully completed.


四、dbms_scheduler包一些視圖
--*代表all或dba或user

--5.1.查看job的視圖
dba_scheduler_jobs -          -查看job
dba_scheduler_job_args        --查看job的所有輸入?yún)?shù)
*_scheduler_job_classes       --查看job的類信息
*_scheduler_job_dests         --查看job狀態(tài)
*_scheduler_job_log           --查看job日志
*_scheduler_job_run_details   --查看job執(zhí)行的詳細信息
*_scheduler_running_jobs

--5.2.查看chain的一些視圖
*_scheduler_chains
*_scheduler_chain_rules
*_scheduler_chain_steps
*_scheduler_running_chains   --查看正在執(zhí)行的chains

--5.3.查看program的視圖
*_scheduler_programs         --查看程序
*_scheduler_program_args     --查看程序參數(shù)

--5.4.查看調(diào)度組scheduler_group信息
*_scheduler_groups
*_scheduler_group_members

--5.5.查看window的視圖(這類視圖只有dba和all開頭的)
*_scheduler_windows          --查看window
*_scheduler_window_details   --查看window詳細信息
*_scheduler_window_groups    --查看window組
*_scheduler_window_log       --查看window日志
*_scheduler_wingroup_members --查看window成員

--5.6.查看scheduler視圖
*_scheduler_schedules        --查看調(diào)度
*_scheduler_global_attribute --顯示所有的調(diào)度屬性
*_scheduler_credentials
*_scheduler_db_dests
*_scheduler_dests
*_scheduler_external_dests
*_scheduler_file_watchers
*_scheduler_notifications
*_scheduler_remote_databases
*_scheduler_remote_jobstate

到此,關于“Oracle Scheduler能實現(xiàn)哪些功能”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI