
■ 夜間処理の異常終了
何回か書いていますが(夜間バッチ処理エラーで緊急出動!、SQL遅延で夜間処理が異常終了!、データが消え、夜間処理が異常終了し、ネットワークが停止した)、またしても夜間バッチが異常終了しました。
とりあえず対応が終わったので、経緯を書いてみます。
...眠い(--;)
■ 障害発生個所
今回障害が発生したのは、DWHの更新プログラムです。
夜間処理で当日分の確定データをCSVファイルに出力してDWHサーバに転送。DWHサーバは転送されたCSVファイルを使用してデータベース(DWH)を更新しています。
DWHといっても最近流行のビックデータが云々なんて本格的なものではなく、Oracleで作ったテーブルにデータを突っ込み続けるだけっていう代物で、DWH側の更新プログラムもかなり単純なものだったりします。
■ エラー内容
さて、ログを見るとOracleへの登録時にORA-01722というエラーが発生しているようです。さっそくOracleのマニュアルからエラー内容を調べてみると、「文字列から数値への変換に失敗、数値項目に文字を突っ込むんじゃねぇよ」という趣旨のことが書いています。
あー、これはアレかな?カンマを含むデータでも紛れ込んだかな?
それを踏まえてエラーとなったデータを見ると、確かにカンマを含む文字項目があります。どうやら、こいつのせいで項目位置が一つずれてしまったことが原因のようです。
■ 対応
結局、カンマをピリオドに変換して再処理をすることにしました。
① CSVファイルのカンマをピリオドに変換
② エラー発生個所から処理が実行されるようにジョブを修正
③ 処理を再実行、正常終了まで確認
④ ②のジョブを元に戻す
⑤ CSV作成プログラムに文字項目のカンマをピリオドに変換するロジックを追加
⑥ ⑤を本番環境にリリース登録
こんなところかな?
■ CSVファイル
CSVファイルというのは項目をカンマで区切ったテキストデータな訳ですが、それ以外には明確なルールが存在しないので安易に使うと色々と問題を起こしてくれます。
今回は文字項目にカンマを含んでいたのですが、数値項目にカンマが含まれていた、Excelで開いて編集された(先頭の0値が消える)、とか色々とエンジニア泣かせですね。
かといって、そういった問題を排除したXML形式が一般ユーザーのレベルまで普及しているとは言い難いので、結局はデータのやり取りは「CSVファイルで~」となるわけでして。
■ 後書き
今回はカンマをピリオドに変換するという逃げを打った訳ですが、個人的には気に入りません。DWHは、データの蓄積をするものなのですから、システム側の都合で勝手に改ざんする(カンマ→ピリオド)のは良くないと思うのです。
そもそも、基幹システムでテキストデータを吐いて、それをDWHで更新するという処理手法がどうなんだろうか?
基幹システムのデータベースとDWHのデータベースの両方に接続できる設定をした端末を用意して、その端末上で基幹システムからデータを抽出して、それをDWHに更新するプログラムを作ってやれば上手く行けると思うのですが・・・
まぁ、いつか暇が出来たら試してみようかな。
投稿記事の一覧:http://harikofu.web.fc2.com/
--- blog end ---
スポンサードリンク


