dblink

当用户要跨本地数据库,访问另外一个数据库表中的数据时,本地数据库中必须创建了远程数据库的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端的数据库GLOBAL_NAME=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一般有两种方式[3]  ,不过在创建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权限授予给你的用户


dblink查询
查看所有的数据库链接,进入系统管理员SQL>操作符下,运行命令:
SQL>select owner,object_name from dba_objects where object_type='DATABASE LINK';
  或者

select * from dba_db_links;


dblink删除
  DROP PUBLIC DATABASE LINK link_name;


dblink使用
SELECT……FROM表名@数据库链接名;
查询、删除和插入数据和操作本地的数据库是一样的,只不过表名需要写成“表名@dblink服务器”而已。
例:查询北京数据库中emp表数据 select * from emp@BeiJing;
设此处北京数据库的数据库连接字符串为BeiJing;


同义词配合
  例子中from emp@BeiJing可以创建同义词来替代:
  CREATE SYNONYM 同义词名 FOR 表名;
CREATE SYNONYM 同义词名 FOR 表名@数据库链接名;
如:create synonym bj_scott_emp for emp@BeiJing;
于是就可以用bj_scott_emp来替代带@符号的分布式链接操作emp@BeiJing
  DB LINK是独立于创建用户(USER_DB_LINKS的USERNAME)起作用的,其他用户无法使用这个连接,无权限也不能删除它。

参考:

http://baike.baidu.com/link?url=mE0ZhqsTbbGBXdqycGPSbP3lLBjAyXVMyt3L7mt9swit6CanGFUl0FV1FY-2wQVh7F2EzS_vE2-mxeCiLlL1YK

实例

使用report用户创建dblink

SQL> grant create database link to report;
Grant succeeded.
SQL> conn report/report


create database link link_ACC connect to ACC identified by ACC using 'JJDB';
select count(*) from ACC.ac_ACC@link_ACC;

SQL> create database link link_ACC connect to ACC identified by ACC using 'JJDB';
Database link created.


SQL> select count(*) from ACC.ac_ACC@link_ACC;
  COUNT(*)
----------
       211
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值