fc2ブログ

(元)社内SEの徒然なる日記

OracleのSELECT文でORA-08103発生!(結局PG書き換えた・・・)

■ ORA-08103

とある処理で、数ヶ月に一度くらいの頻度でORA-08103(現在、指定したオブジェクトは存在しません)が発生します。

Oracleの仕様上では、発生するとしたらDDL文の発行が絡んでいるらしいです。つまり、SELECT文を発行した時に、同じタイミングで対象テーブルに何かをした(TRUNCATE TABLEやALTER TABLE、ALTER INDEX)ってことらしいのです。

ですが、間違いなく、そんなことはしていません。夜間にスケジュール実行する処理なので、他の処理と被ることは決してありません。

サポートには、あり得ないと回答したのですが信じてくれず、トレースとか仕込んで再現待ち、そして再現した時に採取した資料を提出した結果、やっぱり何もしていないと判明。

・・・何だか、少し前にも同じような話があった気がします。

■ Oracleのバグ?

どうも、Oracle12cのバグっぽくて、修正パッチはあるようなのです。ただ、それで本当に直るのかはやってみないと分からないと言う話です。

そもそも、Oracleのパッチってバグが直った影響で、さらにバグが発生するみたいなこともあり得るので、いま一つ信用できないし、パッチを当てる前にシステムバックアップを取ったりもしないと行けないので、いま一つ気が乗りません。

ってことで、結局プログラムを書き換えて対応することにしました。何だかね。

■ 後書き

問題のプログラムなのですが、DWH更新用のデータをCSV出力するプログラムです。

大きな流れは、基幹DBからデータを抽出、CSV出力。CSVファイルを読み込んで、DWHに登録&更新するっていう仕組みです。

間にCSVファイルを経由する関係上、問題のエラーが発生するSELECT文は、結構妙なことをやっています。

SELECT
KIKAN.AAA,
NVL(KIKAN.BBB,' '),
NVL(KIKAN.CCC,' '),
KIKAN.DDD,
KIKAN.EEE,
NVL(KIKAN.FFF ,' '),
KIKAN.GGG,
REPLACE(NVL(KIKAN.HHH,' '),',','.'),
REPLACE(NVL(KIKAN.HHH,' '),',','.'),






つまり、
①Null → 半角スペースに置換
② , → . に置換
です。

何せ、プログラム言語がCOBOLなので、csvファイルの扱いが難しくて色々と小細工が必要だったのです。

さらに、数千万件のデータが蓄積されたテーブルへフルテーブルスキャンを掛ける仕組みなので、十数分も時間が掛かります(テラ級のメモリにSSDの組合せでも、これだけ掛かる)。

Oracle12gになってから、ちょっと妙な作りをしていると、エラーが発生することがあるので困ってしまいます。

投稿記事の一覧:http://harikofu.web.fc2.com/

--- blog end ---

スポンサードリンク

PageTop

コメント


管理者にだけ表示を許可する