您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“Oracle調(diào)度Schedule特性中的program分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Oracle調(diào)度Schedule特性中的program分析”吧!
program之于procedure的概念有點(diǎn)像操作系統(tǒng)層面的“程序”或者“應(yīng)用”。但是program是由dba設(shè)定的,program是一個(gè)對象,一個(gè)可執(zhí)行的對象。
program實(shí)際的操作可以分為三種類型:
PL/SQL BLOCK 標(biāo)準(zhǔn)的PL/SQL代碼塊
STORED PROCEDURE編譯好的PL/SQL存儲(chǔ)過程、JAVA存儲(chǔ)過程或者外部子程序
EXECUTEABLEoracle數(shù)據(jù)庫之外的應(yīng)用,比如操作系統(tǒng)命令
1、創(chuàng)建Programs使用DBMS_SCHEDULER.CREATE_PROGRAM過程
舉個(gè)例子:
begin
dbms_scheduler.create_program(program_name => 'myprogram1',
program_action => '/bin/date',
program_type => 'EXECUTABLE',
enabled => TRUE);
end;
/
program_name 指定一個(gè)program的名稱
program_type 指定program的類型,前面交代的三種類型
program_action 實(shí)際執(zhí)行的操作,應(yīng)與前面PROGRAM_TYPE參數(shù)關(guān)聯(lián)使用。比如說前面指定了PROGRAM_TYPE為"PLSQL_BLOCK",那么此處要執(zhí)行的action就應(yīng)當(dāng)是一段標(biāo)準(zhǔn)的pl/sql代碼。
如果前面指定PROGRAM_TYPE為"STORED_PROCEDURE",那么此處要執(zhí)行的action就應(yīng)當(dāng)是ORACLE中定義好的存儲(chǔ)過程(含Java存儲(chǔ)過程),
如果前面指定PROGRAM_TYPE為"EXECUTABLE",那么此處就應(yīng)該指定外部命令的命令行信息(含路徑信息)
NUMBER_OF_ARGUMENTS 指定支持的參數(shù)個(gè)數(shù),默認(rèn)值為0即沒有參數(shù)。每個(gè)program最多能夠支持255個(gè)參數(shù),注意如果PROGRAM_TYPE設(shè)置為PLSQL_BLOCK,那么本參數(shù)自動(dòng)忽略
ENABLED 指定是否將創(chuàng)建的program置為有效狀態(tài),默認(rèn)情況下為false。
COMMENTS 注釋信息。
Program的管理
創(chuàng)建完program之后,就涉及到program如何執(zhí)行了,前面介紹CREATE_PROGRAM過程的參數(shù)時(shí)提到,每個(gè)program最多支持255個(gè)參數(shù),要為program添加參數(shù),可以通過DEFINE_PROGRAM_ARGUMENT過程。
不過在為其添加參數(shù)前,要注意program的NUMBER_OF_ARGUMENTS指定的數(shù)量,如果該值為0,那么為其添加參數(shù)時(shí)就會(huì)報(bào)錯(cuò)。
查詢創(chuàng)建的program的信息,可以通過USER_SCHEDULER_PROGRAMS視圖,例如:
SQL> select program_name,program_type,program_action,number_of_arguments,enabled from user_scheduler_programs;
PROGRAM_NAME PROGRAM_TYPE PROGRAM_ACTION NUMBER_OF_ARGUMENTS ENABL
------------------------------ ---------------- -------------------- ------------------- -----
MYPROGRAM1 EXECUTABLE /bin/date 0 FALSE
前面創(chuàng)建program時(shí)並未指定NUMBER_OF_ARGUMENTS的值,因此我們這里需要首先修改該值為一個(gè)非0值,操作如下
begin
dbms_scheduler.set_attribute('myprogram1','NUMBER_OF_ARGUMENTS',1);
end;
操作還是使用DBMS_SCHEDULER.SET_ATTRIBUTE過程。另外需要注意,program的NUMBER_OF_ARGUMENTS參數(shù)可是說想改就能改的,正常情況下該處理必須是在program處于enabled之前確認(rèn)完畢,
否則會(huì)觸發(fā)ORA-27465錯(cuò)誤,因此要修改program的參數(shù)之前,必須首先確保要修改program的enabled狀態(tài)為false。
那么對于已經(jīng)處于enabled狀態(tài)的program,如何修改其狀態(tài)屬性呢?其實(shí)很簡單,前面操作jobs時(shí)使用的DBMS_SCHEDULER.DISABLE過程還記的嗎?該過程對于program同樣好使,并且調(diào)用方式也完全一樣,例如:
begin
dbms_scheduler.disable('myprogram1');
end;
另外,如果希望將program置為enabled狀態(tài),執(zhí)行DBMS_SCHEDULER.ENABLE過程即可,這里不再例舉。
接下來,就可以為剛剛創(chuàng)建的my_program1添加路徑參數(shù),操作如下:
begin
dbms_scheduler.DEFINE_PROGRAM_ARGUMENT(program_name => 'myprogram1',
argument_position => 1,
argument_name => 'dirpath',
argument_type => 'VARCHAR2',
default_value => '/home/oracle');
end;
/
查詢?yōu)閜rogram定義的參數(shù),可以通過USER_SCHEDULER_PROGRAM_ARGS視圖
select program_name,argument_name,argument_position,argument_type default_value from user_scheduler_program_args;
PROGRAM_NAME ARGUMENT_NAME ARGUMENT_POSITION DEFAULT_VALUE
------------------------------ ------------------------------ ----------------- ----------------
MYPROGRAM1 DIRPATH 1 VARCHAR2
2、刪除program的argument操作也很簡單,使用DROP_PROGRAM_ARGUMENT過程即可,例如:
begin
dbms_scheduler.drop_program_argument('myprogram1','dirpath');
end;
該過程第一個(gè)參數(shù)指定program名稱,第二個(gè)參數(shù)指定定義的argument名稱,當(dāng)然此處也可以指定argument的位置,即前例視圖返回結(jié)果中的 ARGUMENT_POSITION 列值。
要?jiǎng)h除program的話就更簡單了,使用DROP_PROGRAM過程即可,例如:
begin
dbms_scheduler.drop_program('myprogram1');
end;
當(dāng)然啦,刪除program的同時(shí),也會(huì)刪除該program對應(yīng)的所有arguments。
實(shí)際上SCHEDULER中創(chuàng)建job時(shí),也可以指定執(zhí)行外部的程序。SCHEDULER中的Job更像是之前版本繼承過來的JOBS,只不過10g中SCHEDULER管理的JOBS功能更加強(qiáng)大。
到此,相信大家對“Oracle調(diào)度Schedule特性中的program分析”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。