Oracle
在沒有PK的表上通過dblink創建快速刷新MV?
我想通過 dblink 在主系統(Oracle 18c)和外部系統(Oracle 19c)之間創建一個物化視圖。
- MV 將按 30 秒的計劃刷新(因為通過 dblink 無法進行 on-commit)。
- 外部系統中的表沒有主鍵。
我是新手。這是我嘗試過的:
--in the external system: create materialized view log on external_system.workorder with rowid; --in the primary system: create materialized view primary_system.workorder_mv build immediate refresh fast start with sysdate next sysdate + (30/(60*60*24)) as select cast(workorderid as number(38,0)) as objectid, wonum, status, --other fields longitudex, latitudey from external_system.workorder@gistomax
當我嘗試上述方法時,我收到一連串錯誤,從一個說我需要主鍵的錯誤開始。
我發現一個頁面表明可以通過 dblink 進行快速刷新。但該範例使用主鍵,而不是 rowid。
文件說:
在主表重組後,在執行完全刷新之前,Rowid 物化視圖不符合快速刷新的條件。
但我真的不知道那是什麼意思。老實說,我對此很陌生,我知道我找錯了樹,所以我會停在那裡。
問題:
是否可以通過沒有 PK 的表上的 dblink 創建快速刷新 MV?
正如您在另一個問題中已經證明的那樣,列上的唯一約束
NOT NULL
足以創建具有“PK”值的 mview 日誌。這可用於快速刷新。SQL> conn bp/bp Connected. SQL> create database link self connect to bp identified by bp using 'localhost:1521/RYMIN19'; Database link created. SQL> create table t1 (c1 number not null unique, c2 number); Table created. SQL> create materialized view log on t1 with primary key; Materialized view log created. SQL> create materialized view mv1 refresh fast on demand as select * from t1@self; Materialized view created. SQL> insert into t1 values (1, 1); 1 row created. SQL> insert into t1 values (2, 2); 1 row created. SQL> commit; Commit complete.
然後:
SQL> exec dbms_mview.refresh('MV1', 'f'); PL/SQL procedure successfully completed. SQL> select last_refresh_type from user_mviews where mview_name = 'MV1'; LAST_REF -------- FAST