轉載地址:http://moonights.iteye.com/blog/568895
--創建 CREATE public database link test_link CONNECT TO scott IDENTIFIED BY tiger using '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = LEE) ) )'; --使用 select ename from emp@test_link; --刪除 drop public database link TEST_LINK;
1、已經配置本地服務
create public database
link toBeJing connect to scott
identified by tiger using 'BEJING'
數據庫連接字符串'BEJING'是當前客戶端數據庫中TNSNAMES.ORA文件裏定義的別名名稱.可以用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA裏定義.
2、直接建立鏈接
create database link toBeJing
connect to scott identified by tiger
using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = X.X.X.X )(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = BJORCL)
)
)';
host=數據庫的ip地址,service_name=數據庫的ssid。
其實兩種方法配置dblink是差不多的,我個人感覺還是第二種方法比較好,這樣不受本地服務的影響。
注意: 假如創建全局dblink,則必須使用systm或sys用戶,在database前加public。
1.先創建PUBLIC DATABASE LINK,不用指定用戶和密碼
scott@TEST>conn system/test
Connected.
system@TEST>CREATE PUBLIC DATABASE LINK orcl USING 'BEJING';
Database link created.
2.再在各個用戶下創建私有DATABASE LINK(同PUBLIC DATABASE LINK名稱相同),指定用戶和密碼
system@TEST>conn scott/tiger
Connected.
scott@TEST>CREATE DATABASE LINK orcl CONNECT TO scott IDENTIFIED BY tiger;
Database link created.
實際上相當於:
CREATE DATABASE LINK orcl USING 'BEJING' CONNECT TO scott IDENTIFIED BY tiger;
db link 有3種類型,我這裏只討論其中兩種,connected user和fixed user。
connected user,簡單來說,連接方數據庫以connected的用戶來連接遠程數據庫。
fixed user,簡單來說,連接方數據庫以fixed(指定的)用戶來連接遠程數據庫。
看看創建db link語法,你對這兩種類型就比較清楚了。
創建connected user的db link語法:
create databas link foo connect to scott identified by tiger using 'BEJING' ;
創建fixed user的db link語法:
create databas link foo using 'BEJING' ;
db link 的命名和global_names有關,global_name是數據庫全局名稱,global_name在你所管理的數據庫中要保證唯一。數據庫名稱是db_name。數據庫名稱一般都取得比較短,我的習慣一般取長度4個字符,重名概率高。
所以,oracle模仿域名搞出一個global_name,global_name=db_name+db_domain。
有了global_name,就可以實現數據庫命名的全局唯一。例:ORCL.REGRESS.RDBMS.DEV.US.ORACLE.COM
數據庫全局名稱可以用以下命令查出
SELECT * FROM GLOBAL_NAME;
如果global_names=true,那麼db link的命名要和遠程數據庫的global_name相同;
如果global_names=false,那麼你可以隨便命名db link。
查詢global_names是true還是false,在pl/sql中的命令窗口(不是sql窗口)執行:show parameter global_names
二、dblink查詢:
查看所有的數據庫鏈接,進入系統管理員SQL>操作符下,運行命令:
SQL>select owner,object_name from dba_objects where object_type='DATABASE LINK';
三、dblink刪除:
DROP PUBLIC DATABASE LINK toBeJing
四、dblink使用:
SELECT……FROM表名@數據庫鏈接名;
查詢、刪除和插入數據和操作本地的數據庫是一樣的,只不過表名需要寫成“表名@dblink服務器”而已。
例:查詢北京數據庫中emp表數據 select * from emp@toBeJing;
五、同義詞配合:
第四點中from emp@toBeJing可以創建同義詞來替代:
CREATE SYNONYM同義詞名FOR 表名;
CREATE SYNONYM同義詞名FOR 表名@數據庫鏈接名;
如:create synonym bj_scott_emp for emp@toBeJing;
於是就可以用bj_scott_emp來替代帶@符號的分佈式鏈接操作emp@toBeJing
DB LINK是獨立於創建用戶(USER_DB_LINKS的USERNAME)起作用的,其他用戶無法使用這個連接,無權限也不能刪除它。
一:dblink創建: