I erstellte Tabellen DEPT und EMP wie folgt:Schnelle Aktualisierung auf begehen von materialisierten Ansicht
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);
ich materialisierte Ansicht Protokolle auf diesen Tabellen mit Rowid erstellt und materialisierte Ansichten wie folgt:
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
Ich habe einen neuen Datensatz eingefügt und COMMIT ausgeführt. .. aber wenn ich die materialisierte Ansicht überprüfe, wird der neue Datensatz in der materialisierten Ansicht nicht angezeigt.
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
Nun, wenn ich das Verfahren für die schnelle und vollständige Auffrischung als per laufen, The Fast Refresh aktualisiert nicht die Mview aber die komplette Auffrischung tut. (Anmerkung: Aber die Mview noch REFRESH ON 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 Der Ausgang ist wie folgt: (capability_name --Possible-- msgtxt)
- PCT --N- -
- REFRESH_COMPLETE -Y-
- REFRESH_FAST -Y-
- REWRITE -N-
- PCT_TABLE -N- Oracle-Fehler: siehe RELATED_NUM und RELATED_TEXT für Details
- REFRESH_FAST_AFTER_INSERT -Y-
- REFRESH_FAST_AFTER_ONETAB_DML -Y-
- REFRESH_FAST_AFTER_ANY_DML -Y-
- REFRESH_FAST_PCT - N-- PCT ist nicht möglich, auf alle von der Detail Tabellen in der mater
- REWRITE_FULL_TEXT_MATCH -N- Oracle-Fehler: siehe RELATED_NUM und RELATED_TEXT für Details
- REWRITE_FULL_TEXT_MATCH -N- Umschreiben von Abfragen ist d isabled auf der materialisierte Ansicht
- REWRITE_PARTIAL_TEXT_MATCH -N- Ansicht nicht unterstützen materialisiert kann jede Art von Abfrage neu schreiben
- REWRITE_PARTIAL_TEXT_MATCH -N- Umschreiben von Abfragen deaktiviert ist auf die materialisierte Ansicht
- REWRITE_GENERAL --N - materialisierte Ansicht nicht jede Art von Abfrage neu schreiben
- REWRITE_GENERAL -N- umschreiben von Abfragen auf die materialisierte Ansicht
- REWRITE_PCT -N- allgemeine Rewrite ist oder PCT nicht möglich ist deaktiviert unterstützen kann ist nicht möglich auf einem
- PCT_TABLE_REWRITE -N- Oracle-Fehler: siehe RELATED_NUM und RELATED_TEXT für Details
Wie kann ich schnell Refresh erreichen On Commit?
Die Oracle Version-Details lauten wie folgt:
NLSRTL 10.2.0.4.0 Produktion
Oracle Database 10g 10.2.0.4.0 64-Bit-Produktion
PL/SQL 10.2.0.4.0 Produktion
TNS für Linux: 10.2.0.4.0 Produktion
Es funktioniert für mich. Vielleicht möchten Sie Ihr 'materialisiertes Ansichtsprotokoll erstellen ...' und Ihre Einsätze hinzufügen, damit wir das Problem vollständig reproduzieren können. –
Sie haben keine Daten angezeigt und auch nicht angegeben, in welche Tabelle Sie die Zeile eingefügt haben. Wird die neue Zeile angezeigt, wenn Sie die Select-Anweisung ausführen, die die MV-Abfrage definiert? –
Ich habe alle Insert-Anweisungen enthalten. Ja, ich kann die neue Zeile nach dem Einfügen in der Tabelle sehen. –