久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Oracle調度Schedule特性chains分析

170次閱讀
沒有評論

共計 4933 個字符,預計需要花費 13 分鐘才能閱讀完成。

本篇內容主要講解“Oracle 調度 Schedule 特性 chains 分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓丸趣 TV 小編來帶大家學習“Oracle 調度 Schedule 特性 chains 分析”吧!

舉個簡單的例子:運行 PROGRAM:A 以及 PROGRAM:B,
如果成功的話繼續運行 PROGRAM:C,否則的話運行 PROGRAM:D。Programs:A、B、C、D 以及執行的邏輯關系就構成了一個最簡單的 CHAIN。
CHAIN 的管理操作比較多:創建 / 刪除 / 修改 Chains,添加 / 修改 / 刪除 Chain Steps 等等。
1、創建 Chains
創建 CHAIN 使用 DBMS_SCHEDULER.CREATE_CHAIN 過程,這個過程調用非常簡單,因為需要指定的參數極少
在創建 Chain 時,甚至可以簡單到只指定一個 CHAIN 的名稱,其它均為空即可
begin
  dbms_scheduler.create_chain(mychain1
end;
創建好的 Chains,可以通過 *_SCHEDULER_CHAINS 視圖查看,例如:
SQL select chain_name from user_scheduler_chains;
CHAIN_NAME
—————-
MYCHAIN1
注意,創建了 CHAIN 是遠遠不夠的,只有一個 CHAIN 對象 ORACLE 還是啥也干不了(當然啦,相信從上面執行的創建語句大家也看出來了),
CHAIN 對象創建之后,要做的工作其實才剛剛開始。其后,還需要定義 Chain Steps 以及 Chain rules。

2、創建 Chain Step
Chain Steps 就是用來指定 CHAIN 執行的操作及執行步驟,創建 CHAIN STEP 是通過 DBMS_SCHEDULER.DEFINE_CHAIN_STEP 過程進行
為剛剛創建的 mychain1 添加一個 step
begin
  dbms_scheduler.define_chain_step(chain_name   = mychain1 ,
                                   step_name    = mystep1 ,
                                   program_name = myprogram1
end;
Chain Steps 即可以調用 PROGRAM(注意是 program,不是 procedure,當然 program 中可以定義執行 procedure),也可以調用 EVENT,甚至調用其它 CHAIN(嵌套 CHAIN)。
下面接著為 mychain1 添加兩個 step,操作如下:
begin
  dbms_scheduler.define_chain_step(chain_name   = mychain1 ,
                                   step_name    = mystep2 ,
                                   program_name = myprogram2
  dbms_scheduler.define_chain_step(chain_name   = mychain1 ,
                                   step_name    = mystep3 ,
                                   program_name = myprogram3
end;
要查詢定義的 Chain Steps,則是通過 *_SCHEDULER_CHAIN_STEPS 視圖,例如:
select chain_name,step_name,program_name from user_scheduler_chain_steps;
CHAIN_NAME                     STEP_NAME                      PROGRAM_NAME
—————————— —————————— —————
MYCHAIN1                       MYSTEP1                        MYPROGRAM1
MYCHAIN1                       MYSTEP2                        MYPROGRAM2
MYCHAIN1                       MYSTEP3                        MYPROGRAM3

3、創建 Chain Rule
接下來,要為 CHAIN 的運行定義規則。定義規則是使用 DBMS_SCHEDULER.DEFINE_CHAIN_RULE 過程,Chain Rules 依賴于 Chain Steps,
每個 CHAIN RULE 都擁有 condition 和 action 屬性,當滿足 condition 時則執行 action 中指定的 step。
舉個例子:創建 CHAIN RULE,首先執行 mystep1,如果 mystep1 成功執行的話,就繼續執行 mystep2,如果 mystep2 也成功執行的話,則結束該 CHAIN,創建腳本如下
begin
  dbms_scheduler.define_chain_rule(chain_name = mychain1 ,
                                   condition  = true ,
                                   action     = start mystep1 ,
                                   rule_name  = myrule1
  dbms_scheduler.define_chain_rule(chain_name = mychain1 ,
                                   condition  = mystep1 completed ,
                                   action     = start mystep2 ,
                                   rule_name  = myrule2
  dbms_scheduler.define_chain_rule(chain_name = mychain1 ,
                                   condition  = mystep2 completed ,
                                   action     = end 0 ,
                                   rule_name  = myrule3
end;
CHAIN_NAME 就不說了,這里需要注意的是 CONDITION 和 ACTION 兩個參數。在為 CONDITION 參數指定值時,其語法看起來稍稍復雜一些,或者說是靈活,CONDITION 參數值支持下列的語法形式:
TRUE
FALSE
stepname [NOT] SUCCEEDED 
stepname [NOT] FAILED 
stepname [NOT] STOPPED 
stepname [NOT] COMPLETED 
stepname ERROR_CODE IN (integer, integer, integer …)
stepname ERROR_CODE NOT IN (integer, integer, integer …)
stepname ERROR_CODE = integer
stepname ERROR_CODE != integer
stepname ERROR_CODE integer
stepname ERROR_CODE integer
stepname ERROR_CODE = integer
stepname ERROR_CODE integer
stepname ERROR_CODE = integer
甚至于,還可以制定成下列邏輯語法:
expression AND expression
expression OR expression
NOT (expression)
比如說,我們希望條件為 step1 成功運行,那么可以指定 condition 參數值如下:
step1 completed
Action 參數相對簡單一些,這個參數用來指定當滿足 condition 參數時,CHAIN 執行的操作。

4、運行 Chains
最后,來運行一下創建的 mychain1 吧,手動運行 CHAIN 是通過 DBMS_SCHEDULER.RUN_CHAIN 過程
begin
  dbms_scheduler.run_chain(chain_name  = mychain1 ,
                           start_steps = mystep1
end;
這個語句執行可能會報錯呦,注意往下看
語句執行成功,查看一下執行的結果。我們之前定義的 myprogram1 等 program 對象,實際上是調用 procedure,向一個指定表 test 中插入記錄,這里直接查詢一下該表,就知道執行情況了(在此之前,test 表為空):

3 個 procedure 和 3 個 program:
create or replace procedure P_INSERT_INTOTEST is
begin
  insert into test values(1, beer
  commit;
end;

create or replace procedure insert_test1 is
begin
  insert into test values (1, beer
end;

begin
dbms_scheduler.create_program(program_name = myprogram1 , program_type = STORED_PROCEDURE , program_action = insert_test1 , enabled = true);
end;

create or replace procedure insert_test2 is
begin
  insert into test values (2, rabbit
end;

begin
dbms_scheduler.create_program(program_name = myprogram2 , program_type = STORED_PROCEDURE , program_action = insert_test2 , enabled = true);
end;

create or replace procedure insert_test3 is
begin
  insert into test values (3, horse
end;

begin
dbms_scheduler.create_program(program_name = myprogram3 , program_type = STORED_PROCEDURE , program_action = insert_test3 , enabled = true);
end;

SQL select * from test;
     ID NAME
———- ——————–
         1 beer
         2 rabbit
你看,test 表中有了兩條記錄,對應前面設置的 CHAIN RULE,說明 mystep1 和 mystep2 均已正確執行。

提示:Chains 在執行前,必須被置于 enabled 狀態,默認情況下剛剛創建的 CHAIN 都是 disabled 狀態,要修改 Chains 的狀態,
還是通過 DBMS_SCHEDULER.ENABLE 和 DBMS_SCHEDULER.DISABLE 兩過程
begin 
  dbms_scheduler.enable(mychain1
end;
手動執行的 CHAIN 的話沒有系統級的日志記錄,因此如果希望看到詳細執行情況的話,可以創建 job 來執行 CHAIN,例如:
begin
  dbms_scheduler.create_job(job_name        = chainjob1 ,
                            job_type        = CHAIN ,
                            job_action      = mychain1 ,
                            repeat_interval = freq=daily: interval=1 ,
                            enabled         = true);
end;
然后,管理員或者創建者就可以通過定期觀察 *_scheduler_job_run_details 視圖來確認 chain 的執行情況了。

到此,相信大家對“Oracle 調度 Schedule 特性 chains 分析”有了更深的了解,不妨來實際操作一番吧!這里是丸趣 TV 網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-20發表,共計4933字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 朝阳县| 蕉岭县| 南开区| 宁国市| 临朐县| 浙江省| 那坡县| 孟州市| 三河市| 平遥县| 衡水市| 临泉县| 改则县| 建瓯市| 顺义区| 临沂市| 文昌市| 宜城市| 河东区| 万全县| 双城市| 台东市| 木兰县| 枣庄市| 罗平县| 普洱| 陆川县| 额尔古纳市| 奎屯市| 建瓯市| 宁城县| 东丽区| 汤原县| 武宣县| 天等县| 霍州市| 淮安市| 赤城县| 黔南| 岐山县| 阿拉善右旗|