3

最近、データ抽出スクリプトの量を増やす必要がありましたが、出力にソーステーブルに存在する一部のデータが欠落していることがわかりました。誰かがこの問題を引き起こしている可能性があるものについていくつかのアイデアを提案できますか?

バックグラウンド

抽出手順は、sqlplusクライアント(Windows Server 2008で実行)から実行するSQLスクリプトであり、クエリ結果を出力ファイルにスプールします。

抽出されるデータには、顧客レコードとそのトランザクションレコードが含まれます。各顧客は、毎月数百のトランザクションレコードを持っている可能性があります。負荷が増加する前は、過去3か月のトランザクションで約10万人の顧客を抽出していました。これは現在100万に増加しています。出力ファイルは約30GBになると思います。

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

いくつかの興味深い進歩

このSQLスクリプトは、Perlスクリプト内で呼び出されます。元々、SQLスクリプトは一度に呼び出されました。SQLを分割し、各クエリを順番に呼び出すことにしました。出力のサイズは3倍(約30GB)になっているようです。なぜこれが起こったのでしょうか?(これは、以下の実際の問題に役立つ可能性があります。)

現在の問題

5倍以上の顧客と2種類のトランザクションテーブルを備えた2番目のデータベースがあり、それぞれが毎日のパーティションに分割されています。したがって、3か月のトランザクションを抽出するために、スクリプトは2つの別々のテーブルの90個のパーティションに対してクエリを実行します。繰り返しになりますが、データの1か月目は正常に出力されたようですが、2か月目と3か月目は欠落しています。上記のソリューションは、このデータベースでは機能しませんでした。

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

4

1 に答える 1

2

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

あなたはそれを試すことによってそれを絞り込むことを試みることができます

sqlplus > file.txt

spoolコマンドを使用するのとは対照的に。それが機能する場合は、sqlplusの問題のように見えます。そうでない場合は、ファイルシステムの問題である可能性が高くなります。

于 2011-07-14T09:20:29.087 に答える