Oracle 12c - 在 ORA-00942 中創建物化視圖結果
我有一個觀點,我可以通過這樣的數據庫連結訪問:
SQL> select count(*) from REMOTE_SCHEMA.REMOTE_VIEW@REMOTE_DB; COUNT(*) -------- 110
我可以通過同義詞創建並成功查詢遠端視圖:
SQL> create synonym REMOTE_VIEW for REMOTE_SCHEMA.REMOTE_VIEW@REMOTE_DB; Synonym created SQL> select count(*) from REMOTE_VIEW; COUNT(*) -------- 110
但是,如果我嘗試使用同義詞創建物化視圖,則會失敗:
SQL> create materialized view REMOTE_MV build immediate refresh complete next sysdate+1 with ROWID as select * from REMOTE_VIEW; ORA-00942: table or view does not exist
創建沒有同義詞的物化視圖成功:
SQL> create materialized view REMOTE_MV build immediate refresh complete next sysdate+1 with ROWID as select * from REMOTE_SCHEMA.REMOTE_VIEW@REMOTE_DB; Materialized view created
任何想法為什麼使用同義詞失敗?理想情況下,我想使用同義詞將物化視圖與數據庫連結隔離開來。數據庫連結可能因環境而異,我想確保物化視圖查詢保持不變。
設法弄清楚了!您可以在同義詞上創建物化視圖,但是導致問題的原因是我對基於版本的重新定義 (EBR) 缺乏理解。
預設情況下,私有同義詞是 EDITIONABLE:
$$ EDITIONABLE | NONEDITIONABLE $$ 如果為 schema 中的模式對像類型 SYNONYM 啟用了版本,則使用這些子句指定同義詞是版本對像還是非版本對象。對於私有同義詞,預設值為 EDITIONABLE。對於公共同義詞,預設值為 NONEDITIONABLE。
然而,物化視圖是非編輯對象:
24.1.1.2.1 物化視圖
物化視圖是可以指定評估版本的非版本對象,從而使其能夠依賴於版本對象。
> > 創建物化視圖 > > $$ schema. $$materialized_view other_clauses > $$ evaluation_edition_clause $$ $$ query_rewrite_clause $$AS 子查詢 > 其中evaluation_edition_clause 是: > > > 使用 { 目前版本 | 評估 EDITION 版 | 空版 } > > >
CURRENT EDITION 是執行 DDL 語句的版本。指定 NULL EDITION 相當於省略包含它的子句。如果省略evaluation_edition_clause,則在名稱解析期間版本對像是不可見的。
所以我成功地測試了兩個選項來解決這個問題:
- 選項 1 - 使同義詞 NONEDITIONABLE,在這種情況下它將對物化視圖可見或
- 選項 2 - 在物化視圖上指定evaluation_edition_clause。
使用 CREATE MATERIALIZED VIEW 語句創建物化視圖。物化視圖是包含查詢結果的數據庫對象。查詢的 FROM 子句可以命名表、視圖和其他物化視圖。 更多的
您不能從 Synonym 創建物化視圖。我不知道您為什麼要這樣做,但我們創建物化視圖作為您的工作範例。