物化視圖

1. 有兩個數據庫 db1,db2位於不同的機器。

2。數據庫db1上的用戶HR有表cust和cust_detail。
現要在數據庫db2上的HR用戶上創建一個基於cust和cust_detail的物化視圖mv_cust。

3.先在數據庫db2上創建一個鏈接
connect hr/hr@db2;
create public database link HRLINK
connect to HR identified by hr using 'db1';

4.在數據庫db1上創建物化視圖日誌;
connect hr/hr@db1;
create materialized view log on cust with rowid;
create materialized view log on cust_detaile rowid;

5.然後在數據庫db2上創建物化視圖mv_cust:
connect hr/hr@db2
create materialized view hr.mv_cust
refresh force with rowid
start with sysdate
next sysdate+1
as
SELECT a.rowid arowid,b.rowid browid,
a.CUST_ID,
a.CUST_NAME,
a.CUST_ADDR ,
b.prof_type ,
b.sex ,
b.cust_birthda cust_birthday,
From hr.cust@hrlink a ,hr.cust_detail@hrlink b
where a.cust_id=b.cust_id;

系統提示如下:
ORA-12015: cannot create a fast refresh materialized view from a complex query


兩個獨立的數據庫之間如何同步某些表
1. 假設A地址192.1.1.1,B地址192.1.1.2

2. A、B上配置好TCP/IP,互相Ping通。

3. 配置init.ora文件,若global_name = true的話,database link 的名字必須同遠程機的實例名相同,

  爲簡便起見,請將global_name 設爲 false。

4. 在服務器上配置tnsnames.ora,將Remote機器的地址(IP)信息加入本地的tnsnames.ora

  A服務器:
  TNSA_B =
   (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS =
       (COMMUNITY = tcp.world)
       (PROTOCOL = TCP)
       (Host = 192.1.1.2)
       (Port = 1521)
      )
    )
    (CONNECT_DATA = (SID = ORCL)
    )
   )

  B服務器:
  TNSB_A =
   (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS =
       (COMMUNITY = tcp.world)
       (PROTOCOL = TCP)
       (Host = 192.1.1.1)
       (Port = 1521)
      )
    )
    (CONNECT_DATA = (SID = ORCL)
    )
   )

5. 在 SQL*Plus 或其它工具中創建數據庫鏈接

  A服務器:create public database link A_TO_B connect to tmp identified by tmp using 'TNSA_B';

  B服務器:create public database link B_TO_A connect to tmp identified by tmp using 'TNSB_A';

  說明:
  tmp是一個臨時用戶,A服務器、B服務器上均有,它的作用是提供鏈接的目的地,
  假如:
  B服務器上有user1、user2、tmp三個用戶,user1和user2把他們想要對外公開的表的權限授給tmp用戶,
  那麼,所有能通過database link連接到tmp用戶上的人就可以直接訪問user1、user2上的已授權表了。

6. 建立database link以後,請用這種格式select * from table_name@database_link_name 的方式訪問

  如:在A服務器上想訪問B服務器上user1用戶table1表的內容(A到B的連接爲A_TO_B),則

  SQL> select * from table1@A_TO_B;
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章