2013-11-20 12 views
8

मैं अभी बनाया टेबल विभाग और ईएमपी पालन की तरह दृश्य materializedके लिए प्रतिबद्ध पर तेजी से ताज़ा

create materialized view log on emp with rowid; 
create materialized view log on dept with rowid; 

create materialized view empdept_mv refresh fast on commit as 
select a.rowid dept_rowid, b.rowid emp_rowid, a.dept_no,b.emp_no 
from dept a, emp b 
where a.dept_no=b.dept_no ; 

select * from emp; 
    EMP_NO DEPT_NO 
    ---------- ---------- 
    1   10 
    2   20 
    3   30 

select * from dept; 
    DEPT_NO DEPT_NAME      DEPT_DESC 
---------- -------------------------------- -------------------------------- 
    10 it        desc1 
    20 hr        desc2 
    30 it        desc3 

select * from empdept_mv; 

DEPT_ROWID   EMP_ROWID    DEPT_NO  EMP_NO 
------------------ ------------------ ---------- ---------- 
AAAli5AABAAAPZ6AAA AAAli7AABAAAQs6AAA   10   1 
AAAli5AABAAAPZ6AAB AAAli7AABAAAQs6AAB   20   2 

मैंने एक नया रिकॉर्ड डाला और COMMIT किया; ..पर फिर भी जब मैं भौतिक दृश्य की जांच करता हूं, तो नया रिकॉर्ड भौतिक दृश्य में नहीं दिखाया जाता है।

insert into dept values (30,'it','desc3'); 
commit; 
insert into emp values (3,30); 
commit; 

select * from empdept_mv; 

DEPT_ROWID   EMP_ROWID    DEPT_NO  EMP_NO 
------------------ ------------------ ---------- ---------- 
AAAli5AABAAAPZ6AAA AAAli7AABAAAQs6AAA   10   1 
AAAli5AABAAAPZ6AAB AAAli7AABAAAQs6AAB   20   2 

अब, जब मैं per के रूप में तेजी से और पूर्ण ताज़ा करने के लिए प्रक्रिया चलाने के लिए, तेजी से ताज़ा Mview अपडेट नहीं करता लेकिन पूरा ताज़ा करता है। (नोट: लेकिन Mview अभी भी ताज़ा करने पर COMMIT है)

execute DBMS_MVIEW.REFRESH('empdept_mv', 'F', '', TRUE, FALSE, 0,0,0,FALSE, FALSE); 
PL/SQL procedure successfully completed. 

DEPT_ROWID   EMP_ROWID    DEPT_NO  EMP_NO 
------------------ ------------------ ---------- ---------- 
AAAli5AABAAAPZ6AAA AAAli7AABAAAQs6AAA   10   1 
AAAli5AABAAAPZ6AAB AAAli7AABAAAQs6AAB   20   2 


execute DBMS_MVIEW.REFRESH('test_mview2', 'C', '', TRUE, FALSE, 0,0,0,FALSE, FALSE); 
PL/SQL procedure successfully completed. 

DEPT_ROWID   EMP_ROWID    DEPT_NO  EMP_NO 
------------------ ------------------ ---------- ---------- 
AAAli5AABAAAPZ6AAA AAAli7AABAAAQs6AAA   10   1 
AAAli5AABAAAPZ6AAB AAAli7AABAAAQs6AAB   20   2 
AAAli5AABAAAPZ6AAC AAAli7AABAAAQs6AAC   30   3 

DBMS_MVIEW.EXPLAIN_MVIEW उत्पादन से पता चला है: (capability_name --Possible-- msgtxt)

  1. पीसीटी --N- -
  2. REFRESH_COMPLETE --Y--
  3. REFRESH_FAST --Y--
  4. पुनर्लेखन --N--
  5. PCT_TABLE --N-- ओरेकल त्रुटि: RELATED_NUM और RELATED_TEXT देख विवरण
  6. REFRESH_FAST_AFTER_INSERT --Y--
  7. REFRESH_FAST_AFTER_ONETAB_DML --Y--
  8. REFRESH_FAST_AFTER_ANY_DML --Y--
  9. REFRESH_FAST_PCT के लिए - N-- पीसीटी मेटर में विस्तार से किसी टेबल पर संभव नहीं है
  10. REWRITE_FULL_TEXT_MATCH --N-- ओरेकल त्रुटि: RELATED_NUM और जानकारी के लिए RELATED_TEXT देख
  11. REWRITE_FULL_TEXT_MATCH --N-- क्वेरी पुनर्लेखन घ है पर isabled दृश्य
  12. REWRITE_PARTIAL_TEXT_MATCH --N-- दृश्य materialized समर्थन नहीं कर सकता materialized क्वेरी किसी भी प्रकार का पुनर्लेखन
  13. REWRITE_PARTIAL_TEXT_MATCH --N-- क्वेरी पुनर्लेखन अक्षम किया गया है पर दृश्य
  14. REWRITE_GENERAL --N materialized - materialized दृश्य क्वेरी किसी भी प्रकार का पुनर्लेखन
  15. REWRITE_GENERAL --N-- क्वेरी पुनर्लेखन
  16. REWRITE_PCT --N-- सामान्य पुनर्लेखन संभव या पीसीटी नहीं है materialized दृश्य पर अक्षम है समर्थन नहीं कर सकता नहीं एक
  17. PCT_TABLE_REWRITE पर संभव है --N-- ओरेकल त्रुटि: RELATED_NUM और विवरण

के लिए RELATED_TEXT देखना मैं कैसे कमिट पर तेजी से ताज़ा प्राप्त कर सकते हैं?
ओरेकल संस्करण विवरण इस प्रकार हैं:
एनएलएसआरटीएल 10.2.0.4।0 उत्पादन
Oracle डाटाबेस 10g 10.2.0.4.0 64 बिट उत्पादन
PL/SQL 10.2.0.4.0 उत्पादन
लिनक्स के लिए टीएनएस: 10.2.0.4.0 उत्पादन

+0

यह मेरे लिए काम करता है। हो सकता है कि आप अपना 'निर्माण सामग्री दृश्य लॉग ...' और अपने आवेषण जोड़ना चाहें ताकि हम इस मुद्दे को पूरी तरह पुन: उत्पन्न कर सकें। –

+0

आपने कोई डेटा नहीं दिखाया है, न ही यह बताया है कि आपने किस तालिका को पंक्ति में डाला है। क्या आप नई पंक्ति देखते हैं जब आप चयन कथन चलाते हैं जो एमवी क्वेरी को परिभाषित करता है? –

+0

मैंने सभी सम्मिलित बयान शामिल किए हैं। हां, मैं तालिका में सम्मिलित करने के बाद नई पंक्ति देख पा रहा हूं। –

उत्तर

1

मैं देख रहा हूँ कि आप materialized दृश्य लॉग बनाया ROWID के साथ, जो वास्तव में आवश्यक नहीं है क्योंकि दोनों तालिकाओं में प्राथमिक कुंजी है ताकि आप ROWID के बिना कोशिश कर सकें।

emp पर भौतिक दृश्य लॉग बनाएं; डिप्टी पर भौतिक दृश्य लॉग बनाएँ;

इसके अतिरिक्त, यदि आप ROWID के साथ भौतिक दृश्य लॉग बनाते हैं तो आपको पंक्तिबद्ध के साथ भौतिक दृश्य बनाना चाहिए।

empdept_mv विभाग एक से b.emp_no पर तेजी से ताज़ा, a.rowid dept_rowid, b.rowid emp_rowid, a.dept_no चयन रूप ROWID के साथ प्रतिबद्ध देखने के लिए, materialized बनाने रोजगार ख जहां a.dept_no = b.dept_no ;

आप उन परिवर्तनों को आजमा सकते हैं और देख सकते हैं कि भौतिक विचारों को तेजी से प्रतिबद्ध करने पर ताज़ा किया गया है या नहीं।

2

मैं नहीं पता है कि समस्या अभी भी बनी रहती है, लेकिन जैसा कि मैंने artice आपके द्वारा दी गई पर एक दृष्टि डाली, मैं कुछ (जो सिर्फ यहाँ समाधान हो सकता है) देखा:

पर ताज़ा COMMIT

एक भौतिक दृश्य को COM COMITIT विधि का उपयोग करके स्वचालित रूप से रीफ्रेश किया जा सकता है। इसलिए, जब भी कोई लेनदेन करता है, जिसने टेबल को अद्यतन किया है जिस पर भौतिक दृश्य परिभाषित किया गया है, तो वे परिवर्तन भौतिक दृश्य में स्वचालित रूप से प्रतिबिंबित होते हैं। इस दृष्टिकोण का उपयोग करने का लाभ आपको भौतिक दृश्य को रीफ्रेश करने के लिए कभी याद रखना नहीं है। एकमात्र नुकसान यह है कि प्रतिबद्धता को पूरा करने के लिए आवश्यक समय अतिरिक्त प्रक्रिया के कारण थोड़ा लंबा होगा। हालांकि, डेटा वेयरहाउस में, यह कोई मुद्दा नहीं होना चाहिए क्योंकि समान तालिका को अपडेट करने की कोशिश करने वाली समवर्ती प्रक्रियाएं होने की संभावना नहीं है।

  • बोल्ड लाइन पर ध्यान दें।

तब हमने:

तालिका 7-1 materialized दृश्य को परिभाषित करने वाली क्वेरी recalculating द्वारा मांग ताज़ा तरीके

ताज़ा विकल्प पैरामीटर विवरण पूरा सी तरोताजा कर देती है पर ।

संवर्द्धित materialized दृश्य पर परिवर्तन लागू करने से तेजी से एफ ताज़ा करता है। स्थानीय भौतिक विचारों के लिए, यह रीफ्रेश विधि का चयन करता है जिसे ऑप्टिमाइज़र द्वारा सबसे अधिक कुशल माना जाता है। माना जाता है कि रीफ्रेश विधियां लॉग-आधारित फास्ट और FAST_PCT हैं।

FAST_PCT पी विस्तारित तालिकाओं में परिवर्तित विभाजनों से प्रभावित भौतिक दृश्य में पंक्तियों को पुन: संकलित करके रीफ्रेश करें।

फोर्स? तेजी से ताज़ा करने का प्रयास करता है। यदि यह संभव नहीं है, तो यह एक पूर्ण ताज़ा करता है। स्थानीय भौतिक दृश्यों के लिए, यह रीफ्रेश विधि का चयन करता है जिसे ऑप्टिमाइज़र द्वारा सबसे अधिक कुशल माना जाता है। माना जाता है कि रीफ्रेश विधियां लॉग आधारित फास्ट, FAST_PCT, और पूर्ण हैं।

  • बोल्ड लाइनों पर ध्यान दें।
  • मैं व्यक्तिगत रूप से फोर्स विकल्प पसंद करता हूं।

आप कृपया, बता सकते हैं अगर यह कुछ समय के बाद फिर से होता है (DB और मशीन को पर चलाता है के मापदंडों के आधार पर, तो मैं भी आप कितना संकेत नहीं कर सकते हैं)?

जब फास्ट ताज़ा संभव है

नहीं सभी materialized विचारों तेजी से रीफ्रेश हो सकता है। इसलिए, भौतिक दृश्य के लिए रीफ्रेश विधियां उपलब्ध हैं, यह निर्धारित करने के लिए पैकेज DBMS_MVIEW.EXPLAIN_MVIEW का उपयोग करें।

क्या आप वाकई कैसे एक materialized दृश्य तेजी से रीफ्रेश बनाने के लिए नहीं कर रहे हैं, तो आप DBMS_ADVISOR.TUNE_MVIEW प्रक्रिया है, जो एक स्क्रिप्ट एक तेजी से रीफ्रेश बनाने के लिए आवश्यक बयान युक्त दृश्य materialized प्रदान करता है का उपयोग कर सकते हैं।

चीयर्स

संबंधित मुद्दे