在数据库同步中我们经常会用到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字段表的问题解决的更多相关文章

  1. sql 同步远程数据库(表)到本地

    一)在同一个数据库服务器上面进行数据表间的数据导入导出: 1. 如果表tb1和tb2的结构是完全一样的,则使用以下的命令就可以将表tb1中的数据导入到表tb2中: insert into db2.tb ...

  2. 数据库中的blob是什么类型?

    数据库中的blob是什么类型? BLOB (binary large object)----二进制大对象,是一个可以存储二进制文件的容器. 在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类 ...

  3. C#实现MySQL数据库中的blob数据存储

    在MySQL数据库中,有一种blob数据类型,用来存储文件.C#编程语言操作MySQL数据库需要使用MySQL官方组件MySQL.Data.dll. Mysql.Data.dll(6.9.6)组件下载 ...

  4. 本地mongodb数据库导出到远程数据库中

    把本地Mongodb中的数据导入(批量插入)到服务器的数据库中 1.导出数据: mongoexport -d admin -c users -o outdatafile.dat 选项解释: -d 指明 ...

  5. 在ASP dot Net Core MVC中用Controllers调用你的Asp dotnet Core Web API 实现CRUD到远程数据库中,构建你的分布式应用(附Git地址)

    本文所有的东西都是在dot Net Core 1.1环境+VS2017保证测试通过. 本文接着上次文章接着写的,不了解上篇文章的可能看着有点吃力.我尽量让大家都能看懂.这是上篇文章的连接http:// ...

  6. dblink连接操作远程数据库

    在一个数据库中需要操作远程数据库时,需要创建远程数据库的连接. 连接代码如下: create public database link 连接名 connect to 远程数据库用户名 identifi ...

  7. python将数据库修改,数据库操作同步到数据库中

    *****************数据库迁移(同步)命令******************************** 1.python manage.py makemigrations 将数据库的 ...

  8. Oracle数据库中的blob类型解析

    Oracle的Blob字段比较特殊,他比long字段的性能要好很多,可以用来保存例如图片之类的二进制数据. 写入Blob字段和写入其它类型字段的方式非常不同,因为Blob自身有一个cursor,你必须 ...

  9. Oracle物化视图,物化视图日志,增量刷新同步远程数据库

    1.创建DBLINK -- Drop existing database link drop public database link LQPVPUB; -- Create database link ...

随机推荐

  1. Centos7:JDK1.8环境配置

    1.将压缩包解压缩 tar -zxvf jdk-8u181-linux-x64.tar.gz; 2.配置环境变量 环境变量地址:/etc/profile #set java environment J ...

  2. 90. Subsets II (Java)

    Given a collection of integers that might contain duplicates, nums, return all possible subsets (the ...

  3. linux主机之间的SSH链接

    一.什么是SSH连接 SSH为Secyre Shell的缩写,SSH 为建立在应用层基础上的安全协议.SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议.且SSH连接可以通过多种平台 ...

  4. redis弱密码漏洞利用

    背景: redis无认证,或者弱密码,可以成功连接到redis服务器 反弹shell拿到的权限取决于redis的启动账号 操作: 1. Centos7安装redis客户端 #yum install r ...

  5. fiddler获取响应时间以及服务器IP

    抓包工具fiddler实现http协议请求应答抓包.在接口测试.性能测试.安全测试等软件测试活动过程中,可能会遇到需要获取接口响应时间.接口服务器IP这样的情况.默认情况下fiddler不支持接口响应 ...

  6. AT&T 和 Intel

  7. 宝塔linux面板命令大全 - 宝塔面板

    安装宝塔 Centos安装脚本 yum install -y wget && wget -O install.sh http://download.bt.cn/install/inst ...

  8. 磁盘IO及性能指标

    一.磁盘 I/O 的概念 I/O 的概念,从字义来理解就是输入输出.操作系统从上层到底层,各个层次之间均存在 I/O.比如,CPU 有 I/O,内存有 I/O, VMM 有 I/O, 底层磁盘上也有 ...

  9. python3 百度AI-v3之 人脸对比 & 人脸检测 & 在线活体检测 接口

    #!/usr/bin/python3 # 百度人脸对比 & 人脸检测api-v3 import sys, tkinter.messagebox, ast import ssl, json,re ...

  10. 高大上的微信小程序中渲染html内容—技术分享

    大部分Web应用的富文本内容都是以HTML字符串的形式存储的,通过HTML文档去展示HTML内容自然没有问题.但是,在微信小程序(下文简称为「小程序」)中,应当如何渲染这部分内容呢? 解决方案 wxP ...