PR

今回は,バッチ処理で遭遇しがちなトラブルへの対処法を解説する。バッチ処理ではデータを並べ替える「ソート処理」を伴うことが多いため,ソート領域を十分に確保することがトラブルを回避するためのポイントとなる。また,バッチ処理の前にオンライン処理を行っているような運用形態では,ロールバック・セグメント上に中途半端なトランザクションが残っていないか,などにも注意を払う必要がある。

 Oracleを利用する上で陥りやすいトラブルの解決策を解説するセミナーの第4回である。今回は,「バッチ処理* が途中でエラーになるトラブル」,「Oracleに接続できなくなるトラブル」の2つを取り上げる。大量のデータを扱うことが多いバッチ処理では,データを並べ替える「ソート処理」を伴うのが一般的だ。この時,ソート対象のデータを格納するための領域が足りないと,パフォーマンスが出ないばかりか,途中で処理が止まるなどのトラブルを引き起こす可能性もある。

 ソート領域の大きさを調整する際は,専用サーバー接続とマルチスレッド・サーバー接続でチューニング・ポイントが異なるため注意が必要だ。また,オンライン処理に引き続いてバッチ処理を実施しているような運用形態では,仕掛かり中のオンライン・トランザクションがロールバック・セグメントを占有し,バッチ処理の実行を妨げることもある。そのようなケースに備え,オンライン処理とバッチ処理でロールバック・セグメントを使い分けるなど,運用上の工夫も必要になる。

トラブル5
バッチ処理が途中でエラーになった

図1●ソート処理を必要とするOracleの操作例

 バッチ処理では,大量のデータを並べ替える「ソート処理」が発生するケースが多い。ソート処理は,プログラムのSELECT文にORDER BY句などで明示的に指定するほか,CREATE INDEX文を発行した場合やジョイン処理(ソート・マージ・ジョインなど)の過程などでOracleが暗黙的に行っている場合もある(図1[拡大表示])。Oracleは,このようなソート処理をメモリー上の領域やディスク上の一時表領域を使って実行している。

 大量データのソート処理を試みた場合,これらのソート処理用の領域が不足すると,バッチ処理のパフォーマンスが急激に悪化したり,「ORA-01653 'temp'を拡張できません」というような一時表領域の拡張エラーが発生したりする。このような問題が発生した場合は,ソート領域(SORT_AREA_SIZE)の大きさと関連パラメータ,一時表領域の大きさなどを見直す必要がある。

(内藤 尚=システムコンサルタント オープンシステム統括部 マネージャー)