一、业务需求

    在开发项目的过程中,我们需要实现在主库上能够同时连接其他的辅库,方便数据的处理操作;或是【跨越本地数据库,访问远程数据库的数据】;即将多个Oracle数据库看作是一个数据库进行操作(而不是分别连接)。

二、思路分析

Oracle的DBLink可以实现跨本地数据库,实现远程访问数据库(即:当我们要跨本地数据库,访问另外一个数据库表中的数据时,本地数据库中就必须要创建远程数据库的dblink,通过dblink本地数据库可以像访问本地数据库一样访问远程数据库表中的数据)。

OUTBOUND_DBLINK_PROTOCOLS (oracle.com)

ALL_DB_LINKS (oracle.com)

三、实现方法

3.1、检查指定账号是否具有dblink权限和授权

《1》查看指定用户是否具有dblink权限(前提是使用该用户登录后在执行如下语句)

--查看用户是否具有dblink权限
SELECT * FROM user_sys_privs WHERE privilege LIKE UPPER('%database%') ;

 如果查询结果不为空则表示有授权内容;如下图表示该账户(SCOTT)没有dblink的任何权限:

如下图表示账号(SCOTT)具有创建公有dblink的权限: 

--查看指定用户是否具有dblink权限
SELECT * FROM user_sys_privs WHERE privilege LIKE UPPER('%database%') AND USERNAME='需查询的账号名称' ;

如下图表示指定的Scott用户具有创建公有dblink的权限:

《2》dblink授权的三种方式

dblink授权的三种方式
序号授权命令说明
1CREATE DATABASE LINK所创建的dblink只能是创建者自己使用,其它的用户无法使用
2CREATE PUBLIC DATABASE LINKpublic表示所创建的dblink所有用户都可以使用,是公有的dblink
3DROP PUBLIC DATABASE LINK具有删除公有dblink的权限

《3》在sys(超级管理员)账号下给指定的账号授权

--如果没有dblink权限则使用dba账号进行授权即可

--表示给账号授予创建公有dblink权限
grant create public database link to 需授权dblink的账号名称;

--表示给账号授予创建私有dblink权限
grant create database link to 需授权dblink的账号名称;

--表示给账号授予创建公有dblink权限
grant DROP PUBLIC DATABASE LINK to 需授权dblink的账号名称;

比如给SCOTT账号授予创建公有dblink的权限(需在具有dba权限的账号下执行该语句),如下图所示:

  

3.2、创建dblink

创建dblink有两种方式:

《1》使用PL/SQL的可视化工具进行创建

 《2》直接使用SQL语句创建

--使用语句创建dblink(注意:如果密码是数字开头则使用""包含起来)
create public database link 需创建的dblink名称  
  connect to 需连接的远程账号名称 identified by "需连接远程账号对应的密码"
  using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 需连接远程数据库IP地址)(PORT = 需连接远程数据库的端口号)))(CONNECT_DATA =(SERVICE_NAME = 需连接远程数据库的服务名称)))';  

如下图为在SCOTT账号下创建名为【SCOTT_TO_TEST】的dblink连接到TEST账号的SQL语句:

3.3、查询dblink

--一般账号查询Oracle数据库中的所有dblink相关信息
SELECT * FROM all_db_links;	


--使用dba账号查询Oracle数据库中的所有dblink相关信息
SELECT * FROM dba_db_links;	-

3.4、使用创建好的dblink

SELECT * FROM 远程数据库的表名称@创建好的dblink连接名称

比如想要在SCOTT账号下查询TEST账号下的PeopleInfo表信息语句如下:

 

3.5、删除指定dblink

--删除已经存在的dblink
drop public database link 已经存在的dblink名称;

比如我们这里删除已经存在的名为【SCOTT_TO_TEST1】的dblink,如下图所示:

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐