Я только что создал таблицы DEPT и EMP, как показано ниже:
create table DEPT
( dept_no number , dept_name varchar(32) , dept_desc varchar(32),
CONSTRAINT dept_pk Primary Key (dept_no) );
create table EMP
( emp_no number, dept_no number, CONSTRAINT emp_pk Primary Key (emp_no,dept_no));
insert into dept values (10,'it','desc1');
insert into dept values (20,'hr','desc2');
insert into emp values (1,10);
insert into emp values (2,20);
Я создал журналы материализованных представлений для этих таблиц с rowid и материализованными представлениями следующим образом:
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
Теперь, когда я запускаю процедуру быстрого и полного обновления как за, быстрое обновление не обновляет Mview, а полное обновление обновляет. (Примечание: Но Mview по-прежнему обновляется при фиксации)
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 выглядит следующим образом: (имя_возможности - Возможное - msgtxt)
- ПКТ --N--
- REFRESH_COMPLETE --Y--
- REFRESH_FAST --Y--
- ПЕРЕПИСАТЬ --N--
- PCT_TABLE --N-- Ошибка Oracle: подробности см. В RELATED_NUM и RELATED_TEXT.
- REFRESH_FAST_AFTER_INSERT --Y--
- REFRESH_FAST_AFTER_ONETAB_DML --Y--
- REFRESH_FAST_AFTER_ANY_DML --Y--
- REFRESH_FAST_PCT --N-- PCT невозможно ни в одной из подробных таблиц в матери
- REWRITE_FULL_TEXT_MATCH --N-- Ошибка Oracle: подробности см. В RELATED_NUM и RELATED_TEXT.
- REWRITE_FULL_TEXT_MATCH --N - перезапись запроса отключена для материализованного представления
- REWRITE_PARTIAL_TEXT_MATCH --N - материализованное представление не может поддерживать любой тип перезаписи запроса
- REWRITE_PARTIAL_TEXT_MATCH --N - перезапись запроса отключена для материализованного представления
- REWRITE_GENERAL --N - материализованное представление не может поддерживать любой тип перезаписи запроса
- REWRITE_GENERAL --N - перезапись запроса отключена для материализованного представления
- REWRITE_PCT --N - общая перезапись невозможна или PCT невозможен на
- PCT_TABLE_REWRITE --N-- Ошибка Oracle: подробности см. В RELATED_NUM и RELATED_TEXT.
Как добиться быстрого обновления при фиксации?
Подробная информация о версии Oracle:
NLSRTL 10.2.0.4.0 Production
Oracle Database 10g 10.2.0.4.0 64bit Production
PL / SQL 10.2.0.4.0 в рабочей среде
TNS для Linux: 10.2.0.4.0 в рабочей среде
create materialized view log...
и свои вставки, чтобы мы могли полностью воспроизвести проблему. - person Jon Heller   schedule 20.11.2013