Oracle Scheduler Chain 的用法

Oracle CHAIN恳守,也就是鏈,是將一串需要完成的作業(yè)連在一起,根據每一個步驟完成的不同結果來確定下面的哪一個動作需要被完成若河。實際上也就是if .. then ..else。比如给郊,可能有如下的定義牡肉,step 1成功執(zhí)行,執(zhí)行step 2淆九,如果step 1執(zhí)行失敗统锤,執(zhí)行step 3毛俏,如果step 2或step 3 執(zhí)行成功,退出整個chain饲窿,如果step 2 或step 3執(zhí)行失敗煌寇,發(fā)送郵件并退出。CHAIN的主要步驟包括定義程序(做什么)逾雄、定義CHAIN步驟(總步驟)阀溶,以及CHAIN的規(guī)則(如何做)。本文主要描述了chain的一些步驟并給出示例供大家參考鸦泳。有關job银锻,program可以參考Oracle在線文檔。

一做鹰、CHAIN定義及實施的主要步驟

1击纬、創(chuàng)建程序(定義每一步驟需要執(zhí)行的子程序,調用DBMS_SCHEDULER.create_program)

2钾麸、創(chuàng)建CHAIN(調用DBMS_SCHEDULER.create_chain)

3更振、定義CHAIN步驟(也就每一步的順序)

4、定義CHAIN規(guī)則(定義每一步的執(zhí)行結果成功或失敗后的處理方式)

5饭尝、激活CHAIN

6肯腕、將chain添加到job

7、CHAIN的單步調試

二钥平、演示CHAIN的用法

[sql]?view plain?copy

--演示環(huán)境??

scott@CNMMBO>select?*?from?v$version?where?rownum<2;??


BANNER??

----------------------------------------------------------------??

OracleDatabase?10g?Release?10.2.0.3.0?-?64bit?Production??


--創(chuàng)建演示表及序列??

CREATE?TABLE?tb_schduler??

(??

id????????NUMBER?(10)NOT?NULL,??

descr?????VARCHAR2?(20)NOT?NULL,??

cr_dateDATE?NOT?NULL,??

CONSTRAINT?tb_schduler_pk?PRIMARY?KEY?(id)??

);??


CREATE?SEQUENCE?tb_schduler_seq;??


1实撒、創(chuàng)建程序??

--下面定義了3個需要用到的程序program,注意這里的program不等同于procedure或者package帖池,但是可以調用procedure或package??

--下面的program主要是用于插入記錄到測試表??

BEGIN??

??DBMS_SCHEDULER.create_program?(??

program_name???=>'test_proc_1',??

program_type???=>'PLSQL_BLOCK',??-->這里的類型定義為PLSQL_BLOCK奈惑,支持STORED?PROCEDURE/EXECUTEABLE??

program_action?=>?'BEGIN??

INSERT?INTO?tb_schduler?(id,?descr,?cr_date)??

VALUES?(tb_schduler_seq.NEXTVAL,?''test_proc_1'',?SYSDATE);??

COMMIT;??

END;',??

enabled????????=>TRUE,??

comments???????=>'Program?for?first?link?in?the?chain.');??


??DBMS_SCHEDULER.create_program?(??

program_name???=>'test_proc_2',??

program_type???=>'PLSQL_BLOCK',??

program_action?=>?'BEGIN??

INSERT?INTO?tb_schduler?(id,?descr,?cr_date)??

VALUES?(tb_schduler_seq.NEXTVAL,?''test_proc_2'',?SYSDATE);??

COMMIT;??

END;',??

enabled????????=>TRUE,??

comments???????=>'Program?for?second?link?in?the?chain.');??


??DBMS_SCHEDULER.create_program?(??

program_name???=>'test_proc_3',??

program_type???=>'PLSQL_BLOCK',??

program_action?=>?'BEGIN??

INSERT?INTO?tb_schduler?(id,?descr,?cr_date)??

VALUES?(tb_schduler_seq.NEXTVAL,?''test_proc_3'',?SYSDATE);??

COMMIT;??

END;',??

enabled????????=>TRUE,??

comments???????=>'Program?for?last?link?in?the?chain.');??

END;??

/??


2、創(chuàng)建chain??

--創(chuàng)建chain比較簡單睡汹,通常只需要定義一個chain名字即可肴甸,主要是用于關聯(lián)后續(xù)定義rule及step??

BEGIN??

??DBMS_SCHEDULER.create_chain?(??

chain_name??????????=>'test_chain_1',???-->定義chain的名字??

rule_set_name???????=>NULL,?????????????-->可以指定規(guī)則集的名字??

evaluation_interval?=>NULL,??

comments????????????=>'A?test?chain.');??

END;??

/??


3、定義chain步驟??

--下面定義chain的每一個步驟以及其對應的program_name囚巴,也就是每一步需要做什么??

BEGIN??

??DBMS_SCHEDULER.define_chain_step?(??

chain_name???=>'test_chain_1',???--->chain的名字??

step_name????=>'chain_step_1',???--->步驟地名字??

program_name?=>'test_proc_1');???--->當前步驟應執(zhí)行的相應程序??


??DBMS_SCHEDULER.define_chain_step?(??

chain_name???=>'test_chain_1',??

step_name????=>'chain_step_2',??

program_name?=>'test_proc_2');??


??DBMS_SCHEDULER.define_chain_step?(??

chain_name???=>'test_chain_1',??

step_name????=>'chain_step_3',??

program_name?=>'test_proc_3');??

END;??

/??


4原在、定義chain規(guī)則??

--用于定義chain根據執(zhí)行結果應該如何跳轉的問題,每個CHAIN?規(guī)則都擁有condition和action?屬性彤叉,??

--當滿足condition?時則執(zhí)行action中指定的step庶柿。使用DBMS_SCHEDULER.DEFINE_CHAIN_RULE?過程??

BEGIN??

??DBMS_SCHEDULER.define_chain_rule?(??

chain_name?=>'test_chain_1',??

condition??=>'TRUE',??

action?????=>?'START?"CHAIN_STEP_1"',??

rule_name??=>'chain_rule_1',??

comments???=>'First?link?in?the?chain.');??


??DBMS_SCHEDULER.define_chain_rule?(??

chain_name?=>'test_chain_1',??

condition??=>'"CHAIN_STEP_1"?COMPLETED',??

action?????=>?'START?"CHAIN_STEP_2"',??

rule_name??=>'chain_rule_2',??

comments???=>'Second?link?in?the?chain.');??


??DBMS_SCHEDULER.define_chain_rule?(??

chain_name?=>'test_chain_1',??

condition??=>'"CHAIN_STEP_2"?COMPLETED',??

action?????=>?'START?"CHAIN_STEP_3"',??

rule_name??=>'chain_rule_3',??

comments???=>'Third?link?in?the?chain.');??


??DBMS_SCHEDULER.define_chain_rule?(??

chain_name?=>'test_chain_1',??

condition??=>'"CHAIN_STEP_3"?COMPLETED',??

action?????=>?'END',??

rule_name??=>'chain_rule_4',??

comments???=>'End?of?the?chain.');??

END;??

/??


5、激活chain??

BEGIN??

DBMS_SCHEDULER.enable?('test_chain_1');??

END;??

/??


6秽浇、將chain添加到job??

BEGIN??

??DBMS_SCHEDULER.CREATE_JOB?(??

job_name????????=>'test_chain_1_job',??

job_type????????=>'CHAIN',??

job_action??????=>'test_chain_1',??

repeat_interval?=>'freq=minutely;?interval=2',??

????start_date??????=>?SYSTIMESTAMP,??

????end_date????????=>?SYSTIMESTAMP?+?(1/48),??

enabled?????????=>FALSE);???--->值為TRUE用于激活JOB???

END;??

/??


7浮庐、手動執(zhí)行chain??

BEGIN??

??DBMS_SCHEDULER.run_chain?(??

chain_name????=>'test_chain_1',??

job_name??????=>'test_chain_1_run_job',??

start_steps???=>'chain_step_1,chain_step_3');??-->可以指定單步或多步以及所有步驟??

END;??

/??


scott@CNMMBO>select?*?from?tb_schduler;??


????????ID?DESCR????????????????CR_DATE??

----------?--------------------?-----------------??

?????????1?test_proc_1??????????20131203?14:36:03??

?????????2?test_proc_3??????????20131203?14:36:04??


--激活job?????

scott@CNMMBO>exec?dbms_scheduler.enable('test_chain_1_job');??


PL/SQLprocedure?successfully?completed.??

三、CHAIN相關狀態(tài)及視圖查詢??

[sql]?view plain?copy

scott@CNMMBO>?@job_chains??????????????--->數(shù)據字典dba_scheduler_chains??


OWNER??????CHAIN_NAME??????RULE_SET_O?RULE_SET_NAME???NUMBER_OF_RULES?NUMBER_OF_STEPS?ENABL?COMMENTS??

----------?---------------?----------?---------------?---------------?---------------?-----?---------------??

SCOTT??????TEST_CHAIN_1????SCOTT??????SCHED_RULESET$1???????????????4???????????????3TRUE??A?test?chain.??


scott@CNMMBO>?@job_chain_steps--->數(shù)據字典dba_scheduler_chain_steps??


OWNER??????CHAIN_NAME??????STEP_NAME???????PROGRAM_OW?PROGRAM_NAME????STEP_TYPE??

----------?---------------?---------------?----------?---------------?--------------??

SCOTT??????TEST_CHAIN_1????CHAIN_STEP_1????SCOTT??????TEST_PROC_1?????PROGRAM??

SCOTT??????TEST_CHAIN_1????CHAIN_STEP_2????SCOTT??????TEST_PROC_2?????PROGRAM??

SCOTT??????TEST_CHAIN_1????CHAIN_STEP_3????SCOTT??????TEST_PROC_3?????PROGRAM??


scott@CNMMBO>?@job_chain_rules--->數(shù)據字典?dba_scheduler_chain_rules??


OWNER??????CHAIN_NAME??????RULE_OWNER?RULE_NAME???????CONDITIONACTION???????????????COMMENTS??

----------?---------------?----------?---------------?-------------------------?--------------------?-------------------------??

SCOTT??????TEST_CHAIN_1????SCOTT??????CHAIN_RULE_1TRUE??????????????????????START?"CHAIN_STEP_1"?First?link?in?the?chain.??

SCOTT??????TEST_CHAIN_1????SCOTT??????CHAIN_RULE_2"CHAIN_STEP_1"?COMPLETED??START?"CHAIN_STEP_2"?Second?link?in?the?chain.??

SCOTT??????TEST_CHAIN_1????SCOTT??????CHAIN_RULE_3"CHAIN_STEP_2"?COMPLETED??START?"CHAIN_STEP_3"?Third?link?in?the?chain.??

SCOTT??????TEST_CHAIN_1????SCOTT??????CHAIN_RULE_4"CHAIN_STEP_3"?COMPLETED??END??????????????????End?of?the?chain.??


scott@CNMMBO>?@job_log_detail--->數(shù)據字典dba_scheduler_job_run_details??

Enter?valuefor?input_job_name:?test_chain_1_job??


????LOG_ID?JOB_NAME??????????????????JOB_SUBNAME?????STATUS??????????ACTUAL_START_DATE?????????????????????????????RUN_DURATION??

----------?-------------------------?---------------?---------------?---------------------------------------------?--------------------??

39002?TEST_CHAIN_1_JOB??????????CHAIN_STEP_3????SUCCEEDED???????03-DEC-13?02.43.23.735878?PM?+08:00???????????+000?00:00:00??

39001?TEST_CHAIN_1_JOB??????????CHAIN_STEP_2????SUCCEEDED???????03-DEC-13?02.43.22.847659?PM?+08:00???????????+000?00:00:00??

39000?TEST_CHAIN_1_JOB??????????CHAIN_STEP_1????SUCCEEDED???????03-DEC-13?02.43.18.735907?PM?+08:00???????????+000?00:00:00??

39003?TEST_CHAIN_1_JOB??????????????????????????SUCCEEDED???????03-DEC-13?02.43.14.759867?PM?+08:00???????????+000?00:00:09??


scott@CNMMBO>select?*?from?tb_schduler;??


????????ID?DESCR????????????????CR_DATE??

----------?--------------------?-----------------??

?????????1?test_proc_1??????????20131203?14:36:03??

?????????2?test_proc_3??????????20131203?14:36:04??

?????????3?test_proc_1??????????20131203?14:43:18??

?????????4?test_proc_2??????????20131203?14:43:22??

?????????5?test_proc_3??????????20131203?14:43:23??

四柬焕、移除CHAIN及相關JOB??

[sql]?view plain?copy

--對于與chain相關的program审残,rule梭域,由于存在依賴性,因此需要先刪除job搅轿,然后可以刪除chain病涨,program等??

scott@CNMMBO>EXEC?DBMS_SCHEDULER.drop_chain?(chain_name??=>?'test_chain_1');??

BEGIN?DBMS_SCHEDULER.drop_chain?(chain_name??=>?'test_chain_1');?END;??


*??

ERRORat?line?1:??

ORA-27479:?Cannotdrop?"SCOTT.TEST_CHAIN_1"?because?other?objects?depend?on?it??

ORA-06512:at?"SYS.DBMS_ISCHED",?line?955??

ORA-06512:at?"SYS.DBMS_ISCHED",?line?871??

ORA-06512:at?"SYS.DBMS_SCHEDULER",?line?1446??

ORA-06512:at?line?1??


EXEC?DBMS_SCHEDULER.drop_job(job_name?=>?'test_chain_1_job');??

EXEC?DBMS_SCHEDULER.drop_chain?(chain_name??=>?'test_chain_1');??

EXEC?DBMS_SCHEDULER.drop_program?(program_name??=>?'test_proc_1');??

EXEC?DBMS_SCHEDULER.drop_program?(program_name??=>?'test_proc_2');??

EXEC?DBMS_SCHEDULER.drop_program?(program_name??=>?'test_proc_3');??


DROP?TABLE?tb_schduler;??

DROP?SEQUENCE?tb_schduler_seq;??

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市璧坟,隨后出現(xiàn)的幾起案子既穆,更是在濱河造成了極大的恐慌,老刑警劉巖雀鹃,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件幻工,死亡現(xiàn)場離奇詭異,居然都是意外死亡黎茎,警方通過查閱死者的電腦和手機会钝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來工三,“玉大人,你說我怎么就攤上這事先鱼〖笳” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵焙畔,是天一觀的道長掸读。 經常有香客問我,道長宏多,這世上最難降的妖魔是什么儿惫? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮伸但,結果婚禮上肾请,老公的妹妹穿的比我還像新娘。我一直安慰自己更胖,他們只是感情好铛铁,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著却妨,像睡著了一般饵逐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上彪标,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天倍权,我揣著相機與錄音,去河邊找鬼捞烟。 笑死薄声,一個胖子當著我的面吹牛当船,可吹牛的內容都是我干的。 我是一名探鬼主播奸柬,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼生年,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了廓奕?” 一聲冷哼從身側響起抱婉,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎桌粉,沒想到半個月后蒸绩,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡铃肯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年患亿,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片押逼。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡步藕,死狀恐怖,靈堂內的尸體忽然破棺而出挑格,到底是詐尸還是另有隱情咙冗,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布漂彤,位于F島的核電站雾消,受9級特大地震影響,放射性物質發(fā)生泄漏挫望。R本人自食惡果不足惜立润,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望媳板。 院中可真熱鬧桑腮,春花似錦、人聲如沸蛉幸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽巨缘。三九已至添忘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間若锁,已是汗流浹背搁骑。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人仲器。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓煤率,卻偏偏與公主長得像,于是被迫代替她去往敵國和親乏冀。 傳聞我的和親對象是個殘疾皇子蝶糯,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內容