2012-04-08 25 views
9

Tôi đã tạo chế độ xem được thực hiện làm mới sau mỗi 5 phút nhưng khi tôi chèn và thực hiện chọn chế độ xem vật hoá, tôi nhận được dữ liệu cũ? Tôi có cần làm mới thủ công không?Tạo chế độ xem vật hóa làm mới sau mỗi 5 phút

CREATE MATERIALIZED VIEW MVW_TEST 
REFRESH FORCE ON DEMAND 
START WITH TO_DATE('01-01-2009 00:01:00', 'DD-MM-YYYY HH24:MI:SS') NEXT SYSDATE + 1/1152 
As select * from TEST12 
+1

Cố gắng loại bỏ 'ON DEMAND' –

+1

là các nút chèn của bạn trên các bảng cơ sở được sao chép? Nếu không, bạn sẽ không thấy dữ liệu. Plus, bạn sẽ phải chờ đợi tất nhiên. –

+0

@RogerCornejo Cảm ơn :) vì đề xuất :) – kinkajou

Trả lời

22

tôi đã thực hiện ở bước nơi một cái nhìn làm mới cụ thể hóa sau mỗi one minute, vì có một mv mà làm mới sau khi sử dụng 5 phút next(sysdate+5/1440)

Bước 1:

Create table temp (A int); 

Bước 2:

Create Materialized view temp_mv 
     refresh complete start with (sysdate) next (sysdate+1/1440) with rowid 
     as select * from temp; 

Bước 3:

select count(*) from temp; 

     COUNT(*) 
     ---------- 
      0 

Step4:

select count(*) from temp_mv; 

     COUNT(*) 
     ---------- 
      0 

Bước 5:

begin 
     for i in 1..10 loop 
     insert into temp values (i+1); 
     end loop; 
end; 
/

Bước 6:

commit; 

Step7:

select count(*) from temp; 

     COUNT(*) 
    ---------- 
     10 

Step8:

select count(*) from temp_mv; 

     COUNT(*) 
     ---------- 
      0 

Step9:

select to_char(sysdate,'hh:mi') from dual; 

     TO_CH 
     ----- 
     04:28 

Step10:

select to_char(sysdate,'hh:mi') from dual; 

     TO_CH 
     ----- 
     04:29 

Step11:

select count(*) from temp; 

     COUNT(*) 
    ---------- 
     10 

Bước 12:

select count(*) from temp_mv; 

     COUNT(*) 
     ---------- 
     10 
+0

Điều gì sẽ xảy ra nếu truy vấn mất nhiều thời gian hơn thời gian được phân bổ để chạy? – kinkajou

+0

@Kitex: Bạn cần phải cẩn thận và dựa trên đó làm tăng thời gian làm mới của bạn. –

3

Bạn cũng có thể tạo một công việc lên lịch:

BEGIN 
    SYS.DBMS_SCHEDULER.CREATE_JOB 
    (
     job_name  => 'DBAPER.MVW_TEST_REFRESH' 
     ,start_date  => TO_TIMESTAMP_TZ('2011/09/02 00:00:00.000000 US/Central','yyyy/mm/dd hh24:mi:ss.ff tzr') 
     ,repeat_interval => 'FREQ=DAILY;BYHOUR=6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22;BYMINUTE=0,5,10,15,20,25,30,35,40,45,50,55' 
     ,end_date  => NULL 
     ,job_class  => 'DEFAULT_JOB_CLASS' 
     ,job_type  => 'PLSQL_BLOCK' 
     ,job_action  => 'BEGIN 
          DBMS_MVIEW.REFRESH(''MVW_TEST'',''C''); 
          END;' 
     ,comments  => 'Job to refresh materialized view MVW_TEST.' 
    ); 
END; 
/

Bằng cách đó bạn có các tùy chọn cấu hình hơn, như là loại trừ giờ đêm hoặc cuối tuần chẳng hạn.

Các vấn đề liên quan