oracle中的dblink ——基本操作

   當用戶要跨本地數據庫,訪問另外一個數據庫表中的數據時,本地數據庫中必須創建了遠程數據庫的dblink,通過dblink本地數據庫可以像訪問本地數據庫一樣訪問遠程數據庫表中的數據。本文主要介紹關於dblink的常見操作和相關的一點oracle操作。

   在創建dblink之前,首先要查看用戶是否有相應的權限。針對特定的用戶,使用 sqlplus user/pwd登錄後,執行如下語句:

select * from user_sys_privs t where t.privilege likeupper('%link%');

在sys用戶下,顯示結果爲:

SYS CREATE DATABASE LINK NO

SYS DROP PUBLIC DATABASE LINK NO

SYS CREATE PUBLIC DATABASE LINK NO

可以看出在數據庫中dblink有三種權限:

CREATE DATABASE LINK--所創建的dblink只能是創建者能使用,別的用戶使用不了

CREATE PUBLIC DATABASE LINK--public表示所創建的dblink所有用戶都可以使用

DROP PUBLIC DATABASE LINK--刪除指定dblink

   如果想要改變某個用戶的權限,需要在sys用戶下修改:

grantCREATEPUBLICDATABASE LINK,DROPPUBLICDATABASE LINK to scott;

 確定具備了相應的權限以後,登錄sqlplus即可對dblink進行相應的操作了。
   1. 查看dblink,有兩種方式,分別如下:

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

select * from dba_db_links;

    2. 創建dblink,也有兩種方式。

   第一種是使用tnsnames.ora配置文件添加相關配置信息,形如:

chose_you_like =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = xxx.xxx.xxx.xxx)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = yourOracleServiceName)
    )
  )

然後在sqlplus終端下執行:

createpublicdatabase link link_name connecttouser identified by pwd using 'chose_you_like';

    第二種是直接在sql語句中使用配置信息,語法格式如下:

createpublicdatabase link link_name connecttouser identified by pwd
using
'(DESCRIPTION =
    (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = xxx.xxx.xxx.xxx)(PORT = 1521))
  )
  (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = yourOracleServerName)
  )
 )';
這裏的user和pwd爲指定的oracle數據庫中的用戶名和密碼,SERVICE_NAME如果不確定的話,可以通過以下語句獲得:
show parameter service_names;
或者
select name,valuefrom v$parameter where name='service_names'
SERVICE_NAME的值必須與源數據庫保持一致,否則dblink創建成功後訪問時會報錯,錯誤提示如下:

ORA-12514: TNS: listener does not currently know of service requested inconnectdescriptor

3. 使用dblink
    dblink的使用相對比較簡單,把一般訪問本地表時的表名改爲如下格式即可:[user.]table@link_name。例如,在本機數據庫上創建了一個scott_dblink的public dblink(使用遠程主機
的scott用戶連接),則用sqlplus連接到本機數據庫,執行select * from scott.emp@scott_rmthot即可以將遠程數據庫上的scott用戶下的emp表中的數據獲取到。也可以在本地建一個同義
詞來指向scott.emp@scott_rmthost,方便日常的使用。
  4. 刪除dblink
    確定要刪除的dblink名字以後,可以通過drop命令直接將其刪除:

droppublicdatabase link dblinkname;

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