Database JUNKY

MySQL,MariaDBを中心としたブログです

リターンコードを取得してDB2コマンドを制御する方法

DB2ってコマンドの戻り値をshellで取得できるって知ってました?

データベースの日々の運用の中で、たとえば、バックアップがあったり、データベースの計画再起動があったり、もしくは計画停止があったり 色々とそういうケースがあると思います。たとえば、linuxで運用を行った場合、cronにそれらのコマンドを仕掛けたり、Windowsでは タスクスケジューラでそれらを自動実行したりするケースがあるかと思います。

そんな時、

  • もしバックアップが正常に動かなかったら?
  • もし、db2が正常に再起動しなかったら?
  • もし、db2が正常に停止できなかったら?

とか考えると心配になったりませんか?たとえば、バックアップが正常に行われているか、バックアップファイルの存在をshellなりで確認し、正常、異常と判断しますか? 意外と皆様知らないのが、DB2のリターンコードでshellで取得できるってこと。

Unix の場合、シェル上でDB2 コマンドを実行すると以下のような戻り値が返されます。 0 :DB2 コマンドまたは SQL ステートメントが正常に実行されました。 1 :SELECT または FETCH ステートメントが行を戻しませんでした。 2 :DB2 コマンドまたは SQL ステートメントからの警告です。 4 :DB2 コマンドまたは SQL ステートメント・エラーです。 8 :コマンド行プロセッサーのシステム・エラーです。

前回、こちらで掲載しました、db2stopをコマンドを例にとって、c-shell(csh)で、

  1. db2stop
  2. 上記1でうまくいかなかった場合、db2stop forceで
  3. 上記2でもうまくいかなかった場合、db2stop -killで

なんて方法を、リターンコードとコマンドを組み合わせて作成したshell(csh)がこんな感じになります。(まあ、通常こんなことはしないと思いますけど)

[shell]

!/bin/csh

source /home/db2admin/sqllib/db2cshrc

db2stop

db2stop set ERRORLEVEL="$?" if ($ERRORLEVEL != "0") then echo "通常の停止ができませんでした。force オプションでリトライします" db2stop force set ERRORLEVEL="$?" if ($ERRORLEVEL != "0") then echo "forceも失敗、killコマンドで" db2stop -kill set ERRORLEVEL="$?" if ($ERRORLEVEL != "0") then exit(-1) else echo "db2stop kill正常終了" exit 0 endif else echo "db2stop force 正常終了" exit 0 endif else echo "db2stop 正常終了" exit 0 endif

[/shell]