oracle中的dblink ——基本操做

當用戶要跨本地數據庫,訪問另一個數據庫表中的數據時,本地數據庫中必須建立了遠程數據庫的dblink,經過dblink本地數據庫能夠像訪問本地數據庫同樣訪問遠程數據庫表中的數據。本文主要介紹關於dblink的常見操做和相關的一點oracle操做。sql

   在建立dblink以前,首先要查看用戶是否有相應的權限。針對特定的用戶,使用 sqlplus user/pwd登陸後,執行以下語句:數據庫



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

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

SYS CREATE DATABASE LINK NOspa

SYS DROP PUBLIC DATABASE LINK NOorm

SYS CREATE PUBLIC DATABASE LINK NOip

能夠看出在數據庫中dblink有三種權限:get

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

CREATE PUBLIC DATABASE LINK--public表示所建立的dblink全部用戶均可以使用io

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;

相關文章
相關標籤/搜索