最近我不得不增加数据提取脚本的数量,并且我发现输出缺少源表中存在的一些数据。任何人都可以就可能导致此问题的原因提出一些建议吗?
背景
提取过程是一个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或其他东西限制了提取大小?
答案 0 :(得分:2)
什么版本的Windows以及磁盘上的文件系统是什么?从内存中,FAT32文件系统具有文件大小限制。认为您需要超过2G的NTFS(或者可能是4G)。我怀疑你是在Windows或sqlplus本身达到这个限制。
您可以尝试通过尝试
来缩小范围sqlplus > file.txt
而不是使用spool
命令。如果它工作,它看起来像一个sqlplus问题。如果它没有那么更可能是文件系统问题。