1.program
1.1 create_program
參數說明:
program_name——程序名稱
program_type——程序類型(STORED_PROCEDURE,PLSQL_BLOCK,EXECUTABLE)
STORED_PROCEDURE——ORACLE 中定義好的存儲過程
PLSQL_BLOCK——是一段標准的pl/sql 代碼
EXECUTABLE——指定外部命令的命令行信息(含路徑信息)
program_action——具體對應的執行內容,若為過程則為過程名
enable——若為true則創建后激活反之不激活
comments——注釋
例子:
BEGIN
dbms_scheduler.create_program(program_name => 'myprogram',
program_type => 'STORED_PROCEDURE',
program_action => 'p_test1',
number_of_arguments => 1,
enabled => FALSE,
comments => '更新gi_pipe表');
END;
注:如果創建的程序需要輸入參數,則必須定義完參數后在激活,即創建這個program時將enable設為false,否則提示:
Ora-27456:程序“ ”的參數並未全部定義;然后再對該program定義參數即執行define_program_argument過程(見1.3)。
--查看定義的program
SELECT * FROM user_scheduler_programs;
1.2 drop_program
參數說明:
program_name——要刪除的程序名稱
force——true或者false。如果為true則不管該program是否被job引用都會刪除,FALSE則若被引用無法刪除,默認為false。
例子:
BEGIN
dbms_scheduler.drop_program(program_name => 'myprogram',force => TRUE);
END;
1.3 define_program_argument
參數說明:
program_name——程序名稱
argument_position——參數位置(也可以知道參數名稱選擇argument_name)
argument_type——參數類型
default_value——參數默認值
例子:
BEGIN
dbms_scheduler.define_program_argument(program_name => 'myprogram',
argument_position => 1,
argument_name => 'p_lttid',
argument_type => 'varchar2',
default_value => 'daaa');
END;
--查看定義的program參數
SELECT *FROM User_Scheduler_Program_Args;
1.4 define_anydata_argument(用於定義輸入參數為復雜類型需采用sys.AnyData類型來包裝的參數)
參數說明:
program_name——程序名稱
argument_position——參數位置(也可以知道參數名稱選擇argument_name)
argument_type——參數類型為sys.AnyData
default_value——參數默認值
1.5 define_metadata_argument
有效的metadata attributes有: 'job_name', 'job_subname', 'job_owner', 'job_start', 'window_start',
'window_end', and 'event_message'.
Metadata Attribute Data Type Description
job_name VARCHAR2 當前執行的job名稱
job_subname VARCHAR2 當前執行的job子名稱
job_owner VARCHAR2 當前執行的job所有者
job_start TIMESTAMP WITH TIME ZONE job啟動的時間
window_start TIMESTAMP WITH TIME ZONE window打開的時間
window_end TIMESTAMP WITH TIME ZONE window關閉的時間
event_message 事件觸發job啟動的信息
例子:(以下metadata_attribute設置為job_name,即以job_start這個值作為輸入參數)
BEGIN
dbms_scheduler.define_metadata_argument(program_name => 'myprogram',
argument_position => 1,
argument_name => 'p_lttid',
metadata_attribute => 'job_start');
END;
1.6 drop_program_argument
例子:
BEGIN
dbms_scheduler.drop_program_argument(program_name => 'myprogram',
argument_position => 1);
END;
2.schedule
2.1 create_schedule
參數說明:
repeat_interval——運行頻率
end_date和comments默認可以不填
例子:
BEGIN
dbms_scheduler.create_schedule(schedule_name => 'myscheduler',
repeat_interval => 'FREQ=MINUTELY;INTERVAL=2');
END;
2.2 create_event_schedule
創建基於事件的調度,用於當一個特殊事件被拋出時啟動一個job。
Event類型 描述
job_started job啟動
job_succeeded job啟動成功
job_failed job失敗
job_broken 被禁止或狀態改為broken
job_completed job執行完成即完成了限制的最大執行次數或者到達執行指定的結束時間
job_stopped 停止job
job_sch_lim_reached 達到了scheduler的限制設置的值
job_disabled 禁止job
job_chain_stalled A job running a chain was put into the CHAIN_STALLED state. A running chain becomes
stalled if there are no steps running or scheduled to run and the chain evaluation_interval is set to NULL.
No progress will be made in the chain unless there is manual intervention.
job_all_events Not an event, but a constant that provides an easy way for you to enable all events
job_run_completed job執行或者失敗或者成功或者被停止
參數:
event_condition——tab.user_data
queue_spec——必須先創建一個queue,dbms_aqadm.create_queue
--摘至http://www.233.com/oracle/zhonghe/20080807/104612630.html
BEGIN
dbms_scheduler.create_event_schedule(schedule_name => 'acc_mgr_change',
start_date => systimestamp,
event_condition => 'tab.user_data.event_name = ''acc_mgr_change''',
queue_spec => 'proc_queue');
end;
2.3 drop_schedule
例子:
BEGIN
DBMS_SCHEDULER.drop_schedule(schedule_name => 'myscheduler');
END;
3.job
3.1 create_job
參數說明:
job_type:類同上述創建program
job_class DEFAULT 'DEFAULT_JOB_CLASS'
enabled 默認FALSE,其創建后要想執行該job必須先執行enable過程
auto_drop 默認TRUE,即當job執行完畢都到期是否直接刪除job
comments 默認NULL
job_style 默認REGULAR
credential_name 默認 NULL
destination_name 默認 NULL
--不采用program和scheduler直接創建job
BEGIN
dbms_scheduler.create_job(job_name => 'myjob',
job_type => 'STORED_PROCEDURE',
job_action => 'p_test1',
start_date => '',
repeat_interval => 'FREQ=DAILY;INTERVAL=2',
enabled => TRUE,
comments => 'My new job');
END;
--根據program和scheduler創建job
BEGIN
dbms_scheduler.create_job(job_name => 'myjob',
program_name => 'myprogram',
schedule_name => 'myscheduler');
END;
3.2 run_job
BEGIN
dbms_scheduler.run_job(job_name => 'myjob2');
END;
3.3 stop_job
BEGIN dbms_scheduler.stop_job(job_name => 'myjob');END;
3.4 copy_job
BEGIN dbms_scheduler.copy_job(old_job =>'myjob' ,new_job =>'myjob2' );END;
3.5 drop_job
BEGIN dbms_scheduler.drop_job(job_name => 'myjob');END;
3.6 set_job_argument_value
設置job的輸入參數值,設置后會覆蓋原先定義該參數設置的默認值
BEGIN
dbms_scheduler.set_job_argument_value(job_name => 'myjob2',
argument_position => 1,
argument_value => 'qwerer');
END;
3.7 set_job_anydata_value
方法類似3.6,只是設置的參數值類似是sys.anydata
3.8 reset_job_argument_value
重置job參數值,將其置為空
4.group(11g才有的)
4.1 create_group
參數:
group_type——組類型,該組的所有成員必須是同一類型,已有的類型有三種:
DB_DEST:即成員為目標數據庫,執行遠程數據庫的job;
EXTERNAL_DEST(External destination):Members are external destinations, for running remote external jobs;
WINDOW:Members are Scheduler windows
創建時可以指定成員也可不指定,添加成員通過add_group_member過程添加。
BEGIN
dbms_scheduler.create_group(group_name =>,
group_type =>,
MEMBER =>,
comments =>);
END;
4.2 drop_group
刪除組
4.3 add_group_member
為組添加成員
4.4 remove_group_member
移除組成員
4.5 create_database_destination
創建目標數據庫,用於執行遠程job
AGENT——The external destination name of the Scheduler agent to connect. Equivalent to an agent name.
The external destination must already exist. The external destination representing an agent is
created automatically on a database instance when the agent registers with that instance.
An agent‘s name is specified in its agent configuration file. If it is not specified, it defaults
to the first part (before the first period) of the name of the host it resides on.
DBMS_SCHEDULER.CREATE_DATABASE_DESTINATION (
destination_name IN VARCHAR2,--目標數據庫名稱
agent IN VARCHAR2,--代理名稱,事先創建好的
tns_name IN VARCHAR2,--tns名稱
comments IN VARCHAR2 DEFAULT NULL);
4.6 drop_database_destination
4.7 drop_agent_destination
5.jobclass
Job Classes 相當於創建了一個job組,DBA可以將那些具有相同特性的job,放到相同的Job Classes中,
然后通過對Job Class應用ORACLE中的"資源使用計划"特性,就可以對這些job執行過程中所需要的資源分配情況進行
管理。
5.1 create_job_class
參數:
resource_consumer_group——指定該jobclass所使用的資源分配方式。具體創建方法見dbms_resource_manager.create_consumer_group。
jobclass與resource_consumer_group為多對1關系;
若為該jobclass指定的resource_consumer_group被刪除,則使用默認的resource_consumer_group;
若沒為jobclass指定具體的resource_consumer_group,則使用默認的resource_consumer_group;
若為該jobclass指定的resource_consumer_group不存在,則會提示錯誤;
若為該jobclass指定了resource_consumer_group,則service參數必須設置為空(即這兩個參數只能設置其中一個)。
service——一般用於rac環境指定jobclass運行於哪個節點。
logging_level——日志記錄級別(DBMS_SCHEDULER.LOGGING_OFF,DBMS_SCHEDULER.LOGGING_RUNS,DBMS_SCHEDULER.LOGGING_FULL)
log_history——日志存放時間,默認30
例子:
BEGIN
dbms_scheduler.create_job_class(job_class_name =>,
resource_consumer_group =>,
service =>,
logging_level =>,
log_history =>,
comments =>);
END;
5.2 drop_job_class
--刪除多個job class用逗號隔開
BEGIN
dbms_scheduler.drop_job_class(job_class_name => '');
END;
6.window
通常job啟動后,用戶只能被動地等待其執行,一直到其執行地任務完成(或DBA手動kill對應進程),在此期間,
執行的job將與其它活動的進程共同競爭當前系統中的資源。在9i之前就是這樣。在Job Classes中也可以控制job能夠
使用的資源,不過單單使用Job Classes並不能靈活的控制job在合適的時間使用適當的資源。進入10g之后,采用
dbms_scheduler的WINDOW可以緩解該問題。WINDOW 可以指定一個時間窗口,在此期間,通過與Job Classes的搭配組合,
能夠有效控制job執行時支配(使用)的資源。比如說job通常是在凌晨服務器負載較低時執行,那么就可以通過WINDOW
設置在此期間,允許jobs使用更多的系統資源,而到了工作時間后,如果job仍未執行完成,為其分配另一個有限的
資源,以盡可能降低job執行占用的資源對其它業務的影響。
6.1 create_window
參數:
resource_plan——資源計划,即通過 dbms_resource_manager.create_plan來創建。
schedule_name——調度名稱,基於已經創建好的調度創建window。
duration——時間窗口打開后持續的時間,創建時必須設置該值,因為沒有默認值,設置范圍從1分鍾到99天。
window_priority——window優先級,如果同一時間出現多個window時則根據優先級決定執行哪個。
--創建一個基於調度的window
BEGIN
dbms_scheduler.create_window(window_name =>,
resource_plan =>,
schedule_name =>,
duration =>,
window_priority =>,
comments =>);
END;
--不基於時間調度創建window
DBMS_SCHEDULER.CREATE_WINDOW (
window_name IN VARCHAR2,
resource_plan IN VARCHAR2,
start_date IN TIMESTAMP WITH TIME ZONE DEFAULT NULL,
repeat_interval IN VARCHAR2,
end_date IN TIMESTAMP WITH TIME ZONE DEFAULT NULL,
duration IN INTERVAL DAY TO SECOND,
window_priority IN VARCHAR2 DEFAULT 'LOW',
comments IN VARCHAR2 DEFAULT NULL);
6.2 drop_window
刪除一個window。
6.3 open_window
打開一個window。
6.4 close_window
關閉一個window。
7.windowgroup
一個WINDOW GROUP可能包含多個WINDOW。使用WINDOW GROUP的本意是這樣的,假如說某個job執行的時間比較長,
甚至全天24小時都在執行,對於這類job,單個WINDOW很難有效調整其資源占用,因此就可以通過設置一個
WINDOW GROUP,該WINDOW GROUP中包含了多個WINDOW,每個WINDOW分別負責不同時間點時的資源使用計划。然后在
創建JOB時,指定schedule_name參數為WINDOW GROUP的名稱,當然也可以直接指定window名稱
(window已經包含了調度信息了)。
7.1 create_window_group
BEGIN
dbms_scheduler.create_window_group(group_name =>,
window_list =>,
comments =>);
END;
7.2 add_window_group_member
增加一個window
BEGIN
dbms_scheduler.add_window_group_member(group_name => ,window_list => );
END;
7.3 remove_window_group_member
移除一個window
7.4 drop_window_group
刪除一個window
8.chain 參考http://hi.baidu.com/sqlnever/item/be05b1abba1611fc15329b86
CHAIN可以被視做多個program放到同一個鏈中,這樣的話就可以指定這些program執行的先后順序。
8.1 create_chain
DBMS_SCHEDULER.CREATE_CHAIN (
chain_name IN VARCHAR2,
rule_set_name IN VARCHAR2 DEFAULT NULL,
evaluation_interval IN INTERVAL DAY TO SECOND DEFAULT NULL,
comments IN VARCHAR2 DEFAULT NULL);
8.2 define_chain_rule
定義規則
舉例,如my_step1執行完則執行my_step2,若my_step2執行完則結束
BEGIN
dbms_scheduler.define_chain_rule(chain_name => 'my_chain1',
condition => 'TRUE',
action => 'start my_step1',
rule_name => 'my_rule1');
dbms_scheduler.define_chain_rule(chain_name => 'my_chain1',
condition => 'my_step1 completed',
action => 'start my_step2',
rule_name => 'my_rule2');
dbms_scheduler.define_chain_rule(chain_name => 'my_chain1',
condition => 'my_step2 completed',
action => 'end 0',
rule_name => 'my_rule3');
END;
8.3 define_chain_step
BEGIN
dbms_scheduler.define_chain_step(chain_name => 'my_chain1',
step_name => 'my_step1',
program_name => 'p_p2');
dbms_scheduler.define_chain_step(chain_name => 'my_chain1',
step_name => 'my_step2',
program_name => 'p_p3');
END;
8.4 define_chain_event_step
BEGIN
dbms_scheduler.define_chain_event_step(chain_name =>,
step_name =>,
event_schedule_name =>,
timeout =>);
END;
8.5 drop_chain_rule
dbms_scheduler.drop_chain_rule(chain_name => ,rule_name => );
8.6 drop_chain_step
dbms_scheduler.drop_chain_step(chain_name => ,step_name => );
8.7 alter_chain
dbms_scheduler.alter_chain(chain_name => ,step_name => ,attribute => ,value => );
8.8 drop_chain
8.9 analyze_chain
dbms_scheduler.analyze_chain(chain_name => ,rules => ,steps => ,step_pairs => );
8.10 alter_running_chain
dbms_scheduler.alter_running_chain(job_name => ,step_name => ,attribute => ,value => );
8.11 evaluate_running_chain
dbms_scheduler.evaluate_running_chain(job_name => );
8.12 run_chain
dbms_scheduler.run_chain(chain_name => ,start_steps => ,job_name => );
9.credential
創建用戶名密碼,用於認證job執行
9.1 create_credential
BEGIN
dbms_scheduler.create_credential(credential_name =>,
username =>,
password =>,
database_role =>,
windows_domain =>,
comments =>);
END;
9.2 drop_credential
9.3 put_file
BEGIN
dbms_scheduler.put_file(destination_file =>,
destination_host =>,
credential_name =>,
file_contents =>,
destination_permissions =>);
END;
9.4 get_file
9.5 create_file_watcher
BEGIN
dbms_scheduler.create_file_watcher(file_watcher_name =>,
directory_path =>,
file_name =>,
credential_name =>,
destination =>,
min_file_size =>,
steady_state_duration =>,
comments =>,
enabled =>);
END;
9.6 drop_file_watcher
9.7 add_job_email_notification
BEGIN
dbms_scheduler.add_job_email_notification(job_name =>,
recipients =>,
sender =>,
subject =>,
BODY =>,
events =>,
filter_condition =>);
END;
9.8 remove_job_email_notification
10.通用的
10.1 DISABLE
BEGIN
dbms_scheduler.disable(NAME => 'myjob2');
END;
10.2 enable
BEGIN
dbms_scheduler.enable(NAME => 'myprogram');
END;
BEGIN
dbms_scheduler.enable(NAME => 'myjob2');
END;
10.3 set_attribute
attribute:是指設置job的屬性,屬性有:
logging_level——記錄的日志信息,有三個值(DBMS_SCHEDULER.LOGGING_OFF,DBMS_SCHEDULER.LOGGING_RUNS,
DBMS_SCHEDULER.LOGGING_FULL)
restartable——設置job失敗是否要重啟
max_failures——允許job失敗的次數,范圍1到1000000,默認為空。
max_runs——job執行的最大次數,范圍1到1000000,默認為空(即意味着job會重復執行,或者到達job執行的end_date,或者達到指定失敗的次數)。
一旦達到設置的最大值,job將會disable並且狀態變更為COMPLETED
max_run_duration——設置job運行的有效時間,如果設置了某個值,則在到達該值時調度會報JOB_OVER_MAX_DUR事件,
然后由事件處理器決定是否要繼續
instance_stickiness——只用於rac數據庫。默認為true,設置為true,則job會運行在負載最輕的節點上;如果某節點
關閉或負載太重,則不會啟動新job,而是有另一個節點來執行該job。
stop_on_window_close——window關閉的時候停止job,默認為false。因此默認情況下關閉了window,job還是會繼續執行,
但是要注意,window關閉則意味着資源使用計划就會變化。
job_priority——在同一個class,job執行的優先級,默認為3.
schedule_limit——允許啟動job延遲的時間,設置值從1分鍾到99天。超過了延遲的時間則不再啟動job。如果不設置
該值,則只要得到允許所需的資源就會啟動。另外,在延遲的這段時間里,job的執行次數或失敗次數
會跳過,不計算這段時間的。
program_name——job執行的對象。如果設置了該屬性,則job_action, job_type,number_of_arguments要設置為空。
job_action——job執行對象內容
job_type——job執行對象類型('PLSQL_BLOCK', 'STORED_PROCEDURE', 'EXECUTABLE', and 'CHAIN')。如果設置了該值,
那么program_name參數必須設置為空 。
number_of_arguments——參數個數。如果設置了該值,那么program_name參數必須設置為空。
schedule_name——調度名,如果設置了該值,則end_date, start_date and repeat_interval需設置為空。
repeat_interval——執行間隔,設置了該值,則schedule_name需為空。
start_date——執行開始時間,設置了該值,則schedule_name需為空。
end_date——不再執行job的時間,設置了該值,則schedule_name需為空。
job_class——jobclass
comments——備注
auto_drop——當job狀態為completed則自動刪除該job
event_spec——需含兩個值(event condition和queue specification)
raise_events——設置當job為什么狀態時拋出,具體的時間類型見event類型。
--設置log_history為90天,默認30天
BEGIN
dbms_scheduler.set_scheduler_attribute('log_history', '90');
END;
10.4 set_attribute_null
10.5 get_attribute
11.schedulerattribute
設置調度屬性的值
11.1 set_scheduler_attribute
attribute類型有:default_timezone,email_server,email_sender,email_server_credential,email_server_encryption,
event_expiry_time ,log_history,max_job_slave_processes(沒使用)
BEGIN
dbms_scheduler.set_scheduler_attribute(attribute => ,value => );
END;
11.2 get_scheduler_attribute
BEGIN
dbms_scheduler.get_scheduler_attribute(attribute => ,value => );
END;
11.3 add_event_queue_subscriber
BEGIN
dbms_scheduler.add_event_queue_subscriber(subscriber_name => );
END;
11.4 remove_event_queue_subscriber
BEGIN
dbms_scheduler.remove_event_queue_subscriber(subscriber_name => );
END;
11.5 purge_log
BEGIN
dbms_scheduler.purge_log(log_history => ,which_log => ,job_name => );
END;
dbms_scheduler包一些視圖
--*代表all或dba或user
--1.查看job的視圖
*_scheduler_jobs --查看job
*_scheduler_job_args --查看job的所有輸入參數
*_scheduler_job_classes --查看job的類信息
*_scheduler_job_dests --查看job狀態
*_scheduler_job_log --查看job日志
*_scheduler_job_run_details --查看job執行的詳細信息
all_scheduler_running_jobs
--2.查看chain的一些視圖
*_scheduler_chains
*_scheduler_chain_rules
*_scheduler_chain_steps
*_scheduler_running_chains --查看正在執行的chains
--3.查看program的視圖
*_scheduler_programs --查看程序
*_scheduler_program_args --查看程序參數
--4.查看調度組信息
*_scheduler_groups
*_scheduler_group_members
--5.查看window的視圖(這類視圖只有dba和all開頭的)
*_scheduler_windows --查看window
*_scheduler_window_details --查看window詳細信息
*_scheduler_window_groups --查看window組
*_scheduler_window_log --查看window日志
*_scheduler_wingroup_members ----查看window成員
--6.查看scheduler視圖
*_scheduler_schedules --查看調度
*_scheduler_global_attribute --顯示所有的調度屬性
*_scheduler_credentials
*_scheduler_db_dests
*_scheduler_dests
*_scheduler_external_dests
*_scheduler_file_watchers
*_scheduler_notifications
*_scheduler_remote_databases
*_scheduler_remote_jobstate