某些時候,需要關聯不同的數據庫進行數據查詢、操作等。
在Oracle中,關聯不同的數據庫進行表關聯,就要用到了數據庫連接(DB link)。
創建DB link有兩種方法:通過SQL語句創建,通過可視化界面創建(其實也是執行的SQL語句)。
1.通過PL/SQL Developer 工具建立
Name:此DBLINK的名字,比如:DEMO
UserName:數據庫登陸用戶名
Password:數據庫登陸密碼
Database:(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.1)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=DEMO)))
以上紅色字體內容從以下地方可查詢:\product\10.2.0\client_1\network\admin\tnsnames.ora
- DEMO =
- (DESCRIPTION =
- (ADDRESS_LIST =
- (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT = 1521))
- )
- (CONNECT_DATA =
- (SERVER = DEDICATED)
- (SERVICE_NAME = DEMO)
- )
- )
將上面的"DEMO="去掉,其餘內容把換行符、空格去掉組成一個字符串即可。
然後點擊“Apply”按鈕即可。
建立好後,會在Database links菜單下顯示。
測試DB link是否有效,執行語句:Select * from student@DEMO
其中,student爲遠程數據庫的表名。
2.通過SQL語句創建
create [public] database link V_LINK_NAME connect to V_USERNAME identified by V_PASSWORD using '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.1)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=V_SERVICE_NAME)))';
其中:
V_LINK_NAME表示服務名
V_SERVICE_NAME表示服務名,可通過SQL語句查詢:SELECT * FROM GLOBAL_NAME; --查看服務名
V_USERNAME表示登錄遠程數據庫的帳號
V_PASSWORD表示登錄遠程數據庫的密碼
PS:經本人測試,當tns字符串中帶有換行符時,該DB link無效。
當數據庫參數global_names=true時, dblink名必須與遠程數據庫的全局數據庫名(global_name)相同;
當數據庫參數global_names=false時,不要求dblink和遠程數據庫全局數據庫名相同。
命令行窗口(command window)可查看數據庫參數:
SQL> show parameter global_names; --查看數據庫參數global_names的值
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
global_names boolean FALSE
SQL> select * from global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
STOCK.TRAVELSKY
--查看連接
select * from dba_db_links;
select owner,object_name from dba_objects where object_type='DATABASE LINK';
--使用連接
select * from table_name@link_name;
drop [public] database link link_name;