中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

Oracle調度Schedule特性chains分析

發布時間:2021-11-11 16:31:45 來源:億速云 閱讀:230 作者:iii 欄目:關系型數據庫

本篇內容主要講解“Oracle調度Schedule特性chains分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“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分析”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

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

AI

丰镇市| 仲巴县| 买车| 五河县| 鄢陵县| 呼玛县| 晋州市| 华池县| 兴安县| 肇州县| 马尔康县| 巴彦县| 湘潭市| 南投市| 巴彦淖尔市| 镇沅| 沭阳县| 福清市| 双流县| 雅江县| 抚松县| 浏阳市| 玉林市| 贵定县| 湘阴县| 施甸县| 平邑县| 舟曲县| 若尔盖县| 图们市| 灵寿县| 荣昌县| 雷州市| 玉田县| 云浮市| 吴桥县| 武城县| 潼关县| 双鸭山市| 马山县| 平果县|