原来抽取的方式是b库oci打包数据后将数据放到中间件本地磁盘,然后通过sqlldr方式加载到a库。sql如下:
select column_name1,function_name(column_name2) from table_name;
本sql是在b库执行。其中b库table_name有几千万行数据。
然后将这种方式改为dblink方式,sql中出现的表名和函数名都需要加dblink。a库执行sql如下:
insert into a.table_name
select column_name1,
function_name@dblink(column_name2) from b.table_name@dblink
这样会出现性能问题,每返回一行数据都要去b库去调用一次自定义函数,可以考虑将函数创建到本地。