物化檢視加DBLINK實現資料的同步_20170216

wzq609發表於2017-02-16
【業務場景】需要把生產的ERP系統上面的一個表的資料抽取到另外一個報表的資料庫裡面,公司內部是沒有ESB的平臺,考慮到整個需求的緊急程度和對效率的要求,建議採用物化檢視+DBLINK的方式來實現資料的同步;

【環境說明】
資料庫的版本:11.2.0.3
資料的流向:DB1為源資料庫,DB2為目標資料庫
源表:EMP,該表包含主鍵EMPNO
目標物化檢視:MV_EMP

【方案思路】
1、在DB2上面建立一個連線DB1的DBLINK;
2、在EMP表上面增加物化檢視日誌,並在目標表建立物化檢視MV_EMP;
3、建立JOB進行定時重新整理;


【實踐操作】

1、在db2上面新增tns檔案

  1. DB1 =
  2. (DESCRIPTION =
  3. (ADDRESS_LIST =
  4. (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.10)(PORT = 1521))
  5. )
  6. (CONNECT_DATA =
  7. (SERVICE_NAME = DB1)
  8. )
  9. )


2、在db2上面建立dblink
create  public database link  DB1 connect to "scott"  identified by  "tigger"  using  'DB1' ;

3、在db1上面建立物化檢視日誌

create materialized view log on EMP  with primary key;  
注:

對於已定義主鍵的表,分別執行以下 sql:create materialized view log on 表名  with primary key; 
對於未定義主鍵的表,分別執行以下 sql:create materialized view log on 表名  with rowid;


4、在db2上面建立物化檢視,並設定重新整理時間

CREATE MATERIALIZED VIEW SCOTT.MV_EMP
(EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO)
REFRESH FAST ON DEMAND          
NEXT SYSDATE + 1/(24*60)   #每分鐘重新整理
WITH PRIMARY KEY                #基於PRIMARY KEY
AS
SELECT EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO FROM scott.EMP@DB1;
【其他】

  • 建立物化檢視日誌的時候,會在相應的物化檢視日誌表,本質就是一張物理表,表名的結構如下:MLOG$_TABLENAME,本例中建立的物化檢視日誌表名為:MLOG$_EMP;
  • 當有資料變更的時候,MLOG$_EMP表就會記錄源表的變更記錄,等目標的物化檢視表重新整理以後,該表的資料會被清空;
  • 當高水位太高的情況下,也是需要進行維護的;
整個方案其實用到的東西也是很簡單的,物化檢視和DBLINK,當這兩個功能進行結合的時候,就實現了資料倉儲的資料抽取的工作。創新有時候只是功能的疊加使用;





來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12679300/viewspace-2133681/,如需轉載,請註明出處,否則將追究法律責任。

相關文章