2011-07-14 8 views
3

最近、データ抽出スクリプトの量を増やさなければならず、ソーステーブルに存在するデータの一部が失われています。誰もがこの問題を引き起こしている可能性のあるアイデアを提案できますか?ファイルにスプールしたときにOracleクエリーの出力が不完全です

背景

抽出手順は、私は(Windows Server 2008で実行されている)SQLPLUSクライアントから実行すると、出力ファイルにクエリ結果をスプールSQLスクリプトです。

抽出されるデータには、顧客レコードとトランザクションレコードが含まれます。各顧客は毎月数百の取引記録を持つことができます。負荷が増加する前は、過去3ヶ月のトランザクションで約100,000人の顧客を抽出していました。これは現在100万人に増加しました。私は、出力ファイルが約30GBになると思います。

トランザクションテーブルは月単位のパーティションに分割されています。抽出スクリプトには、各パーティションをスプールする別のクエリが含まれています。 3ヶ月のトランザクションのうち最初のトランザクションが出力され、トランザクションの2番目と3ヶ月が失われているように見えました(プロセスログには、すべてのパーティションを照会する時間がまだかかっていました)。

このSQLスクリプトをperlスクリプト内で呼び出されているいくつかの興味深い進展

。もともとSQLスクリプトは一度に呼び出されました。私はsqlを分割し、各クエリを順番に呼び出すことにしました。出力は3倍になりました(約30GBまで)。なぜこれが起こったのでしょうか? (これは、下記の本当の問題に役立つことがあります。)

現在の問題

5倍より多くの顧客との取引テーブルの2種類、毎日のパーティションに分割それぞれ有する第二のデータベースがあります。したがって、3か月間のトランザクションを抽出するために、スクリプトは2つの別々のテーブルで90個のパーティションをクエリします。再び、データの第1月は正常に出力されたように見えますが、第2および第3月は欠落しています。上記の解決策はこのデータベースでは機能しませんでした。

珍しいことは、2つのトランザクションテーブルから出力される2つのファイルが、サイズがほぼ正確に4GB(4,294,967,362バイト)であることです。 Oracleや他の何かが抽出サイズを制限している可能性がありますか?

答えて

2

Windowsのどのバージョンとディスク上のファイルシステムは何ですか?メモリからFAT32ファイルシステムにはファイルサイズの制限があります。 2G以上のNTFSが必要だと思っていますか?私はあなたがWindowsまたはsqlplus自体のいずれかでその制限を打つと思われます。

あなたはspoolコマンドを使用するのではなく

sqlplus > file.txt 

を試みることによって、それを絞り込む試みることができます。それが動作すれば、sqlplusの問題のように見えます。それがファイルシステムの問題ではない場合

+0

私はNTFSを使用するWindows Server 2008を使用しています。私はそれがファイルサイズの制限だとは思わなかった。なぜなら、最初のデータベースでは30Gbの抽出を得ることができたからだ。 – stevenl

+0

私はsqlplus配管を試し、私が得たものを見ていきます。ありがとう。 – stevenl

+0

まあ、私は出力をファイルにパイプして、それはOKと判明しました。だから私はそれがsqlplusの問題のように思えます。 – stevenl

関連する問題