假脱机到文件时,Oracle查询输出不完整

时间:2011-07-14 08:55:57

标签: oracle spool

最近我不得不增加数据提取脚本的数量,并且我发现输出缺少源表中存在的一些数据。任何人都可以就可能导致此问题的原因提出一些建议吗?

背景

提取过程是一个sql脚本,我从sqlplus客户端(在Windows Server 2008中运行)执行,并将查询结果假脱机到输出文件。

提取的数据包括客户记录及其交易记录。每个客户每个月可能有几百个交易记录。在增加负载之前,我们在过去3个月的交易中提取了大约10万客户。现在已经增加到100万。我希望输出文件大约是30GB。

事务表被划分为每月分区。提取脚本包括一个单独的查询假脱机每个分区。似乎3个月交易中的第一个是输出,并且第2个和第3个月的交易丢失了(尽管进程日志显示它仍然花时间查询所有分区)。

一些有趣的进展

在perl脚本中调用此sql脚本。最初一次调用sql脚本。我决定拆分sql并轮流调用每个查询,输出似乎已经增加了三倍(大约30GB)。为什么会发生这种情况? (这可能有助于解决下面的真正问题。)

当前问题

还有第二个数据库,其中包含5倍以上的客户和2种类型的事务表,每个表都划分为每日分区。因此,为了提取3个月的事务,脚本在2个单独的表上查询90个分区。同样,第一个月的数据似乎已成功输出,但缺少第2个月和第3个月。上述解决方案不适用于此数据库。

其他一些不寻常的事情是,从2个事务表输出的2个文件几乎都是4GB大小(4,294,967,362字节)。可能是Oracle或其他东西限制了提取大小?

1 个答案:

答案 0 :(得分:2)

什么版本的Windows以及磁盘上的文件系统是什么?从内存中,FAT32文件系统具有文件大小限制。认为您需要超过2G的NTFS(或者可能是4G)。我怀疑你是在Windows或sqlplus本身达到这个限制。

您可以尝试通过尝试

来缩小范围
sqlplus > file.txt

而不是使用spool命令。如果它工作,它看起来像一个sqlplus问题。如果它没有那么更可能是文件系统问题。