
<不吉なメール>
勤め先の環境は、以前に書いた通り(夜間バッチ処理エラーで緊急出動!)でして、夜間処理で何かがあれば、メールが飛んでくる仕組みです。
そして、今日も飛んできました。
...見なかったことに出来ないかなぁ。
勤め先は3月決算で、今日は年に一度の処理が実行される日だったりします。なので、もしかすると何かあるかなぁとは思っていたのですが、案の定出てしまいました。
悪い予感ほど、よく当たりますよね。
<調査開始!>
見なかったことにするのは責任感が許さない(社内に対応できるエンジニアが私しかいないので、どうせやらないといけないし)ので、諦めて出勤して原因調査を開始します。
すると、ある処理で10分以内には終わるはずの処理(SQL)が、3時間経過しても終了していません。
その結果、この処理の終了を前提とした別の処理が異常終了してしまい、障害連絡メールが飛んできたようです。
さて、どうしたものでしょうかね。
<原因究明>
とりあえず遅延が発生しているSQLの実行計画がどうなっているのか調べてみます。
調べ方は、いろいろあるとは思うのですが、今回は、プログラムからSQLを引っこ抜いて、Oracle SQL Developerで調べることにしました。
こんな感じですね。

いろいろツールを使っているのですが、実行計画の確認ではこいつが一番のお気に入りです。
実行計画を確認したところ、PrimaryKeyでアクセスして欲しいところが、別のインデックスでアクセスされています。どうやら、これが原因のようです。
<対応開始>
とりあえず、終わる気配のないSQLを終了させます。
終了方法は、OBject Browserで実行中のセッションを切断する方法にします。
ジョブの殺し方もいろいろ考えられるでしょうが、結局は、Oracleで実行されているSQLを異常終了させるのが、最も手っ取り早いからです。
んで、問題のSQLにヒント句を追加して、実行計画を固定して、リランを実行。
後は、待つだけです。
実際には、関連するシステムが動作しないようにするとか、ユーザーからの問い合わせに対応するとか、いろいろありますけどね。
<復旧完了>
そんなこんなで、無事に復旧完了です。サービス開始時間から1時間程度足が出ましたが、まぁ、悪くない結果だと思います。
どっかでコーヒーでも飲んで、ゆっくりしてから帰りますかね。
<後書き>
Oracleに関連するソフトやツールって、Enterprise Manager、SQL Developer、Object Browserなど様々なものがあるのですが、正直、まともに使いこなせていません。
この記事だけでも、SQL Developerで実行計画の確認、セッションを殺すのにObject Browserと使い分けています。
この手の操作、全部ひとつのツールで出来るんでしょうけど、今一つ使い方が分っていません。使いこなすことが出来れば、もっと面白いことが出来ると思っているんですけど、憶えなくても仕事は出来てしまうとなると、なかなか手を出す気にならないんですよね。
もったいない話です。
スポンサードリンク


