dblink(Database Link)數據庫連接顧名思義就是數據庫的連接 ,就像電話線同樣,是一個通道,當咱們要跨本地數據庫,訪問另一個數據庫表中的數據時,本地數據庫中就必需要建立遠程數據庫的dblink,經過dblink本地數據庫能夠像訪問本地數據庫同樣訪問遠程數據庫表中的數據。數據庫
格式
1.建立dblink語法:
CREATE [SHARED] [PUBLIC] database link link_name
[CONNECT TO [user] [current_user] IDENTIFIED BY password]
[AUTHENTICATED BY user IDENTIFIED BY password]
[USING 'connect_string']
說明:
1)權限:建立數據庫連接的賬號必須有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的系統權限,用來登陸到遠程數據庫的賬號必須有CREATE SESSION權限。這兩種權限都包含在CONNECT角色中(CREATE PUBLIC DATABASE LINK權限在DBA中)。一個公用數據庫連接對於數據庫中的全部用戶都是可用的,而一個私有連接僅對建立它的用戶可用。由一個用戶給另一個用戶受權私 有數據庫連接是不可能的,一個數據庫連接要麼是公用的,要麼是私有的。
2)link : 當source端的參數(parameter)GLOBAL_NAMES=TRUE時,link名必須與遠程數據庫的全局數據庫名global_name)相同;不然,能夠任意命名。
3)current_user使用該選項是爲了建立global類型的dblink。在分佈式體系中存在多個數據庫的話。若是想要在每個數據庫中均可以使用一樣的名字來訪問數據庫a,那在每一個數據庫中都要建立一個到數據庫a的db_link,太麻煩了。因此有這個選項的話你只要建立一次。全部的數據庫均可以使用這個db_link來訪問了。要使用這個特性,必須有oracle nameserver或者ORACLE目錄服務器。而且數據庫a的參數global_names=true.具體我也沒有建立過,沒有這個環境。
4)connectstring:鏈接字符串,tnsnames.ora中定義遠程數據庫的鏈接串,也能夠在建立dblink的時候直接指定。
5)username、password:遠程數據庫的用戶名,口令。若是不指定,則使用當前的用戶名和口令登陸到遠程數據庫,當建立connected user類型的dblink時,須要若是採用數據字典驗證,則須要兩邊數據庫的用戶名密碼一致。服務器
基本語法
建立dblink
建立dblink通常有兩種方式 ,不過在建立dblink以前用戶必須有建立dblink的權限。想知道有關dblink的權限,以sys用戶登陸到本地數據庫:
select from user_sys_privs t
where t.privilege like upper('%link%');
查詢結果集 :
1 SYS CREATE DATABASE LINK NO
2 SYS DROP PUBLIC DATABASE LINK NO
3 SYS CREATE PUBLIC DATABASE LINK NO
能夠看出在數據庫中dblink有三種權限:
1.CREATE DATABASE LINK(所建立的dblink只能是建立者能使用,別的用戶使用不了) ,
2.CREATE PUBLIC DATABASE LINK(public表示所建立的dblink全部用戶均可以使用),
3.DROP PUBLIC DATABASE LINK。
在sys用戶下,把CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASELINK權限授予給你的用戶:
grant CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK to scott;
而後以scott用戶登陸本地數據庫
一、已經配置本地服務
create public database link link_name
connect to username identified by password
using 'connect_string';
注:link_name是鏈接名字,能夠自定義;
username是登錄數據庫的用戶名;
password是登錄數據庫的用戶密碼;
connect_string是數據庫鏈接字符串。
數據庫鏈接字符串是當前客戶端數據庫中TNSNAMES.ORA文件裏定義的別名名稱.能夠用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA裏定義.
二、直接創建連接
create database link link_name
connect to username identified by password
using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = X.X.X.X )(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = SSID)
)
)';
host=數據庫的ip地址,service_name=數據庫的ssid。
其實兩種方法配置dblink是差很少的,我的感受仍是第二種方法比較好,這樣不受本地服務的影響。
注意: 假如建立全局dblink,則必須使用systm或sys用戶,在database前加public。
dblink查詢
查看全部的數據庫連接,進入系統管理員SQL>操做符下,運行命令:
SQL>select owner,object_name from dba_objects where object_type='DATABASE LINK';
或者
select from dba_db_links;
dblink刪除oracle
DROP PUBLIC DATABASE LINK link_name;
dblink使用
SELECT……FROM 表名@數據庫連接名;br/>查詢、刪除和插入數據和操做本地的數據庫是同樣的,只不過表名須要寫成「表名@dblink服務器」而已。
例:查詢北京數據庫中emp表數據 select * from emp@BeiJing;
設此處北京數據庫的數據庫鏈接字符串爲BeiJing;
同義詞配合分佈式
例子中from emp@BeiJing能夠建立同義詞來替代:
CREATE SYNONYM 同義詞名 FOR 表名;
CREATE SYNONYM 同義詞名 FOR 表名@數據庫連接名;
如:create synonym bj_scott_emp for emp@BeiJing;br/>因而就能夠用bj_scott_emp來替代帶@符號的分佈式連接操做emp@BeiJing
DB LINK是獨立於建立用戶(USER_DB_LINKS的USERNAME)起做用的,其餘用戶沒法使用這個鏈接,無權限也不能刪除它。ide