Oracle用DBlink导blob大字段(ORA-22992)

ORA-22992:无法使用从远处表选择LOB定位器
错误说明: [Error] Execution (1: 1): ORA-22992: 无法使用从远程表选择的 LOB 定位器
原因分析: 用dblink从远程数据库向本地数据库 insert数据时, 远程表中含有BLOB字段, 在select 和 insert into操作时, 报错:
"ORA-22992: 无法使用从远程表选择的 LOB 定位器"错误,通过创建临时表并从临时成功把数据插入到目的表中。

解决办法:
1、 创建一张临时表。

create global temporary table base_uploadfileblob_temp1108 as select * from base_uploadfileblob where 1=2;

2、 然后利用database link把远程数据先insert到临时表中,insert后先不要commit,否则commit后临时表中数据就会丢失。
注意 : 2.1 需要保证临时表空间足够大, 在操作时修改临时表空间会丢失全部blob 数据;
2.2 在操作期间不要commit, 否则临时表空间会被释放, 从而无法插入数据。

insert into base_uploadfileblob_temp1108 select a.* from base_uploadfileblob@MDM6DBLINK a
/*数据量特别大的话, 可以先加条件, 试试部分数据*/
where a.PATH_='/_MDMFILE/import/import_excel/lichao_201603211458525282287.xlsx';
--where a.PATH_ LIKE '%.ftl';

3、 将临时表中的数据insert到目标库表

insert into base_uploadfileblob t (select * from base_uploadfileblob_temp1108);
--如果字段不匹配的话,手动去对应字段
insert into base_uploadfileblob t (t.PATH_,t.CONTENT_) (select * from base_uploadfileblob_temp1108);

4、 操作完毕,将临时表drop;

​​​​​​​drop table base_uploadfileblob_temp1108;

说明 : 此方法是将blob大字段, 存在临时表空间里面, 然后用 临时表空间 表空间 里面插入数据,
注意 : 1. 需要保证临时表空间足够大, 在操作时修改临时表空间会丢失全部blob 数据;
2. 在操作期间不要commit, 否则临时表空间会被释放, 从而无法插入数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

司家成

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值