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