2012-11-07 66 views
2

当尝试将CLOB从一个数据库复制到另一个时,Oracle(11g)中的性能很差。我尝试了几件事,但一直未能改善这一点。通过Oracle中的DBLINK提高CLOB插入的性能

CLOB用于收集报告数据。记录基础上,这可能会很大。我正在调用远程数据库上的一个过程(通过WAN)来构建数据,然后将结果复制回公司总部的数据库进行比较。一般格式为:

CREATE TABLE my_report(the_db VARCHAR2(30), object_id VARCHAR2(30), 
final_value CLOB, CONSTRAINT my_report_pk PRIMARY KEY (the_db, object_id)); 

为了获得性能,我将远程站点的结果累加到表的远程副本中。在程序运行结束时,我尝试将数据复制回来。此查询非常简单:我看到的性能约为每秒9行,平均CLOB大小为3500字节。 (我正在使用CLOB,因为这个大小经常超过4k,即VARCHAR2限制。)对于70,000条记录(并不少见),这需要大约2个小时来传输。我曾尝试使用create table as select方法,但获得相同的性能。我还花了超过几个小时来调整SQL * NET,但从中看不到任何改进。改变数组大小并不会提高性能(尽管如果数值减少,它可以减少它)

我能够使用旧的exp/imp方法获得副本(从远程导出表,将其导入回),它的运行速度要快得多,但这对我的自动化报告来说是相当手动的,我曾考虑尝试编写一个流水线函数来选择这些数据,使用它将CLOBS拆分为BYTE/VARCHAR2块(带有一个额外的块数列),但并不想这样做,如果有人试了一下,发现了一个问题。

感谢您的帮助。

回答