Oracle建立DBLINK的詳細步驟記錄

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

北京的總部有一個集中的數據庫,其SID是SIDBJ,用戶名:userbj,密碼:bj123,北京的IP地址是:192.168.1.101。
在本地(新疆)的分公司也有一個數據庫,其SID是SIDXJ,用戶:userxj,密碼:xj123,新疆的IP地址是:192.168.1.100。
要將本地新疆的SIDXJ數據庫中訪問到北京的數據庫SIDBJ中的數據。
也就是說,在sidxj的數據庫中,用戶userxj(192.168.1.100)需要建立DBLINK,以userbj的用戶身份訪問sidBJ(192.168.1.101)中的數據。

測試環境:兩個數據庫均建立在WINXP上,ORACLE的版本均爲Oracle817
建立環境時,要注意關閉兩臺計算機上的Windows的防火牆,否則,會出現能ping通,但Oracle連接不通的情況。

1、問:如何返回數據庫的GLOBAL_NAME?
執行SELECT * FROM GLOBAL_NAME;
北京的數據庫的GLOBAL_NAME爲SIDBJ.US.ORACLE.COM
新疆的數據庫的GLOBAL_NAME爲SIDXJ

2、問:如何查看Global_name參數是true還是False?
答:執行:SQL> show parameter global_name;
執行的結果如下:
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
global_names                         boolean     TRUE

表示該參數是true.

也可以通過查看v$option視圖,如果其中Advanced replication爲TRUE,則支持高級複製功能;否則不支持。
執行語句爲:select * from v$option;

3、問:如何檢查Oracle的版本是否支持同步功能?
答:執行select * from v$option where PARAMETER='Advanced replication'語句,
如何返回值爲True,那麼就是支持,否則就是不支持。在兩個數據庫中都是檢查是否支持才行。


建立步驟:

1、在本地建立一個Oracle的客戶端連接tns_xj_to_bj,用於連接北京的數據庫。
2、新建一個連接tnsxj,用於連接本地的sidxj數據庫,以tnsxj/userxj/xj123登錄到PLSQL中。

下面開始創建連接到北京的遠程數據連接DBLink。
create database link SIDBJ.US.ORACLE.COM connect to userbj identified by bj123 using 'tns_xj_to_bj'; 
其中:SIDBJ.US.ORACLE.COM是遠程的數據庫的global_name,userbj是連接SIDBJ的用戶名,bj123是userbj的密碼,
tns_xj_to_bj是本地建立的連接到北京的數據庫的服務名。

3、測試連接是否成功:
select * from [email protected] 
如果返回結果如下則表示連接成功了。
DUMMY
-----
X

4、查詢已經建立的遠程連接名:
SQL> select owner,object_name from dba_objects where object_type='DATABASE LINK';

OWNER                          OBJECT_NAME
------------------------------ --------------------------------------------------------------------------------
SYSTEM                         SIDBJ.US.ORACLE.COM
USERXJ                         DBLINK_XJ_TO_BJ
USERXJ                         SIDBJ


5、至此,在新疆的計算機上建立了一個DBLINK,用於連接到北京的數據庫上,
在北京的數據庫中,建立一個表用於測試。
create table USERBJ.BJ_TEST
(
STU_ID   NUMBER,
STU_NAME VARCHAR2(100)
)
在其中增加一條記錄:
insert into BJ_TEST (STU_ID, STU_NAME)
values (1, '鍾德榮');


在新疆的數據庫中查詢北京的數據庫中表的信息:
select * from [email protected]
查詢結果:
    STU_ID STU_NAME
---------- --------------------------------------------------------------------------------
         1 鍾德榮

表示查詢是正常的。
說明:該查詢是用


以上腳本全部通過測試。

 

 

以上內容轉自:http://hi.baidu.com/llscompazz/blog/item/f3c6cbee85c376202cf5341c.html

 

——————————————————————————————————————————————————————

 

下面再補充三點:

1、  創建DB_Link時,"tns_xj_to_bj"是指服務器端tnsnames.ora文件中所定義的環境名,但在企業中,並沒有幾個人有權限查看這個文件中的內容。

      解決辦法:將‘tns_xj_to_bj’改寫成客戶端tnsnames.ora文件中對應的實際連接串。如:

(DESCRIPTION =
    (ADDRESS_LIST =
       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.111)(PORT = 1521))
    )
    (CONNECT_DATA =
       (SERVICE_NAME = test)
    )
)

     注意:此處“(SERVER = DEDICATED)”可有可無,並沒什麼影響。

2、查看所有DBLink可採用以下兩種方式

     SQL1:select owner,object_name from dba_objects where object_type='DATABASE LINK';

     SQL2:select * from all_db_links;

     但唵更偏向用SLQ2。No Reason!呵呵!

3、刪除DB_Link

     drop database link STAGEING.REGRESS.RDBMS.DEV.US.ORACLE.COM;

     其中database不能更改,STAGEING.REGRESS.RDBMS.DEV.US.ORACLE.COM爲你創建的DB_Link值(採用SQL2),當然需要用創建該DB_Link的用戶登錄才能成功刪除!












通過SHOW PARAMETER GLOBAL_NAME,可以查看到其值是FALSE或者TRUE。

 

一)對於GLOBAL_NAME=FALSE的情況,則DBLINK的名稱可以自定義,相關的過程如下:

 

實現在本地數據庫中連接遠端數據庫服務器:

  1. 在NET MANAGER中建立相關遠端服務連接。
  2. 執行如下的SQL腳本,創建連接:
    create database link link2server516 connect to fwms_develop identified by fwms_develop using '5_161_ORADB10';
  3. 通過“SELECT * from pub_user@link2server516;”進行測試,結果OK
  4. 通過創建同義詞的方式簡化“CREATE SYNONYM syn_user FOR pub_user@link2server516;”,使用方式爲“SELECT * from syn_user;”
  5. 通過創建本地視圖的方式簡化“CREATE VIEW V_USER AS SELECT * FROM pub_user@link2server516;”,使用方式爲“SELECT * from V_USER;”
  6. 在JAVA應用程序上,測試也是成功的。

 

實現在遠程服務器上遠程dblink到本機數據庫:

  1. 在本地數據庫上,創建連接:
    create database link link2local
       connect to system identified by orcl
       using 
      '(DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.22.117)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = orcl)
        )
      )';
  2. 通過執行“SELECT * from tbl_user@LINK2LOCAL;”進行測試,結果OK
  3. 通過執行“CREATE VIEW V_USER AS SELECT * FROM tbl_user@LINK2LOCAL;”測試,結果也OK
  4. 通過JAVA應用程序測試也是成功的

二)對於GLOBAL_NAME = TRUE的情況,數據庫鏈接(DATABASE LINK)的名字必須和數據庫的名字相同:

  1. 執行“ALTER SYSTEM SET GLOBAL_NAME=TRUE;”,結果報錯“ORA-02065: illegal option for ALTER SYSTEM”
  2. 執行“ALTER SYSTEM SET GLOBAL_NAMES=TRUE;”,結果OK,也即修改參數的語句應該是多一個S
  3. 登錄遠端數據庫,通過執行“SELECT * FROM GLOBAL_NAME;”得到其數據庫全名爲“ORADB10.REGRESS.RDBMS.DEV.US.ORACLE.COM”
  4. 用原方式“create database link link2server516 connect to fwms_develop identified by fwms_develop using '5_161_ORADB10';”創建過程不會出錯,但執行“SELECT * from pub_user@link2server516;”的時候,就會出現“ORA-02085: database link LINK2SERVER516 connects to ORADB10.REGRESS.RDBMS.DEV.US.ORACLE.COM”的錯誤了
  5. 採用“create database link ORADB10.REGRESS.RDBMS.DEV.US.ORACLE.COM connect to fwms_develop identified by fwms_develop using '5_161_ORADB10';”語句創建鏈接,執行“SELECT * from [email protected];”後,結果OK

發佈了1 篇原創文章 · 獲贊 1 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章