在Oracle中创建DBLINK
在开发项目的过程中,我们需要实现在主库上能够同时连接其他的辅库,方便数据的处理操作;或是【跨越本地数据库,访问远程数据库的数据】;即将多个Oracle数据库看作是一个数据库进行操作(而不是分别连接)。...
一、业务需求
在开发项目的过程中,我们需要实现在主库上能够同时连接其他的辅库,方便数据的处理操作;或是【跨越本地数据库,访问远程数据库的数据】;即将多个Oracle数据库看作是一个数据库进行操作(而不是分别连接)。
二、思路分析
Oracle的DBLink可以实现跨本地数据库,实现远程访问数据库(即:当我们要跨本地数据库,访问另外一个数据库表中的数据时,本地数据库中就必须要创建远程数据库的dblink,通过dblink本地数据库可以像访问本地数据库一样访问远程数据库表中的数据)。
OUTBOUND_DBLINK_PROTOCOLS (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授权的三种方式
序号 | 授权命令 | 说明 |
1 | CREATE DATABASE LINK | 所创建的dblink只能是创建者自己使用,其它的用户无法使用 |
2 | CREATE PUBLIC DATABASE LINK | public表示所创建的dblink所有用户都可以使用,是公有的dblink |
3 | DROP 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,如下图所示:
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)