您的位置:首頁技術文章
文章詳情頁

Oracle數據庫中fast刷新會受到哪些限制

瀏覽:125日期:2023-11-27 16:57:20
這篇論壇文章(賽迪網技術社區)主要根據一個實際案例具體分析了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 users@test.com;

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類型的物化視圖日志。

標簽: Oracle 數據庫
国产综合久久一区二区三区