2012-04-08 5 views
9

को रीफ्रेश करता है मैंने एक भौतिक दृश्य बनाया है जो हर 5 मिनट में ताज़ा करता है लेकिन जब मैं सम्मिलित करता हूं और भौतिक दृश्य पर चयन करता हूं तो मुझे वही पुराना डेटा मिलता है? क्या मुझे मैन्युअल रूप से रीफ्रेश करने की आवश्यकता है?भौतिक दृश्य बनाना जो हर 5 मिनट

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

'ऑन डिमांड' –

+1

को निकालने का प्रयास करें बेस टेबल पर आपके आवेषण हैं? यदि नहीं, तो आपको डेटा नहीं दिखाई देगा। इसके अलावा आपको निश्चित रूप से इंतजार करना होगा। –

+0

@RogerCornejo धन्यवाद :) सुझाव के लिए :) – kinkajou

उत्तर

22

मैं चरणों में प्रदर्शन किया है, जहां हर one minute के बाद एक materialized दृश्य ताज़ा, एक mv जो 5 मिनट उपयोग के बाद ताज़ा next(sysdate+5/1440)

चरण 1 होने के लिए:

Create table temp (A int); 

चरण 2:

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

चरण 3:

select count(*) from temp; 

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

चरण 4:

select count(*) from temp_mv; 

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

Step5:

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

Step6:

commit; 

चरण 7:

select count(*) from temp; 

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

चरण 8:

select count(*) from temp_mv; 

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

चरण 9:

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

     TO_CH 
     ----- 
     04:28 

चरण 10:

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

     TO_CH 
     ----- 
     04:29 

Step11:

select count(*) from temp; 

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

Step12:

select count(*) from temp_mv; 

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

यदि क्वेरी आवंटित समय से अधिक समय लेती है तो क्या होगा? – kinkajou

+0

@ किटेक्स: आपको देखभाल करने की आवश्यकता है और उस पर आधारित आपके ताज़ा समय को बढ़ाएं। –

3

तुम भी एक अनुसूचक काम बना सकते हैं:

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; 
/

इस तरह आपको अधिक कॉन्फ़िगरेशन विकल्प, उदाहरण के लिए रात घंटे या सप्ताहांत को छोड़कर की तरह है।