一、數據庫鏈路的概念
數據庫鏈路(database link),簡稱dblink,它是一個通道,是本地數據庫與遠程數據庫之間的通道,通過dblink,在本地數據庫中可以直接訪問遠程數據庫的對象。
dblink不是應用程序與數據庫之間的通道,而是數據庫之間的通道。
二、創建dblink
1、創建dblink的權限
用dba權限登錄數據庫,授於用戶create database link和create public database link權限。
語法:
grant create database link to 用戶名;
grant create public database link to 用戶名;
示例:
2、創建dblink的命令
語法:
create [public] database link 數據庫鏈路名稱
connect to 用戶名
identified by 密碼
using '遠程數據庫參數';
說明:
public:dblink的類型,缺省是當前用戶私有的,只有當前用戶可以使用該dblink,如果加上public選項,表示公用dblink,所有的數據庫用戶都可以使用。
數據庫鏈路名稱:給dblink起個名字。
用戶名:遠程數據庫登錄的用戶名。
密碼:遠程數據庫登錄的用戶的密碼。
遠程數據庫參數:該參數的配置有兩種方法:1)遠程數據庫的服務名,也就是本地數據庫服務器上$ORACLE_HOME/network/admin/tnsnames.ora中配置的數據庫服務名;2)不采用tnsnames.ora中的配置,直接指定遠程數據庫的參數。
3、用數據庫服務名創建dblink
1)配置遠程數據庫服務名
遠程數據庫服務名在$ORACLE_HOME/network/admin/tnsnames.ora文件中配置,內容如下:
snorcl11g_198 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 118.89.50.198)(PORT = 1521))
)
(CONNECT_DATA =
(SID = snorcl11g)
(SERVER = DEDICATED)
)
)
2)測試遠程數據庫登錄參數
3)創建dblink
用遠程數據庫服務名創建dblink,例如:
create database link dblink_01 connect to shqx identified by pwdidc using 'snorcl11g_198';
4)測試dblink
通過dblink獲取遠程數據庫的時間。
4、不用數據庫服務名創建dblink
如果不用數據庫服務創建dblink,就不需要配置tnsnames.ora文件。
示例:
create database link dblink_02 connect to shqx identified by pwdidc using
'(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 118.89.50.198)(PORT = 1521))
)
(CONNECT_DATA =
(SID = snorcl11g)
(SERVER = DEDICATED)
)
)';
dblink_01和dblink_02完全一樣。
三、dblink的使用
如果要訪問遠程數據庫的表或視圖,在表和視圖名之后附加@dblinkname就可以了。
訪問遠程數據庫的dual表:
select sysdate from dual@dblink_01;
訪問遠程數據庫的scott.emp表:
select * from scott.emp@dblink_02;
四、刪除dblink
刪除當前用戶私有的dblink:
drop database link 數據庫鏈路名;
刪除公用的dblink:
drop public database link 公用數據庫鏈路名;
五、應用經驗
dblink的知識很容易掌握,用dblink訪問遠程數據庫的對象很方便,但是,如果在程序中采用dblink對遠程數據庫的表進行增、刪、改、查操作時一定要遵守一個原則:盡可能不要產生遠程事務,因為數據庫對遠程的事務難以控制,也就是說,盡可能不要對遠程數據庫的表進行增、刪、改操作,查詢是沒有問題的。
六、版權聲明
C語言技術網原創文章,轉載請說明文章的來源、作者和原文的鏈接。
來源:C語言技術網(www.freecplus.net)
作者:碼農有道
如果文章有錯別字,或者內容有錯誤,或其他的建議和意見,請您留言指正,非常感謝!!!