Oracle数据库DB LINK治理建议

2025年2月6日 作者 XiaofeiHuangfu

适用范围
方案概述
一、DB LINK 概述
二、DB LINK已知问题
三、DB LINK治理流程
四、DB LINK替代方案
适用范围
Oracle Database 11.2.0.4 +

方案概述
本方案包括DB LINK基本概念,DB LINK已知问题,DB LINK治理流程,以及DB LINK的替代方案。

一、DB LINK 概述
1、DB LINK主要用于数据库之前的通信

在不同数据库之间发送数据或消息时需要在双方站点上进行网络配置。
– 需要配置以下选项
– 网络连接(例如 TNSNAMES.ora)
数据库链接 DB LINK
DB LINK数据库链接是数据库中的一个方案对象,通过该对象可以访问另一个数据库中的对象。
目标端数据库可以是非Oracle DB 系统。

SQL>CREATE DATABASE LINK <remote_global_name>
CONNECT TO <user> IDENTIFIED BY <pwd>
USING '<connect_string_for_remote_db>';

2、通过DB LINK连接到其他数据库


HQ =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = host01)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

通过别名方式创建DB LINK


SQL>CREATE DATABASE LINK link_hq
CONNECT TO HR IDENTIFIED BY HR USING 'hq’;

通过简易连接创建DB LINK

SQL>CREATE DATABASE LINK link_hq 
CONNECT TO HR IDENTIFIED BY HR USING '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<host name>(PORT=<port number>)(CONNECT_DATA =(SERVICE_NAME = <service name>))';

CONNECT hr/hr@hq
SELECT * from HR.employees@link_hq;

二、DB LINK已知问题

  • DB LINK使用过多,数据流程管理难度增加
  • DB LINK在不同版本之间使用引发SCN问题
    -ORACLE数据库间通过DBLINK互访需要同步SCN;如果两库在同步SCN时,因低SCN库同步成高SCN,ORACLE在计算SCN变化率结果大于原来的,将会导致DBLink访问失败,严重时导致宕机的情况。
    -通过DBLINK同步到其他低SCN又未打补丁的系统上时,才会有可能造成DB link访问拒绝或数据库crash。
  • 性能问题
    -引入远端查询和分布式查询,使得SQL性能大幅度下降,CBO优化难度急剧增加。
  • 可用性问题
    由于DBLINK引入多个数据库,当远端数据库出现异常或网络出现异常,可能导致业务流程无法顺利完成,有可能引入分布式事务和pending的事务,给故障后的恢复引入其他困难。
  • 数据误操作
    测试环境或DG备库激活后,网络如未做隔离,如job中使用DB LINK进行数据交换,会导致生产环境数据错乱。
  • 失效对象
    DB LINK目标主机不存在或已下线,会导致现有源端对象为失效状态
    三、DB LINK治理流程
    image.png
  1. 修订和完善规范
  • DB LINK的使用规范
    -系统架构设计时尽可能减少DB LINK的使用
    -DB LINK建议用于异步数据简单业务逻辑查询和简单数据操作
    -不创建self DB LINK(同一数据库中不同用户之间不建议创建DB LINK)
  • 如无特殊紧急需求,不再新建DB LINK
    -保持当前DB LINK设置不变
    -对DB LINK进行统一管理
  1. 现状梳理
  • 检查所有数据库的DB LINK信息
    -DB LINK名称
    -目标主机
    -连接用户
    -连接端口
    -用户权限
    -数据库版本
    -DB LINK用途
  • DB LINK信息建立台账或添加到资料库
  1. DB LINK与用户权限
  • 用于DB LINK的用户权限坚持一下原则
    -权限最小
    -按需授予
    -使用业务用户,不建议使用具有DBA权限的用户
  • 创建DB LINK时授予为该用户授权,完成创建回收该用户权限。
    创建前:
SQL>grant create database link to username ;

完成创建:


SQL>revoke create database link from username ;
  1. 现有生产环境治理
  • 生产环境已经不使用的DB LINK按流程进行清理
  • 测试环境的DB LINK连向生产环境的进行调整
  • 用户权限过大的进行调整
    四、DB LINK替代方案
  • 通过数据库整合迁移
  • 业务进行调整
  • 合理使用数据同步工具
  • 合理使用数据平台
    -the end-