使用DBLink方式同步远程数据库中含Blob、Clob字段表的问题解决
在数据库同步中我们经常会用到DBLink方式。DBLink可以将物理上存放于网络的多个数据库在逻辑上当成一个单一的大数据库。开发人员无需关心数据库的网络分布,就能很方便的实现从不同数据库之间读取数据。如何在Oracle数据库间建立DBLink我在之前的文章已有涉及,这里就不花篇幅讲解了。具体请查看Oracle建立DBLink。
本篇文章主要阐述如何解决DBLink方式无法实现Blob、Clob字段数据同步的问题。在网上已经有很多牛人给出了解决方案,在参照他们的方案解决问题的过程中,发现有些小问题并没有解决,而且也没有人给出一个完整的解决过程。这里我把我的解决过程记录下来,供大家参考。
首先,我们看一下DBLink为何不能实现Blob、Clob字段的同步。我在我本机Oracle数据库中建立了DEVD数据库的Database Link。当我们Select没有大字段的DEVD数据库的表的时候,数据能查询出来。当我们查找含有大字段的表时,系统给出如下提示:
select * from JJR_TJJR_CYZGXX@DEVDBLINK
JJR_TJJR_CYZGXX表中还有Blob字段。

因为Oracle不允许LOB属性的数据进行DBLink方式的查询的。解决此类问题有人提出使用临时表的形式进行中转,然后再进行数据的同步。使用这种方法确实能够解决问题,具体解决方案如下:
1.使用子查询来建立临时表,实现本地临时表复制远程数据库表的数据。
Create global temporary table temp on commit preserve rows as select * from JJR_TJJR_CYZGXX@DEVDBLINK
为什么要用On commit preserve rows, 我之前的Oracle用子查询创建临时表的问题总结中已经提到。
通过查询temp表,我们发现所有JJR_TJJR_CYZGXX表中的数据已经同步到temp表中。
2.在本地test表中同步临时表temp的数据,先删除test表中数据,然后用子查询实现数据复制。
Insert into test select * from temp
通过查询本地test表,我们看到即使含有Blob字段的表的数据已经查询过来。
其他解决方案:
通过临时表能够实现含大字段表的数据同步,我们之间使用本地表是否也能达到相同的效果呢?通过实验我们发现直接通过本地表也是能够实现的。
首先建立test1表,结构和JJR_TJJR_CYZGXX表结构一致。通过子查询来实现数据复制
Insert into test1 select * from JJR_TJJR_CYZGXX@DEVDBLINK
通过查询test1表我们发现数据已经复制。
--创建临时表:
create global temporary table lob2
(
line number primary key,
text clob
)
on commit delete rows; --插入数据:
SQL> insert into lob2 select line,text from lob1@lob_link;
499 rows created. SQL> select * from lob2 where rownum<5;
LINE TEXT
---------- ---------------------------------------------------------------------
5
8 type NUMBER is NUMBER_BASE;
9 subtype FLOAT is NUMBER; -- NUMBER(126)
11 subtype "DOUBLE PRECISION" is FLOAT; SQL> commit;
Commit complete. SQL> select * from lob2 where rownum<5;
no rows selected
--提交之后数据就被删除了,这个是临时表的属性。
使用DBLink方式同步远程数据库中含Blob、Clob字段表的问题解决的更多相关文章
- sql 同步远程数据库(表)到本地
一)在同一个数据库服务器上面进行数据表间的数据导入导出: 1. 如果表tb1和tb2的结构是完全一样的,则使用以下的命令就可以将表tb1中的数据导入到表tb2中: insert into db2.tb ...
- 数据库中的blob是什么类型?
数据库中的blob是什么类型? BLOB (binary large object)----二进制大对象,是一个可以存储二进制文件的容器. 在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类 ...
- C#实现MySQL数据库中的blob数据存储
在MySQL数据库中,有一种blob数据类型,用来存储文件.C#编程语言操作MySQL数据库需要使用MySQL官方组件MySQL.Data.dll. Mysql.Data.dll(6.9.6)组件下载 ...
- 本地mongodb数据库导出到远程数据库中
把本地Mongodb中的数据导入(批量插入)到服务器的数据库中 1.导出数据: mongoexport -d admin -c users -o outdatafile.dat 选项解释: -d 指明 ...
- 在ASP dot Net Core MVC中用Controllers调用你的Asp dotnet Core Web API 实现CRUD到远程数据库中,构建你的分布式应用(附Git地址)
本文所有的东西都是在dot Net Core 1.1环境+VS2017保证测试通过. 本文接着上次文章接着写的,不了解上篇文章的可能看着有点吃力.我尽量让大家都能看懂.这是上篇文章的连接http:// ...
- dblink连接操作远程数据库
在一个数据库中需要操作远程数据库时,需要创建远程数据库的连接. 连接代码如下: create public database link 连接名 connect to 远程数据库用户名 identifi ...
- python将数据库修改,数据库操作同步到数据库中
*****************数据库迁移(同步)命令******************************** 1.python manage.py makemigrations 将数据库的 ...
- Oracle数据库中的blob类型解析
Oracle的Blob字段比较特殊,他比long字段的性能要好很多,可以用来保存例如图片之类的二进制数据. 写入Blob字段和写入其它类型字段的方式非常不同,因为Blob自身有一个cursor,你必须 ...
- Oracle物化视图,物化视图日志,增量刷新同步远程数据库
1.创建DBLINK -- Drop existing database link drop public database link LQPVPUB; -- Create database link ...
随机推荐
- Redis分布式之前篇
第一篇:初识Redis 一.Redis是什么? Redis 是一个开源(BSD许可)的,使用ANSI C语言编写的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 它支持多种类型的数据 ...
- reduce方法的封装使用
reduce()方法 语法: arr.reduce( function(previousValue, item, index, arr) { }, initialValue) previousValu ...
- 红色警戒2CE修改教程
在大学的时候特别喜欢玩游戏,尤其偏爱单机游戏.在玩一些单机游戏的时候,特意使用了一些修改工具.本来是打算做成一个系列的,但是现在由于时间问题,仅介绍一些.(大概包括rimworld,饥荒,放逐之城,缺 ...
- NLP采用Bert进行简单文本情感分类
参照当Bert遇上Kerashttps://spaces.ac.cn/archives/6736此示例准确率达到95.5%+ https://github.com/CyberZHG/keras-ber ...
- vmware虚拟机安装centos7.3
vmware准备 CentOS准备,这里下载的是CentOS 7.3CentOS-7-x86_64-Everything-1611.iso 创建新的虚拟机 选择自定义安装 硬件兼容性默认最新的,不用动 ...
- 黑客正在使用美国NSA泄露的工具进行挖矿
早些年我们知道美国国家安全局囤积不少漏洞准备自己使用,结果这些漏洞以及利用工具被方程式组织获得. 随后名为影子经纪人的黑客组织获得这些漏洞和工具后又再次出售,当初的永恒之蓝漏洞就是从这里泄露的. 永恒 ...
- magento获取当前栏目ID号与栏目名称函数
Magento获取当前栏目ID:$_cat= new Mage_Catalog_Block_Navigation();$curent_cat= $_cat->getCurrentCategory ...
- RMQ求最值
1. 概述 RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A ...
- libusb读写
https://blog.csdn.net/u012247418/article/details/83684980 https://github.com/crazybaoli/libusb-test ...
- redis集群搭建及java(jedis)链接
1.创建一个redis-cluster 目录 mkdir -p /usr/local/redis-cluster 创建6台redis服务器(单机下学习) mkdir 7001.mkdir 7002.m ...