物化視圖(materialized view) 實現數據遷移、數據定時同步


近日公司有一個9i 的Oracle數據庫,運行效率低下。想要將其升級到11G. 但是升級之前 要將數據進行同步,好在表不是很多。只有三張表。業務壓力也不大,就想到了使用物 化視圖的方式將數據同步過來。

1.1 環境

數據庫主機 IP地址 TNS DB_LINK ORACLE 版本
db2 10.100.99.114   to_118
11G
db1 10.100.99.118     9iG

上面是本次操作測試的環境。說明: 將9i 數據庫中的表實時同步到11G.

1.2 在db2配置指向db1的tns

配置tns 方便創建dblink。當然不配置也可以創建。此步完全依賴於個人愛好。 我習慣配置,在創建dblink時,會更簡潔一些。TNS如下:

t118 =
   (DESCRIPTION =
     (ADDRESS_LIST =
       (ADDRESS = (PROTOCOL = TCP)(HOST = 10.100.99.114)(PORT = 1521))
     )
     (CONNECT_DATA =
       (SERVICE_NAME = ktdb)
     )
   )   

1.3 在db2的數據庫中創建dblink

create public database link to_118 connect to test identified by test123 using 't118';

1.4 給db1中相應的表上添加物化視圖日志

1.4.1 有主鍵表

create table test(id number,name varchar2(20));
alter table test add constraint pk_testid primary key(id);
create materialized view log on test  with primary key;  

對於有主鍵的表,日志依賴於主鍵。

create materialized view log on test  with primary key; 

1.4.2 無主鍵表

對於無主鍵的表,依賴於rowid

create table test_noprimarykey(id number,name varchar2(20));
create materialized view log on test_noprimarykey  with rowid;

1.5 在db2上創建物化視圖

分布式查詢中(也就是使用db_link), 不能以on commit 方式指定刷新方式,創建時會遇到ORA-12054.

1.5.1 有主鍵表的物化視圖

CREATE MATERIALIZED VIEW dbmon.test
(id,name)
REFRESH force 
start with sysdate next sysdate+1/1440  # 指定刷新頻率為1分鍾
AS
SELECT id,name FROM dbmon.test@to_118;

1.5.2 無主鍵表的物化視圖

CREATE MATERIALIZED VIEW test_noprimarykey
(id,name)
REFRESH force
start with sysdate next sysdate+1/1440  # 指定刷新頻率為1分鍾
WITH rowid
AS
SELECT id,name FROM dbmon.test_noprimarykey@to_118;

1.6 測試數據同步

 在db1數據庫插入數據后,稍等 1分鍾,然后連到db2數據庫查看結果。

1.6.1 有主鍵表

在db1 上向表中插入一行數據:

insert into test values(1,'aaa');
commit;

1.6.2 無主鍵表

insert into test values(1,'bbb');
commit;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM