后台打印到文件时,Oracle查询输出不完整

后台打印到文件时,Oracle查询输出不完整,oracle,spool,Oracle,Spool,最近我不得不增加数据提取脚本的容量,我发现输出缺少源表中存在的一些数据。有没有人能提出一些想法来解释是什么导致了这个问题 背景 提取过程是一个sql脚本,我从sqlplus客户端(在Windows Server 2008中运行)执行该脚本,并将查询结果假脱机输出文件 提取的数据包括客户记录及其交易记录。每个客户每月可能有数百个交易记录。在负载增加之前,我们在过去3个月的交易中提取了约10万客户。这一数字现已增至100万。我预计输出文件大约为30GB 事务表被划分为每月一次的分区。提取脚本包括一个

最近我不得不增加数据提取脚本的容量,我发现输出缺少源表中存在的一些数据。有没有人能提出一些想法来解释是什么导致了这个问题

背景

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

提取的数据包括客户记录及其交易记录。每个客户每月可能有数百个交易记录。在负载增加之前,我们在过去3个月的交易中提取了约10万客户。这一数字现已增至100万。我预计输出文件大约为30GB

事务表被划分为每月一次的分区。提取脚本包括一个单独的查询假脱机处理每个分区。看起来3个月的第一个事务被输出了,第二个月和第三个月的事务丢失了(尽管流程日志显示它仍然花时间查询所有分区)

一些有趣的进展

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

当前问题

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


另一个不寻常的是,从两个事务表输出的两个文件的大小几乎都是4GB(4294967362字节)。可能是Oracle或其他什么东西限制了提取大小吗?

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

你可以试着缩小范围

sqlplus > file.txt

与使用
spool
命令相反。如果这样做有效的话,它看起来像是一个sqlplus问题。如果没有,则更有可能是文件系统问题。

我使用的是Windows Server 2008,它将使用NTFS。我不认为这是一个文件大小限制,因为对于第一个数据库,我可以得到30Gb的提取。我将尝试sqlplus管道,看看我得到了什么。谢谢。嗯,我通过管道将输出传输到一个文件中,结果是正常的。所以我想这看起来像是一个sqlplus问题。