熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle建立DBLINK的詳細步驟記錄

2013-11-13 22:12:06  來源: Oracle 

  測試條件

  假設某公司總部在北京新疆有其下屬的一個分公司在本次測試中新疆的計算機為本地計算機即本要的IP地址為

  北京的總部有一個集中的數據庫其SID是SIDBJ用戶名userbj密碼bj北京的IP地址是

  在本地(新疆)的分公司也有一個數據庫其SID是SIDXJ用戶userxj密碼xj新疆的IP地址是

  要將本地新疆的SIDXJ數據庫中訪問到北京的數據庫SIDBJ中的數據

  也就是說在sidxj的數據庫中用戶userxj()需要建立DBLINK以userbj的用戶身份訪問sidBJ()中的數據

  測試環境兩個數據庫均建立在WINXP上ORACLE的版本均為Oracle

  建立環境時要注意關閉兩台計算機上的Windows的防火牆否則會出現能ping通但Oracle連接不通的情況

  如何返回數據庫的GLOBAL_NAME?

  執行SELECT * FROM GLOBAL_NAME;

  北京的數據庫的GLOBAL_NAME為SIDBJUSORACLECOM

  新疆的數據庫的GLOBAL_NAME為SIDXJ

  如何查看Global_name參數是true還是False?

  答執行SQL> show parameter global_name;

  執行的結果如下

  NAME                                 TYPE        VALUE

  

  global_names                         boolean     TRUE

  表示該參數是true

  該參數為true時你在本地建立的DBLINK的名稱必須和遠程的Global_name一致才行

  查看遠程數據徊是否支持高級復制功能

  答通過查看v$option視圖如果其中Advanced replication為TRUE則支持高級復制功能否則不支持

  執行語句為select * from v$option;

  也可以執行select * from v$option where PARAMETER=Advanced replication語句

  如何返回值為True那麼就是支持否則就是不支持在兩個數據庫中都是檢查是否支持才行

  建立步驟

  在本地建立一個Oracle的客戶端連接tns_xj_to_bj用於連接北京的數據庫

  在北京的數據庫中建立一個表用於測試

  create table USERBJBJ_TEST

  (

  STU_ID   NUMBER

  STU_NAME VARCHAR()

  )

  在其中增加一條記錄

  insert into BJ_TEST (STU_ID STU_NAME)

  values ( 鐘德榮);

  新建一個連接tnsxj用於連接本地的sidxj數據庫以tnsxj/userxj/xj登錄到PLSQL中

  下面開始創建連接到北京的遠程數據連接DBLink

  create database link SIDBJUSORACLECOM connect to userbj identified by  bj using tns_xj_to_bj;

  其中SIDBJUSORACLECOM是遠程的數據庫的global_nameuserbj是連接SIDBJ的用戶名bj是userbj的密碼

  tns_xj_to_bj是本地建立的連接到北京的數據庫的服務名

  測試連接是否成功

  select * from dual@SIDBJUSORACLECOM

  如果返回結果如下則表示連接成功了

  DUMMY

  

  X

  在本地數據為中查詢已經建立的遠程連接名

  SQL> select ownerobject_name from dba_objects where object_type=DATABASE LINK;

  OWNER                          OBJECT_NAME

  

  SYSTEM                         SIDBJUSORACLECOM

  USERXJ                         DBLINK_XJ_TO_BJ

  USERXJ                         SIDBJ

  至此在新疆的計算機上建立了一個DBLINK用於連接到北京的數據庫上

  在新疆的數據庫中查詢北京的數據庫中表的信息

  select * from bj_test@SIDBJUSORACLECOM

  查詢結果

  STU_ID STU_NAME

  

   鐘德榮

  表示查詢是正常的

  關於global_name參數的測試

  create database link a connect to userbj identified by  bj using tns_xj_to_bj;

  建立了一個DBLINK執行下面的查詢

  select ownerobject_name from dba_objects where object_type=DATABASE LINK;

  可以看到已經建立了名為a的DBLINK

  但執行下面的查詢檢索遠程數據時就會出現錯誤

  select * from bj_test@a

  原因是因為本地數據庫的global_names的參數值為true所以dblink的名稱必須和遠程數據庫的global_names相同

  要修改本地數據庫的global_names參數為false;(注意是修改本地數據庫SIDXJ通過測試修改過程的參數不行過程的global_names參數為TRUE還是為FALSE沒有關系)

  使用下面的語句修改該參數

  SQL>  alter system set global_names=false;

  再執行下面的幾步即可查詢出數據

  create database link a connect to userbj identified by  bj using tns_xj_to_bj; 創建DBLINK

  select ownerobject_name from dba_objects where object_type=DATABASE LINK;查詢現有的DBLINK

  select * from bj_test@a查詢遠程表

  下面在SIDXJ中建立存儲過程通過DBLINK檢索遠程數據庫SIDBJ 存儲過程如下

  CREATE OR REPLACE PROCEDURE test_cur

  as

  strSql varchar();

  t_stu_name varchar();

  TYPE TCUR IS REF CURSOR;

  CUR TCUR;

  begin

  strSql:=select stu_name from bj_test@a;

  OPEN CUR FOR strSql;

  LOOP

  FETCH CUR INTO t_stu_name;

  EXIT WHEN CUR%NOTFOUND;

  DBMS_OUTPUTPUT_LINE(t_stu_name);

  END LOOP;

  CLOSE CUR;

  end test_cur;

  測試存儲過程顯示輸出了過程數據庫中的STU_NAME的值

  以上腳本全部在ORACLE下通過測試


From:http://tw.wingwit.com/Article/program/Oracle/201311/18443.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.