--在源庫
create table srcreader as select cert_id,name,dept from reader where 1=2;--創(chuàng)建表結構
alter table srcreader add constraint pk_certid primary key(cert_id) using index;--定義主鍵并創(chuàng)建索引
insert into srcreader select cert_id,name,dept from reader where length(cert_id)=4 and cert_id like '11%';
commit; --插入部分數據
create materialized view log on srcreader;--在源表上建立物化視圖日志
--在需庫
conn scott/tiger@orc9
SQL> create database link dblink_tlibsys connect to tlibsys identified by tlibsys using 'tlibsys';
數據庫鏈接已創(chuàng)建。--注意如果低于11版本的庫 需要在用戶名和密碼加雙引號,否則會因為自動轉為大寫導致用戶名或密碼無效錯誤
SQL> create table tgreader as select * from srcreader@dblink_tlibsys where 1=2;
表已創(chuàng)建。
SQL> create materialized view tgreader on prebuilt table refresh fast with primary key on commit as select * from srcreader@dblink_tlibsys;
create materialized view tgreader on prebuilt table refresh fast with primary key on commit as select * from srcreader@dblink_tlibsys
*
第 1 行出現錯誤:
ORA-01031: 權限不足
SQL> conn sys/sys1 as sysdba
ERROR:
ORA-12560: TNS: 協議適配器錯誤
警告: 您不再連接到 ORACLE。
SQL> conn sys/sys1@orcl9 as sysdba
已連接。
SQL> grant create materialized view to scott;
授權成功。
SQL> conn scott/tiger
ERROR:
ORA-12560: TNS: 協議適配器錯誤
警告: 您不再連接到 ORACLE。
SQL> conn scott/tiger@orcl9
已連接。
SQL> create materialized view tgreader on prebuilt table refresh fast with primary key on commit as select * from srcreader@dblink_tlibsys;
create materialized view tgreader on prebuilt table refresh fast with primary key on commit as select * from srcreader@dblink_tlibsys
*
第 1 行出現錯誤:
ORA-12054: 無法為實體化視圖設置 ON COMMIT 刷新屬性
SQL> create materialized view tgreader on prebuilt table refresh fast with primary key on demand as select * from srcreader@dblink_tlibsys;
實體化視圖已創(chuàng)建。
SQL> select * from tgreader;
未選定行
SQL> exec dbms_mview.refresh('tgreader','f');--在開始不能用增量同步????
PL/SQL 過程已成功完成。
SQL> select * from tgreader;
未選定行
SQL> exec dbms_mview.refresh('tgreader','c');--執(zhí)行完全同步
PL/SQL 過程已成功完成。
SQL> select count(*) from tgreader; --查看數量,以測試在增量同步后數據有無增加
COUNT(*)
----------
94
--在源表添加數據
insert into srcreader select cert_id,name,dept from reader where length(cert_id)=4 and cert_id like '12%';
--在需庫執(zhí)行增量看有無數據添加
SQL> exec dbms_mview.refresh('tgreader','f');
PL/SQL 過程已成功完成。
SQL> select count(*) from tgreader;
COUNT(*)
----------
189