2011-03-04 9 views
5

मान लीजिए कि मेरे पास TABLE है जिसमें दो कॉलम COL_1 और COL_2 हैं।मटेरियलाइज्ड व्यू कमिट पर रीफ्रेश करें

मेरे पास एक भौतिक दृश्य है जो बस TABLE.COL_1 पढ़ता है, और इसके लिए सेट है: REFRESH FAST ON COMMIT

यदि मैं TABLE.COL_2 अद्यतन करता हूं, तो भौतिक दृश्य रीफ्रेश करता है?

उत्तर

4

हां, ऐसा लगता है कि COL_2 को अद्यतन करने से दृश्य को भी ताज़ा किया जाता है।

COL_2 को अपडेट करना भौतिक दृश्य के बिना समान तालिका पर तुलनात्मक अद्यतन की तुलना में अधिक संसाधनों का उपयोग करता है। और COL_2 अपडेट करने से भौतिक दृश्य के पंक्ति टाइमस्टैम्प (ORA_ROWSCN) को अपडेट किया जाएगा।

------- 
--Compare the amount of work done to update. 
--The difference isn't huge, but is significant and consistent. 
------- 

--Create table and materialized view 
create table table1 (col_1 number primary key, col_2 number); 
create materialized view log on table1; 
create materialized view table1_mv refresh fast on commit 
    as select col_1 from table1; 
insert into table1 values(1, 1); 
commit; 

--Create a regular table for comparison 
create table table2 (col_1 number primary key, col_2 number); 
insert into table2 values(1, 1); 
commit; 

--Parse the queries so traces won't count that work. 
update table1 set col_1 = 2; 
update table1 set col_2 = 2; 
update table2 set col_1 = 2; 
update table2 set col_2 = 2; 
rollback; 

set autotrace on 
alter system flush buffer_cache; 
update table1 set col_1 = 2; 
--   11 db block gets 
--   8 consistent gets 
--   13 physical reads 

rollback; 
alter system flush buffer_cache; 
update table1 set col_2 = 2; 
--   6 db block gets 
--   8 consistent gets 
--   12 physical reads 

rollback; 
alter system flush buffer_cache;  
update table2 set col_1 = 2; 
--   7 db block gets 
--   7 consistent gets 
--   9 physical reads 

rollback; 
alter system flush buffer_cache; 
update table2 set col_2 = 2; 
--   3 db block gets 
--   7 consistent gets 
--   8 physical reads 

set autotrace off 


------- 
--Compare ORA_ROWSCN. 
--The times are different, implying the materialized view was modified. 
------- 

--(You may need to run these steps slowly to reproduce. ORA_ROWSCN is 
--not perfect, sometimes you'll see the same timestamp.) 
select scn_to_timestamp(ora_rowscn) from table1_mv; 
    --3/5/2011 12:25:25.000000000 AM 
update table1 set col_1 = 3; 
commit; 
select scn_to_timestamp(ora_rowscn) from table1_mv; 
    --3/5/2011 12:25:37.000000000 AM 
update table1 set col_2 = 3; 
commit; 
select scn_to_timestamp(ora_rowscn) from table1_mv; 
    --3/5/2011 12:25:46.000000000 AM 
+0

धन्यवाद, यह बहुत व्यापक है। – Johnny5

+0

मेरा अनुमान है कि भौतिक दृश्य लॉग यह निर्धारित करता है। तो यदि आप केवल col1 पर एक भौतिक दृश्य लॉग बनाते हैं, तो मुझे लगता है कि col2 को अपडेट करने से अब कोई प्रभाव नहीं पड़ेगा, सही? – nathanvda

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