oracle 物化檢視的自動重新整理方法

賀子_DBA時代發表於2017-03-28
oracle 物化檢視的自動重新整理方法:
方法1,直接在建立的時候,指定start with ,如下代表每分鐘執行1次
create materialized view big_table_mv nologging
refresh fast on demand
with rowid
START WITH TO_DATE('18-03-2011 10:09:08', 'DD-MM-YYYY HH24:MI:SS') NEXT SYSDATE + 1 / 60*24
as select * from big_table;

方法2:編寫批次重新整理某個使用者的所有物化檢視的procedure,然後結合job可以定時去執行,
create or replace procedure pro_refresh_maview   is
begin
 declare  CURSOR   c_number   is
select user||'.'||mview_name mview_name from user_mviews;
    my_re     c_number%rowtype;
    begin
    open   c_number;
    loop
   exit  when c_number%notfound;
   fetch c_number  into  my_re;
  DBMS_MVIEW.REFRESH(my_re.mview_name,'C');
   end loop;
   close c_number;
   end;
   end  pro_refresh_maview  ;   
重新整理某一個物化檢視的儲存過程mv_emp
CREATE OR REPLACE PROCEDURE auto_refresh_mview_job_proc
AS
BEGIN
dbms_mview.REFRESH('mv_emp');
END;
/
建立前面儲存過程pro_refresh_maview的job(每五分鐘執行一次儲存過程)這壓根就自動重新整理了
declare
   pro_refresh_maview_job number;
begin
  dbms_job.submit( pro_refresh_maview_job,'pro_refresh_maview;',sysdate,'sysdate+1/24/60*5');     ##綠色部分是前面建立的儲存過程。紅色部分是自己編寫的名字
  end;
2、查詢job的ID,前面建立的job,
select * from dba_jobs; 
select * from all_jobs; 
select * from user_jobs;
3、根據job的id手動執行前面該job , 
begin
  dbms_job.run(44);
  end;
引申內容。。。。
Oracle 11g 物化檢視語法如下:
create materialized view [view_name]
refresh [fast|complete|force]
[
on [commit|demand] |
start with (start_time) next (next_time)
]
as
{建立物化檢視用的查詢語句}
以上是Oracle建立物化檢視(Materialized View,以下簡稱MV)時的常用語法,各引數的含義如下:
1.refresh [fast|complete|force] 檢視重新整理的方式:
fast: 增量重新整理.假設前一次重新整理的時間為t1,那麼使用fast模式重新整理物化檢視時,只向檢視中新增t1到當前時間段內,主表變化過的資料.為了記錄這種變化,建立增量重新整理物化檢視還需要一個物化檢視日誌表。create materialized view log on (主表名)。(多張表時,此語句也生效,建立後,原來的表中會多出兩類檢視表:MLOG$_table_name和RUPD$_table_name)
complete:全部重新整理。相當於重新執行一次建立檢視的查詢語句。
force: 這是預設的資料重新整理方式。當可以使用fast模式時,資料重新整理將採用fast方式;否則使用complete方式。
2.MV資料重新整理的時間:
on demand:在使用者需要重新整理的時候重新整理,這裡就要求使用者自己動手去重新整理資料了(也可以使用job定時重新整理)
on commit:當主表中有資料提交的時候,立即重新整理MV中的資料;
start ……:從指定的時間開始,每隔一段時間(由next指定)就重新整理一次;
物化檢視的重新整理:
Oracle 的物化檢視的快速重新整理要求必須建立物化檢視日誌,透過物化檢視日誌可以實現增量重新整理功能。
3.
批次重新整理某個使用者的全部的物化檢視,使用遊標,這樣只能執行一個
begin
for rec in (select user||'.'||mview_name mview_name from user_mviews)
loop
DBMS_MVIEW.REFRESH(rec.mview_name,'C');
end loop;
end;
總結:oracle資料庫物化檢視定時重新整理就兩種方法,一種是建立的過程中指定start with引數,一種是procedure+jop,當然在程式裡面也可以去控制自動重新整理物化檢視。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29654823/viewspace-2136213/,如需轉載,請註明出處,否則將追究法律責任。

相關文章