The important thing in life is to have a great aim , and the determination

          常用鏈接

          統計

          IT技術鏈接

          保險相關

          友情鏈接

          基金知識

          生活相關

          最新評論

          《Oracle物化視圖實戰手冊》

          Oracle物化視圖實戰手冊》

          場合:數據變化小,查詢出數據還要2次利用,需要數據雙向同步的場合

          視圖:就是一條sql語句,每次查詢時都要重新生成執行計劃,重新執行,非常消耗時間,放在內存中一次性的

          物化視圖:執行sql并保留結果,直接放在數據文件中,不放在內存中方便重用【空間換時間】,不受開關機的影響

          1.創建基表并插入數據

          create table sino_person_address

          (

          iid NUMBER(16) not null,

          ipersonid NUMBER(16),

          spin NUMBER(16),

          dgettime DATE,

          sorgcode VARCHAR2(20),

          smsgfilename VARCHAR2(20),

          ilineno NUMBER(8),

          saddress VARCHAR2(60),

          szip CHAR(6),

          scondition CHAR(1),

          itrust NUMBER(1),

          stoporgcode VARCHAR2(14),

          istate NUMBER(1),

          constraint PK_SINO_PERSON_ADDRESS primary key (iid)

          );

          插入數據(插入自動增長序列號字段的方法)

          INSERT 語句插入這個字段值為: 序列號的名稱.NEXTVAL,seq_sino_person_address.nextval

          insert into sino_person_address values(seq_sino_person_address.nextval,123,to_date('2013-04-08 12:12:12','yyyy-mm-dd hh24:mi:ss'),'110','test_report',111,'beijing

          xicheng','100100','1',123,1,'1000',0);

          insert into sino_person_address values(seq_sino_person_address.nextval,123,to_date('2013-04-09 12:12:12','yyyy-mm-dd hh24:mi:ss'),'120','test_report2',121,'beijing

          xicheng','100200','2',123,1,'1002',2);

          insert into sino_person_address values(seq_sino_person_address.nextval,123,to_date('2013-04-10 12:12:12','yyyy-mm-dd hh24:mi:ss'),'130','test_report3',131,'beijing

          xicheng','100300','3',123,1,'1003',3);

          commit

          ###################################################################################################

          2.創建物化視圖日志

          意義:記錄基表DML操作的變化,實時刷新物化視圖

          注:包含所有字段

          刪除物化視圖日志

          drop materialized view log on t

          創建物化視圖日志

          create materialized view log on t with sequence,rowid (x,y,z) including new values;

          參數說明:

          with sequence:以序號增1的方式進行變化記錄

          rowid (x,y,z):定位哪些數據發生了變化,日志記錄rowid指向的數據塊的位置和變化

          刪除物化視圖日志

          drop materialized view log on sino_person_address;

          基于主鍵方式的刷新,創建物化視圖日志

          CREATE MATERIALIZED VIEW LOG ON sino_person_address

          WITH PRIMARY KEY

          INCLUDING NEW VALUES

          【TABLESPACE sinojfs2】; 可選項

          3.創建物化視圖

          創建物化視圖

          create materialized view mv_t build immediate refresh fast on commit enable query rewrite as select x,y,z,count(*) from t group by x,y,z;

          刪除物化視圖

          drop materialized view mv_sino_person_address;

          create materialized view mv_sino_person_address

          tablespace SINOJFS2

          build immediate 創建物化視圖時,立即刷新基表

          refresh fast with primary key 支持基于主鍵的快速刷新(增量刷新),基表必須有主鍵

          on commit 支持commit動作自動刷新

          enable query rewrite

          as select * from sino_person_address;

          create materialized view mv_sino_person_address

          tablespace SINOJFS2

          build immediate

          refresh fast with primary key refresh complete全部刷新【全表刷新】可選項

          on demand 支持需求時手工刷新

          enable query rewrite

          as select * from sino_person_address;

          ########################################################################################

          參數說明:

          build immediate:創建物化視圖時,立即刷新基表

          refresh fast with primary key:支持基于主鍵的快速刷新(增量刷新),基表必須有主鍵

          on commit:基于commit動作的自動刷新 on demand:基于需求時的手工刷新

          enable query rewrite:支持查詢重新(使用物化視圖代替基表,查詢必須重寫,查詢重寫是透明的并且不需要對物化視圖有任何權限,物化視圖可以啟用和禁用查詢重寫)

          查詢重寫:select * from t基表,執行計劃走的是mv_t物化視圖,禁用后,執行計劃走的就是t基表了

          tablespace SINOJFS2 創建于SINOJFS2表空間

          (1)創建方式:BUILD IMMEDIATE(立即生成數據), BUILD DEFERRED(下一次刷新時生新數據), ON PREBUILD TABLE(不創建新的數據段,用已存在的含有當前物化視圖數據的表來代替);  
          (2)ENABLE | DISABLE QUERY REWRITE指定是否啟用當前物化視圖用于查詢重寫,啟用該選項時,系統會檢查以保證查詢的可確定性(不允許有如序列數,USER, DATE等不確定的返回值),DISABLE時物化視圖照樣可以被刷新;    
          與物化視圖生效相關的設置    
          (1)初始化參數JOB_QUEUE_PROCESSES設置大于零,物化的自動刷新操作需要JOB QUEUE進程來執行;    
          (2)初始化參數OPTIMIZER_MODE要設成某種CBO優化模式;    
          (3)用戶會話有QUERY_REWRITE(優化器能將查詢重寫到本方案物化視圖)或GLOBAL_QUERY_REWRITE(優化器能將查詢重寫到其它方案的物化視圖)系統權限;    
          (4)初始化參數QUERY_REWRITE_ENABLED 指示優化器是否動態重寫查詢來使用物化視圖,這個參數可以在四個級別上進行設置(參數文件,ALTER SYSTEM, ALTER SESSION, HINTS);    
          (5)初始化參數QUERY_REWRITE_INTEGRITY 指示優化器在不同的數據一致性情況下決定是否使用物化視圖來重寫查詢,ENFORCED(只有在能確保數據一致的前提下才使用物化視圖), TRUSTED(數據不一定一致,只要有用維度對象定義的關系存在,就可使用物化視圖), STALE_TOLERATED(數據不一致,也沒有相關的維度定義時仍可使用物化視圖),這個參數可以在三個級別上進行設置(參數文件,ALTER SYSTEM, ALTER SESSION);

          4. 物化視圖DML操作測試

          (1)驗證物化視圖是否隨記錄增加而增加

          insert into sino_person_address values(seq_sino_person_address.nextval,123,to_date('2013-04-11 13:13:13','yyyy-mm-dd hh24:mi:ss'),'140','test_report4',141,'beijing

          xicheng','100400','4',123,1,'1004',4);

          select * from sino_person_address order by dgetdate;

          select * from mv_sino_person_address order by dgetdate; 隨記錄增加而木有刷新,必須commit之后才觸發物化視圖刷新,沒有問題

          exec dbms_mview.refresh('mv_sino_person_address','c'); 還可以手動全部刷新【全表刷新】(先清除,再重裝數據)

          exec dbms_mview.refresh('mv_sino_person_address','f'); 也可以快速刷新【增量刷新】借助物化視圖日志,只檢查自上次刷新后改變了的數據來進行刷新)

          (2)驗證物化視圖是否隨記錄刪除而減少

          delete from sino_person_address where iid=21;

          select * from sino_person_address order by dgetdate;

          select * from mv_sino_person_address order by dgetdate; 隨記錄刪除而木有刷新,必須commit之后才觸發物化視圖刷新,沒有問題

          exec dbms_mview.refresh('mv_sino_person_address','c'); 還可以手動全部刷新【全表刷新】(先清除,再重裝數據)

          exec dbms_mview.refresh('mv_sino_person_address','f'); 也可以快速刷新【增量刷新】借助物化視圖日志,只檢查自上次刷新后改變了的數據來進行刷新)

          (3)驗證物化視圖是否隨記錄修改而更新

          update sino_person_address set sorgcode='200' where sorgcode='120';

          select * from sino_person_address order by dgetdate;

          select * from mv_sino_person_address order by dgetdate; 隨記錄修改而木有刷新,必須commit之后才觸發物化視圖刷新,沒有問題

          exec dbms_mview.refresh('mv_sino_person_address','c'); 還可以手動全部刷新【全表刷新】(先清除,再重裝數據)

          exec dbms_mview.refresh('mv_sino_person_address','f'); 也可以快速刷新【增量刷新】(借助物化視圖日志,只檢查自上次刷新后改變了的數據來進行刷新)

          (4)驗證物化視圖是否隨truncate而清空

          truncate table sino_person_address;

          select * from sino_person_address order by dgetdate;

          select * from mv_sino_person_address order by dgetdate; 隨記錄truncate而木有清空,必須手動truncate table mv_sino_person_address;才能清空(兩者是沒有關聯的),沒有問題

          5.物化視圖刷新

          根據業務需求,每月定時刷新。根據以上條件,選擇使用ORACLE自帶工具DBMS_MVIEW工具包中REFRESH方法對物化視圖進行刷新。該方法有兩個參數,第一個參數是需要刷新的物化視圖名稱,第二個參數是刷新方式。我們可以寫存儲過程,對每個物化視圖調用一次REFRESH方法,也可以使用“,”把物化視圖連接以來,一次刷新。

          定義存儲過程

          create or replace procedure pro_mview_refresh

          as

          begin

          dbms_mview.refresh('mv_sino_person_address','f');

          end;

          /

          執行存儲過程

          execute pro_mview_refresh;

          還可以刷新所有物化視圖 dbms_mview.refresh_all_mviews;

          創建存儲過程

          drop procedure pro_refresh_all_mviews;

          create or replace procedure pro_refresh_all_mviews

          as

          i number;

          begin

          dbms_mview.refresh_all_mviews(number_of_failures=>i);

          dbms_output.put_line('number_of_failures=>'||i);

          end;

          /

          執行

          executepro_refresh_all_mviews;

          set serveroutput on;不可放在存儲過程中,因為這是sqlplus命令,如果你怕忘記或者嫌麻煩可以把set serveroutput on;

          寫入/opt/oracle/product/11.2.0/dbhome_1/sqlplus/admin/glogin.sql中,每次使用sqlplus時自動加載這個文件

          如果想用PL/SQL Developer工具訪問數據庫,請在C:\Program Files\PLSQL Developer\Login.sql 文件里添加

          -- Autostart Command Window script

          set serveroutput on;

          這樣以后再使用PL/SQL Developer工具訪問數據庫就可以自動加載這條命令了

          ###############################################################################################

          研發人員專用,手動刷新,想刷就刷

          set serveroutput on; 打開屏幕顯示功能,就可以看到number_of_failures=>0結果

          PL/SQL 匿名塊

          declare

          i number;

          begin

          dbms_mview.refresh_all_mviews(number_of_failures=>i);

          dbms_output.put_line('number_of_failures=>'||i);

          end;

          /

          number_of_failures=>0

          Number_of_failures 表示刷新物化視圖失敗個數

          采用默認refresh force 刷新方式:先試圖用FAST方式刷新,如果失敗再用COMPLETE方式刷新,這是默認的刷新方式

          注意:

          1、 如果需要同時刷新多個物化視圖,必須用逗號把各個物化視圖名稱連接起來,并對每個視圖都要指明刷新方式(f、增量刷新,c、完全刷新,?、強制刷新,從不刷新)。

          NEVER REFRESH(不刷新)

          REFREST FAST(借助物化視圖日志,只檢查自上次刷新后改變了的數據來進行刷新)

          REFRESH COMPLETE(先清除,再重裝數據)

          REFRESH FORCE(先試圖用FAST方式刷新,如果失敗再用COMPLETE方式刷新,這是默認的刷新方式)

          確定刷新時機:

          ON COMMIT(事務提交時刷新),

          ON DEMAND(用DBMS_MVIEW.REFRESH, DBMS_MVIEW.REFRESH_DEPENDENT, DBMS_MVIEW.REFRESH_ALL_MVIEWS來手工刷新),

          By Time(用START WITH 和 NEXT 子句創建的job來定時自動刷新);

          [dbms_mview.refresh('mv_sino_person_address,mv_person_address_his','ff');]

          2、當日志和物化視圖創建好后,刪除日志,則需要重新創建物化視圖,否則無法增量刷新。

          drop materialized view log on sino_person_address; 刪除日志

          SQL> exec dbms_mview.refresh('mv_sino_person_address','c'); 刪除物化視圖日志,只可以支持物化視圖全部刷新

          PL/SQL procedure successfully completed

          #################################################################################

          SQL> exec dbms_mview.refresh('mv_sino_person_address','f'); 無法增量刷新

          begin dbms_mview.refresh('mv_sino_person_address','f'); end;

          ORA-23413: 表 "SINOJFS"."SINO_PERSON_ADDRESS" 沒有實體化視圖日志

          ORA-06512: 在 "SYS.DBMS_SNAPSHOT", line 2558

          ORA-06512: 在 "SYS.DBMS_SNAPSHOT", line 2771

          ORA-06512: 在 "SYS.DBMS_SNAPSHOT", line 2740

          ORA-06512: 在 line 2

          SQL> create materialized view log on sino_person_employment 重新創建物化視圖日志

          2 with primary key

          3 including new values;

          Materialized view log created

          SQL> exec dbms_mview.refresh('mv_sino_person_employment','f'); 但還是不支持增量刷新,因為日志內容和原表內容不一致了

          begin dbms_mview.refresh('mv_sino_person_employment','f'); end;

          ORA-12034: "SINOJFS"."SINO_PERSON_EMPLOYMENT" 上的實體化視圖日志比上次刷新后的內容新

          ORA-06512: 在 "SYS.DBMS_SNAPSHOT", line 2558

          ORA-06512: 在 "SYS.DBMS_SNAPSHOT", line 2771

          ORA-06512: 在 "SYS.DBMS_SNAPSHOT", line 2740

          ORA-06512: 在 line 2

          因為:丟失了刪除日志那一點->重建日志那一點之間的原表DML變化,因此日志內容和原表內容不一致了

          解決方案:重建物化視圖日志 重新【增量刷新】和【全表刷新】一遍

          SQL> drop materialized view log on sino_loan_compact; 刪除日志

          Materialized view log dropped

          SQL> create materialized view log on sino_loan_compact 重建日志

          2 with primary key

          3 including new values;

          Materialized view log created

          SQL> exec dbms_mview.refresh('mv_sino_loan_compact','c'); 必須先全表刷新

          PL/SQL procedure successfully completed

          SQL> exec dbms_mview.refresh('mv_sino_loan_compact','f'); 再增量刷新,否則ORA-12034: "SINOJFS"."SINO_LOAN_COMPACT" 上的實體化視圖日志比上次刷新后的內容新

          PL/SQL procedure successfully completed

          小結:只要能夠增量刷新,說明日志沒有問題了

          簡述所有視圖的快速刷新和全表刷新命令(測試使用) 10張視圖

          select owner,table_name,tablespace_name,status from dba_tables where table_name in ('SINO_LOAN_APPLY');

          update SINO_LOAN_APPLY set sorgcode ='1000' where iid =858;

          exec dbms_mview.refresh('mv_sino_loan_compact','c');

          exec dbms_mview.refresh('mv_sino_loan_compact','f');

          exec dbms_mview.refresh('mv_sino_loan_apply','c');

          exec dbms_mview.refresh('mv_sino_loan_apply','f');

          exec dbms_mview.refresh('mv_sino_loan_spec_trade','c');

          exec dbms_mview.refresh('mv_sino_loan_spec_trade','f');

          exec dbms_mview.refresh('mv_sino_loan','c');

          exec dbms_mview.refresh('mv_sino_loan','f');

          exec dbms_mview.refresh('mv_sino_loan_guarantee','c');

          exec dbms_mview.refresh('mv_sino_loan_guarantee','f');

          exec dbms_mview.refresh('mv_sino_loan_investor','c');

          exec dbms_mview.refresh('mv_sino_loan_investor','f');

          ###############################################################################

          exec dbms_mview.refresh('mv_sino_person_employment','c');

          exec dbms_mview.refresh('mv_sino_person_employment','f');

          exec dbms_mview.refresh('mv_sino_person_address','c');

          exec dbms_mview.refresh('mv_sino_person_address','f');

          exec dbms_mview.refresh('mv_sino_person_certification','c');

          exec dbms_mview.refresh('mv_sino_person_certification','f');

          exec dbms_mview.refresh('mv_sino_person','c');

          exec dbms_mview.refresh('mv_sino_person','f');

          3.基表增加字段后對應物化視圖不能自動同步結構

          業務表增加 上報狀態 字段 ipbcstate number(1) 可以為空

          文檔 建模 腳本 物化視圖

          sino_person_certification 完成 完成 完成 完成

          sino_person 完成 完成 完成 完成

          sino_person_address 完成 完成 完成 完成

          sino_person_employment 完成 完成 完成 完成

          sino_person_address_his 完成 完成 完成

          sino_person_employment_his 完成 完成 完成

          sino_person_his 完成 完成 完成

          sino_loan 完成 完成 完成 完成

          sino_loan_compact 完成 完成 完成 完成

          sino_loan_spec_trade 完成 完成 完成 完成

          sino_loan_guarantee 完成 完成 完成 完成

          sino_loan_investor 完成 完成 完成 完成

          sino_loan_apply 完成 完成 完成 完成

          對比IPBCSTATE 字段基表有,但物化視圖沒有,需要重建物化視圖解決

          select * from mv_sino_loan_compact where rownum<2;

          select * from sino_loan_compact where rownum<2;

          select * from mv_sino_loan where rownum < 2;

          select * from sino_loan where rownum < 2;

          select * from mv_sino_loan_apply where rownum < 2;

          select * from sino_loan_apply where rownum < 2;

          select * from mv_sino_loan_guarantee where rownum < 2;

          select * from sino_loan_guarantee where rownum < 2;

          select * from mv_sino_loan_guarantee where rownum < 2;

          select * from sino_loan_guarantee where rownum < 2;

          select * from mv_sino_loan_investor where rownum < 2;

          select * from sino_loan_investor where rownum < 2;

          select * from mv_sino_loan_spec_trade where rownum < 2;

          select * from sino_loan_spec_trade where rownum < 2;

          ################################################################################

          select * from mv_sino_person where rownum < 2;

          select * from sino_person where rownum < 2;

          select * from mv_sino_person_address where rownum < 2;

          select * from sino_person_address where rownum < 2;

          select * from mv_sino_person_certification where rownum < 2;

          select * from sino_person_certification where rownum < 2;

          select * from mv_sino_person_employment where rownum < 2;

          select * from sino_person_employment where rownum < 2;

          ##################################################################################

          4.因為上面寫的物化視圖是基于主鍵進行刷新的,因此原表必須要有主鍵

          6.定時刷新JOB

          確定執行時間間隔  
          1)、 每分鐘執行    
          Interval => TRUNC(sysdate,'mi') + 1 / (24*60)    
          2)、 每天定時執行    
          例如:每天下午2點執行一次pro_mview_refresh存儲過程    
          Interval => TRUNC(sysdate) + 1 +14/ (24)    
          3)、 每周定時執行    
          例如:每周一凌晨2點執行    
          Interval => TRUNC(next_day(sysdate,2))+2/24 --星期一,一周的第二天    
          4)、 每月定時執行    
          例如:每月1日凌晨2點執行    
          Interval =>TRUNC(LAST_DAY(SYSDATE))+1+2/24    
          5)、 每季度定時執行    
          例如每季度的第一天凌晨2點執行    
          Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 2/24    
          6)、 每半年定時執行    
          例如:每年7月1日和1月1日凌晨2點    
          Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+2/24    
          7)、 每年定時執行    
          例如:每年1月1日凌晨2點執行    
          Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+2/24

          通過jobs的使用就能實現每天或每月的指定時間執行一個函數、過程與命令

          set serveroutput on 啟動屏幕輸出功能

          SQL> execute dbms_output.put_line('This is'); 已經可以正常輸出

          This is

          創建作業

          variable job_num number; 定義存儲job編號的變量

          declare job_num number; pro_refresh_all_mviews

          begin

          dbms_job.submit

          (job=>:job_num,

          what=>'pro_refresh_all_mviews;',

          next_date=>sysdate,

          interval=>'sysdate+1/1440'); 每天1440分鐘,每一分鐘運行pro_mview_refresh過程一次

          dbms_output.put_line('Job Number is'||to_char(job_num));

          commit;

          end;

          /

          ############################################################################################

          綁定變量版,必須先定義變量

          variable job_num number;

          declare job_num number;

          begin

          dbms_job.submit

          (job=>:job_num,

          what=>'pro_refresh_all_mviews;',

          next_date=>sysdate,

          interval=>'trunc(SYSDATE+5/1440,''MI'')'); 每5分鐘運行一次job

          dbms_output.put_line('Job Number is'||to_char(job_num));

          commit;

          end;

          /

          例如:每天上午10點執行一次pro_refresh_all_mviews存儲過程  
          Interval => TRUNC(sysdate) + 1 +10/ (24)    
          declare job_num number;

          begin

          dbms_job.submit

          (job=>:job_num,

          what=>'pro_refresh_all_mviews;',

          next_date=>sysdate,

          interval=>'trunc(SYSDATE)+1+10/24'); 每天上午10點運行一次job

          dbms_output.put_line('Job Number is'||to_char(job_num));

          commit;

          end;

          /

          Job Number is

          PL/SQL procedure successfully completed

          job_num

          ---------

          1

          ####################################################################################

          PL/SQL 匿名塊版,可以直接在塊中定義變量,比較方面現在采用這種

          declare

          job_num number;

          begin

          dbms_job.submit

          (job=>job_num,

          what=>'pro_refresh_all_mviews;',

          next_date=>sysdate,

          interval=>'trunc(SYSDATE)+1+10/24');

          dbms_output.put_line('Job Number is '||job_num);

          commit;

          end;

          /

          Job Number is 4

          PL/SQL procedure successfully completed

          ####################################################################################

          dbms_job.submit( job out binary_integer,  
          what in varchar2,    
          next_date in date,    
          interval in varchar2,    
          no_parse in boolean)

          ●job:輸出變量,這是作業在作業隊列中的編號;  
          ●what:執行作業的存儲過程及其輸入參數;    
          ●next_date:作業初次執行的時間;    
          ●interval:作業執行的時間間隔。指上一次執行結束到下一次開始執行的時間間隔    
          其中Interval這個值是決定Job何時,被重新執行的關鍵;當interval設置為null時,該job執行結束后,就被從隊列中刪除。假如我們需要該job周期性地執行,則要用‘sysdate+m’表示。如何更好地確定執行時間的間隔需要我們掌握一個函數TRUNC。

          SQL> show parameter job_queue_process 作業隊列進程數,oracle能夠并發job數量,0~1000

          NAME TYPE VALUE

          ------------------------------------ ----------- ------------------------------

          job_queue_processes integer 1000

          Oracle提供的數據字典user_jobs監控作業狀態

          SQL> select job,log_user,what,last_date,last_sec,next_date,next_sec,failures,broken from user_jobs;

          Job 作業唯一編號

          Log_user 提交作業的用戶

          What 作業執行的存儲過程

          Last_date 最后一次成功運行作業的日期

          Last_sec 最后一次成功運行作業的時間

          Next_date 下一次運行作業日期

          Next_sec 下一次運行作業時間

          Failures 執行失敗次數,當執行job出現錯誤時,Oracle將其記錄在日志里,失敗次數每次自動加1,加到16之后Oracle就不在執行它了

          Broken 是否是異常作業,當執行失敗次數達到16時,Oracle就將該job標志為broken。此后,Oracle不再繼續執行它,直到用戶調用過程dbms_job.broken,重新設置為not broken,或強制調用dbms_job.run來重新執行它。Y標示作業中斷,以后不會運行,N表示作業正常,可以運行

          運行作業  
          begin    
                   dbms_job.run(:job_num); job_num是存儲job編號的變量    
          end;    
          查詢作業狀態    
          SQL> select job,log_user,what,last_date,last_sec,next_date,next_sec,failures,broken from user_jobs;

          JOB LOG_USER WHAT LAST_DATE LAST_SEC NEXT_DATE NEXT_SEC FAILURES BROKEN

          ---------- --------- ---------------------------------------------------- ----------- ---------------- -----------

          1 SINOJFS pro_refresh_all_mviews; 2013-4-26 1 11:27:38 2013-4-27 1 10:00:00 0 N

          Job 作業唯一編號

          Log_user 提交作業的用戶

          What 作業執行的存儲過程

          Last_date 最后一次成功運行作業的日期

          Last_sec 最后一次成功運行作業的時間

          Next_date 下一次運行作業日期

          Next_sec 下一次運行作業時間

          Failures 執行失敗次數,當執行job出現錯誤時,Oracle將其記錄在日志里,失敗次數每次自動加1,加到16之后Oracle就不在執行它了

          Broken 是否是異常作業,當執行失敗次數達到16時,Oracle就將該job標志為broken。此后,Oracle不再繼續執行它,直到用戶調用過程dbms_job.broken,重新設置為not broken;

          或強制調用dbms_job.run來重新執行它。Y標示作業中斷,以后不會運行,N表示作業正常,可以運行

          刪除作業  
          begin    
                   dbms_job.remove(:job_num);    
          end;

          修改作業

          dbms_job.remove(jobno); 刪除job號

          例 execute dbms_job.remove(1);

          ######################################################################

          dbms_job.what(jobno,what); 修改執行的存儲過程

          dbms_job.next_date(job,next_date)修改下次執行的時間

          例 exec dbms_job.next_date(46,sysdate+2/(24*60)); 46作業號

          #####################################################################

          dbms_job.interval(job,interval)   :修改間隔時間

          例 exec dbms_job.interval(46,sysdate+3/(24*60));

          ######################################################################  
          dbms_job.broken(job,true)     中斷job

          例 exec dbms_job.broken(46,true); 46作業號 exec dbms_job.broken(2,true) BROKEN=Y

          #######################################################################

          dbms_job.broken(job,false,next_date)   next_date:下次執行時間,如果不填則馬上啟動job

          例 exec dbms_job.broken(46,false); 啟動job exec dbms_job.broken(2,false); BROKEN=N

          ########################################################################

          dbms_job.run(jobno); 運行作業

          例子 execute dbms_job.run(1);

          posted on 2014-05-02 23:03 鴻雁 閱讀(266) 評論(0)  編輯  收藏 所屬分類: 數據庫

          主站蜘蛛池模板: 茌平县| 白玉县| 雅江县| 桃江县| 寿宁县| 乾安县| 江安县| 卓资县| 辰溪县| 绥德县| 丽江市| 崇信县| 广灵县| 乌兰浩特市| 郎溪县| 长沙县| 岐山县| 雅安市| 临沭县| 牙克石市| 尖扎县| 吴旗县| 新泰市| 双牌县| 茶陵县| 沁源县| 安西县| 浮梁县| 永善县| 卢龙县| 恩施市| 扎兰屯市| 思南县| 黔南| 康保县| 晋城| 鸡西市| 晴隆县| 武宣县| 尖扎县| 泽库县|