2011-07-14 93 views
3

最近,我不得不增加數據提取腳本的體積,並且發現輸出缺少源表中存在的一些數據。任何人都可以提出一些可能導致此問題的想法嗎?當假脫機到文件時Oracle查詢輸出不完整

背景

的提取過程是一個SQL腳本,這是我從一個客戶端的sqlplus執行和後臺打印查詢結果輸出文件(在Windows Server 2008上運行)。

提取的數據包括客戶記錄及其交易記錄。每個客戶每個月可能有幾百個交易記錄。在增加負載之前,我們在過去3個月的交易中提取了大約10萬個客戶。現在已經增加到100萬。我預計輸出文件大約爲30GB。

交易表被分區爲每月分區。提取腳本包含對每個分區進行後臺處理的單獨查詢。看起來,3個月的交易中的第一個交易是輸出的,並且交易的第二個和第三個月缺失(儘管過程日誌顯示它仍然花費時間查詢所有分區)。

該SQL腳本是一個Perl腳本中調用一些有趣的進展

。最初的sql腳本一次性調用。我決定拆分sql並依次調用每個查詢,並且輸出的大小似乎增加了三倍(大約30GB)。爲什麼會發生這種情況? (這可能有助於與下面的實際問題。)

目前的問題

沒有與5個多的客戶和2種類型的交易表中,每個劃分爲日常分區的第二個數據庫。因此,要提取3個月的事務,腳本將在2個獨立表上的90個分區上進行查詢。同樣,第一個月的數據似乎已經成功輸出,但第二個月和第三個月不見了。上述解決方案不適用於此數據庫。

其他不尋常的事情是2個事務表輸出的2個文件的大小几乎都是4GB(4,294,967,362字節)。是否Oracle或其他東西會限制提取大小?

回答

2

什麼版本的Windows和什麼是磁盤上的文件系統?從內存中,FAT32文件系統具有文件大小限制。認爲你需要超過2G的NTFS(或者也許就是4G)。我懷疑你正在達到這個極限,無論是在windows或sqlplus本身。

您可以嘗試通過嘗試

sqlplus > file.txt 

,而不是使用spool命令縮小下來。如果這樣做,它看起來像一個sqlplus問題。如果它不那麼更可能是文件系統問題。

+0

我正在使用Windows Server 2008,它將使用NTFS。我不認爲這是一個文件大小限制,因爲對於第一個數據庫,我可以獲得30Gb的提取。 – stevenl

+0

我會嘗試一下sqlplus管道,看看我得到了什麼。謝謝。 – stevenl

+0

那麼,我輸出到一個文件,它變成了好的。所以我想這看起來像一個sqlplus問題。 – stevenl