• 在Oracle中创建DBLINK


    一、业务需求

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

    二、思路分析

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

    OUTBOUND_DBLINK_PROTOCOLS (oracle.com)

    ALL_DB_LINKS (oracle.com)

    三、实现方法

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

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

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

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

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

    1. --查看指定用户是否具有dblink权限
    2. 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(超级管理员)账号下给指定的账号授权

    1. --如果没有dblink权限则使用dba账号进行授权即可
    2. --表示给账号授予创建公有dblink权限
    3. grant create public database link to 需授权dblink的账号名称;
    4. --表示给账号授予创建私有dblink权限
    5. grant create database link to 需授权dblink的账号名称;
    6. --表示给账号授予创建公有dblink权限
    7. grant DROP PUBLIC DATABASE LINK to 需授权dblink的账号名称;

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

      

    3.2、创建dblink

    创建dblink有两种方式:

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

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

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

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

    3.3、查询dblink

    1. --一般账号查询Oracle数据库中的所有dblink相关信息
    2. SELECT * FROM all_db_links;
    3. --使用dba账号查询Oracle数据库中的所有dblink相关信息
    4. SELECT * FROM dba_db_links; -

    3.4、使用创建好的dblink

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

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

     

    3.5、删除指定dblink

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

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

  • 相关阅读:
    TFHE 的全同态模结构(FHE Module Structure)
    行为识别框架Slowfast解读
    Java 并发编程解析 | 关于Java领域中的线程机制,我们应该知道的那些事?
    深度学习中激活函数的演变与应用:一个综述
    金仓数据库WalMiner日志逻辑解码工具 (2. 概述)
    nginx配置获取客户端的真实ip
    Shell快捷键大全
    免费下载 | ContextCapture分块OBJ模型合并与裁剪
    【Linux】系列入门摘抄笔记-6-tar打包压缩和vim编辑器
    Linux中查找某路径下,包含某个字符串的所有文件
  • 原文地址:https://blog.csdn.net/xiaochenXIHUA/article/details/126594384