Oracle DBLINk的使用

作用:將多個不同地點的服務器的oracle數據庫邏輯上看成一個數據庫,也就是說在一個數據庫中可以操作另一個遠程的數據庫中的對象。 

語法:

CREATE [PUBLIC] DATABASE LINK dblink CONNECT TO user IDENTIFIED BY password USING ‘connect_string‘;

DROP [PUBLIC] DATABASE LINK dblink; 

    注意:你必須有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的權限(可用sys身份去分配),另外,在你要連接的數據庫上的權限.

grant CREATE DATABASE LINK to hr;

參數說明: 

    dblink: 你所創建的database link的名字, 

    user和password:要連接的數據庫的用戶名和密碼 

    connect_string:可以是經過Net Manager配置的(tnsnames.ora)且經測試可以連接的服務名,不過也更直接用tnsnames裏的字符串:(DESCRIPTION =

(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = even.oracle.com)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME =orcl) )

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

 

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

實現從本地數據庫連接到遠端數據庫服務器:

遠程服務器要配置監聽並且啓動它

本地服務器要配置tnsnames

 實現在本地服務器上連接到遠程服務器數據庫:

在本地數據庫上,創建連接:

1、 鏈接字符串即服務名,首先在本地配置一個服務名,地址指向遠程的數據庫地址,當然也直接寫的連接字符串。 

2、創建數據庫鏈接(前提是已分配相應權限),

SQL> grant CREATE DATABASE LINK to hr;

Grant succeeded.

SQL> CREATE DATABASE LINK LinkRemoteTestDB CONNECT TO hr IDENTIFIED BY hr USING 'test';

Database link created.

當然也可以直接寫連接字符串

SQL>create database link LinkRemoteTestDB2 connect to hr identified by hr

using 'TEST =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = even.oracle.com)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = test)

    )

  )';

則創建了一個以hr用戶和TEST數據庫的鏈接LinkRemoteTestDB.

3.使用database link來查詢遠程HR schema下的testdblink 表信息

SQL> select * from testdblink@LinkRemoteTestDB;

        ID NAME

---------- ----------------------------------------

         1 Watson

         2 John

通過執行select * from testdblink@LinkRemoteTestDB; 進行測試,結果OK

 

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

在本地服務器上執行下面語句使GLOBAL_NAMES=TRUE:

SQL>ALTER SYSTEM SET GLOBAL_NAMES=TRUE;

再查詢時,會有如下的錯誤:

SQL> select * from testdblink@LinkRemoteTestDB;

select * from testdblink@LinkRemoteTestDB

                         *

ERROR at line 1:

ORA-02085: database link LINKREMOTETESTDB.REGRESS.RDBMS.DEV.US.ORACLE.COM

connects to TEST.REGRESS.RDBMS.DEV.US.ORACLE.COM

 

登錄遠端數據庫,通過執行

SQL>SELECT * FROM GLOBAL_NAME;得到其數據庫全名爲TEST.REGRESS.RDBMS.DEV.US.ORACLE.COM

用原方式SQL> CREATE DATABASE LINK LinkRemoteTestDB CONNECT TO hr IDENTIFIED BY hr USING 'test';創建過程不會出錯,但執行“select * from

testdblink@LinkRemoteTestDB;”的時候,就會出現ORA-02085: database link LINKREMOTETESTDB.REGRESS.RDBMS.DEV.US.ORACLE.COM

connects to TEST.REGRESS.RDBMS.DEV.US.ORACLE.COM的錯誤了 

所以需要採用下面的方式創建DBLINK:

SQL> create database link TEST.REGRESS.RDBMS.DEV.US.ORACLE.COM connect to HR identified by HR using 'TEST';

Database link created.再次執行

SQL> select * from [email protected];

        ID NAME

---------- ----------------------------------------

         1 Watson

         2 John

SQL> UPDATE [email protected] t set t.name='WatsonModified' where id=1;

1 row updated.

SQL> select * from [email protected];

        ID NAME

---------- ----------------------------------------

         1 WatsonModified

         2 John

 

執行成功了!!!!!

 

DBLINK其他相關的知識:

1、查看所有的數據庫鏈接

SQL>select owner,object_name from dba_objects where object_type='DATABASE LINK';

SQL>select * from dba_db_links;

2、刪除數據庫連接

SQL> drop database link LinkRemoteTestDB;

Database link dropped.

例子:

create public database link tblink

  connect to EM identified by em123456

  using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 172.24.105.70)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl)))';

 

select * FROM em_person_list@tblink;

exp_requisition_headers

 

drop public database link tblink;

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