リターンコードを取得してDB2コマンドを制御する方法
DB2ってコマンドの戻り値をshellで取得できるって知ってました?
データベースの日々の運用の中で、たとえば、バックアップがあったり、データベースの計画再起動があったり、もしくは計画停止があったり 色々とそういうケースがあると思います。たとえば、linuxで運用を行った場合、cronにそれらのコマンドを仕掛けたり、Windowsでは タスクスケジューラでそれらを自動実行したりするケースがあるかと思います。
そんな時、
とか考えると心配になったりませんか?たとえば、バックアップが正常に行われているか、バックアップファイルの存在をshellなりで確認し、正常、異常と判断しますか? 意外と皆様知らないのが、DB2のリターンコードでshellで取得できるってこと。
Unix の場合、シェル上でDB2 コマンドを実行すると以下のような戻り値が返されます。 0 :DB2 コマンドまたは SQL ステートメントが正常に実行されました。 1 :SELECT または FETCH ステートメントが行を戻しませんでした。 2 :DB2 コマンドまたは SQL ステートメントからの警告です。 4 :DB2 コマンドまたは SQL ステートメント・エラーです。 8 :コマンド行プロセッサーのシステム・エラーです。
前回、こちらで掲載しました、db2stopをコマンドを例にとって、c-shell(csh)で、
- db2stop
- 上記1でうまくいかなかった場合、db2stop forceで
- 上記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]