Материализованное Обновление Представления При Фиксации
Предположим, что у меня есть таблица TABLE
с двумя столбцами COL_1
и COL_2
.
TABLE.COL_1
и задается для: REFRESH FAST ON COMMIT
.
Если я обновлю TABLE.COL_2
, обновится ли материализованное представление?
1 ответ:
Да, похоже, что обновление 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