Oracle數據庫中fast刷新會受到哪些限制
刷新物化視圖出現的問題:
CREATE MATERIALIZED VIEW LOG ON users;
CREATE MATERIALIZED VIEW users REFRESH FAST START WITH SYSDATE NEXT trunc(SYSDATE + 1) WITH PRIMARY KEY AS SELECT * FROM [email protected];
SQL> exec dbms_mview.refresh('USERS','FAST');
begin dbms_mview.refresh('USERS','FAST'); end;
ORA-12008: error in materialized view refresh path
ORA-01008: not all variables bound
ORA-02063: preceding line from CNCYY
ORA-06512: at 'SYS.DBMS_SNAPSHOT', line 2254
ORA-06512: at 'SYS.DBMS_SNAPSHOT', line 2460
ORA-06512: at 'SYS.DBMS_SNAPSHOT', line 2429
ORA-06512: at line 1
但是以下部分并沒有問題:
SQL> EXEC DBMS_MVIEW.REFRESH('USERS', 'COMPLETE');
PL/SQL procedure successfully completed
經過仔細分析后發現,基表users里面有個字段的缺省值是sysdate的,所以不能fast刷新!
fast刷新的限制:
所有類型的快速刷新物化視圖都必須滿足的條件:
1.物化視圖不能包含對不重復表達式的引用,如SYSDATE和ROWNUM;
2.物化視圖不能包含對LONG和LONG RAW數據類型的引用。
只包含連接的物化視圖:
1.必須滿足所有快速刷新物化視圖都滿足的條件;
2.不能包括GROUP BY語句或聚集操作;
3.如果在WHERE語句中包含外連接,那么唯一約束必須存在于連接中內表的連接列上;
4.如果不包含外連接,那么WHERE語句沒有限制,如果包含外連接,那么WHERE語句中只能使用AND連接,并且只能使用“=”操作。
5.FROM語句列表中所有表的ROWID必須出現在SELECT語句的列表中。
6.FROM語句列表中的所有表必須建立基于ROWID類型的物化視圖日志。