dbms_scheduler

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

發佈了2 篇原創文章 · 獲贊 5 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章