为什么使用DBLINK

项目中遇到了需要从上游系统获取数据的需求,而不同系统的数据存储在不同数据库中(但都是Oracle数据库)。需要一种方式能够提供跨库的数据获取。DBLINK提供了这种需求的实现方式,通过创建DBLINK,我们能够通过table_name@link_name的方式,像在自己数据库上做数据操作一样访问其他物理库的数据。

DBLINK的使用

我们使用DBLINK前需要先创建好我们需要的DBLINK,然后通过@link_name去使用,下面是个简单的例子;

-- 1. 自己的数据库用户需要有创建DBLINK的权限
grant create database link to my_user_name;
-- 2. 创建DBLINK
create database link link_name connect to user_name identified by user_passwd using
'(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0 )(PORT = 1521))(CONNECT_DATA =(SERVER = server)(SERVICE_NAME = service_name))'
-- a. link_name是我们创建的BDLINK的名字,在使用的时候会用到
-- b. user_name,user_passwd是我们要创建DBLINK的对方数据库的用户名及密码
-- c. using后面跟的是对方数据库的连接串-- 3. 使用DBLINK,使用起来就像在自己库上的操作
-- 如,查询创建DBLINK数据库上的user_info表
select * from user_info@link_name where user_name='kangkang';

DBLINK使用的局限性及优化思路

Oracle的DBLINK虽然创建和使用简单,但在使用过程中也发现了其一些问题及局限性,例如:

  • 不支持lob(BLOB、CLOB) 类型字段的数据查询(有解决方案)
  • 仅能在Oracle数据库间使用(不同数据库也可以,需要其他的工具辅助,配置相对复杂)
  • 数据库之间耦合度加深,LINK所在数据库的一些变化会直接影响在其上面创建DBLINK的数据库(如修改了DBLINK使用的密码,表名的修改都会导致受影响数据库要跟着修改)
  • 直连的方式需要数据库之间网络的顺畅,网络的问题会直接影响数据操作,没有断点续传的支持
  • DBLINK滥用会导致目标数据库压力过大,影响目标数据库本身正常的运行
  • DBLINK的滥用还可能出现当目标数据库宕机的情况,将导致相关DBLINK不可用,乃至导致相关系统出现大面积的功能瘫痪
  • DBLINK连接用户的权限管理不善,存在操作对方数据库非相关数据库对象的风险

针对上述问题,思考了一些建议及优化思路(仅参考)

  • 尽量减少DBLINK的使用(避免滥用)
  • 频繁使用或实时性较高的数据不建议采用DBLINK(需要频繁访问对方数据库,网络开销大,易对对方数据库造成影响)
  • 通过创建己方数据库同名表(不一定完全一致,根据功能需求)来接收对方数据,DBLINK仅作为数据同步使用,己方系统做数据操作仅在同名表上操作(适用实时性要求不高的数据,仅需要对方数据而不对对方数据库进行增删改操作)
  • 约定好数据同步的时间,错开双方系统数据库使用高峰期,尤其是大数据量同步的情况(减少对方数据库网络及服务器压力)
  • 有轮询作业及检查机制,若数据传输失败,能够有补偿机制(解决网络直连不稳定的弊端)
  • DBLINK连接用户约定好,仅授权DBLINK使用者的需要的数据库对象,做好权限控制(权限最小化,控制好外部数据库对目标数据库的影响)

补充——lob类型数据的解决:
可以创建临时表获取对方表数据,再插入数据库

--创建临时表并同步数据
create table user_info_temp as select * from user_info@link_name where  条件;
--插入临时表数据
insert into user_info values select * from user_info_temp;
--记得清理掉临时表
drop table user_info_temp;

DBLINK使用的思考相关推荐

  1. MySQL:由USE DB堵塞故障引发的思考

    遇到故障,我们往往想的是如何解决这个故障,而不是从故障的根本去思考出现这个故障的原因?这样的结果,只能使我们得到了鱼,失去了渔.今天,我们就来分享一个由USE DB堵塞故障引发的思考案例. 故障描述 ...

  2. Oracle 实用技巧之不知道密码情况下 dblink 的迁移

    巩飞(网名Morinson) "大家好,我是巩飞,网名 Morinson,现在是服务于云和恩墨西北区的一名工程师,有14年在IT公司的技术类工作经验,特别是在 ORACLE 数据库管理领域方 ...

  3. 关于python导入模块和package的一些深度思考

    背景 在python中有导入模块和导入package一说,这篇文章主要介绍导入模块和package的一些思考. 首先什么是模块?什么是package? 模块:用来从逻辑上组织python代码(变量,函 ...

  4. 站在巨人的肩膀上“思考”问题,重在思考而不是拿来主义

    米老师按:觉得值得讨论的小文!我还要认真地想一想 主题:围绕职责链设计模式-计算收费有效时间博客展开讨论 参与人: 讨论时间: 讨论内容 这次讨论主要分为以下几点: 一.职责链模式应用于机房收费系统计 ...

  5. 由Node.js事件驱动模型引发的思考

    引言 近段时间听说了Node.js,很多文章表述这个事件驱动模型多么多么优秀,应用在服务器开发中有很大的优势,本身对此十分感性去,决定深入了解一下,由此也引发了一些对程序设计的思考,记录下来. 什么是 ...

  6. 看了极光推送技术原理的几点思考

    看了极光推送技术原理的几点思考 分类: android2012-11-26 20:50 16586人阅读 评论(18) 收藏 举报 目录(?)[+] 移动互联网应用现状 因为手机平台本身.电量.网络流 ...

  7. oracle创建DBLink连接

    1.创建dblink的第一种方式,是在本地数据库tnsnames.ora文件中配置了要远程访问的数据库.tnsnames.ora文件在你安装oracle客户端安装文件里 如:(E:\oracle\pr ...

  8. dblink oracle mysql,Oracle dblink的使用

    将多个不同地点的服务器的oracle数据库逻辑上看成一个数据库,也就是说在一个数据库中可以操作另一个远程的数据库中的对象. Oracle DBLINK 作用:将多个不同地点的服务器的oracle数据库 ...

  9. C++ 从双重检查锁定问题 到 内存屏障的一些思考

    文章目录 1. 问题描述 2. DCLP 的问题 和 指令执行顺序 2.1 Volatile 关键字 2.2 C++11 的内存模型 3. C++11内存模型 解决DCLP问题 3.1 内存屏障和获得 ...

最新文章

  1. 【Qt】Qt5在ubuntu16.04无法输入中文解决方式
  2. 即学即用的数据分析技巧
  3. NLP分词数据准备及模型训练实例
  4. 计算1到N的十进制数中1的出现次数
  5. 计算机软件需求规格说明规范_太阳能(光伏)组件安全规范测试简介_丙观科技
  6. spring boot 邮件端口_springboot集成qq邮件发送功能
  7. C语言中怎么自动生成时间,在C语言中转换时间的基本方法介绍
  8. linux执行jmeter脚本解决响应数据为空
  9. 有效修改Tomcat6默认端口(ubuntu server,centos)
  10. 4k视频写入速度要求_看4K视频到底需要多快的网速?
  11. ios 微信内置浏览器 缓存清理
  12. 【开源代码】-基于国民N32G45x系列MCU使用JLINK的RTT Viewer/logger/Client组件工具
  13. 家用智能投影仪首选,走进极米H3S投影
  14. 【NAS备份】摆脱丢数据的噩梦,群晖备份硬核实战教程分享
  15. 手把手教你一小时设计基于matlab的信号发生器GUI界面(1)
  16. 使用自签证书利用浏览器进行HTTPS接口的安全访问
  17. Agarose bound-GSL II,BSL II;琼脂糖结合的灰树单叶凝集素II
  18. 2016中国大数据技术大会六折抢票最后一周(附部分讲师名单)
  19. I'm up to my ears
  20. 一个程序员的多年珍藏(1月23日最新更新)

热门文章

  1. Compator/Comparable的比较
  2. C++多态如何理解?实现多态性呢?多态性的作用呢?
  3. mysql时间戳是什么意思_mysql中TIMESTAMP时间戳详解
  4. 8、智慧交通项目(1)
  5. SpringBoot从入门到精通-佟刚-专题视频课程
  6. python爬虫小说设计过程_Python制作爬虫采集小说
  7. E: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 1446 (unattended-upgr)报错信解决
  8. 如何在自己的网站输入关键字跳到百度搜索,并显示搜索内容呢?
  9. android系统文件误删,误删手机系统文件怎么恢复
  10. 基于mini2440嵌入式linux上整合一套Domoticz智能家居系统(九)使用domoticz+mosquitto+Android客户端实现控制mini2440上的LED(二)