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, 否则临时表空间会被释放, 从而无法插入数据。