こんにちは、キャスレーコンサルティング SI(システム・インテグレーション)部 石田です。
私はサーバのインフラ設計構築をしており、主にDBの設計構築がメインとなります。
以前、DB2に触れる機会があり、その時に学んだ知識をブログに記載しようと思います。
はじめに
前回のブログでは「DB2のデータベースバックアップ」を記載しました。
前回同様、運用について記載しますが、今回は運用の改善や自動化といったテーマで記載しようと思います。
紹介する内容は「DB2起動の運用スクリプト」についてです。
目次
1. 概要
2. 処理
3. ソースコード
4. 最後に
1 . 概要
図1に記載の通り、DB2のインスタンスはシステムコントローラであるdb2sysc(プロセス)と紐づいています。
db2syscのプロセスを起動することで他のプロセスやスレッドが起動し、DB2として動作可能な状態になります。
(停止の場合は、起動を停止に読み替えて下さい。)
DB2はスレッドモデルで実行されるため、複数DB環境でも、1つのdb2syscプロセスで実行されます。
複数DBが存在した場合でも、db2sysを起動することで複数DBへの接続が可能となります。
図1 : DB2インスタンス概要図
DB2を起動するコマンドは下記となります。
$ db2start
紹介するスクリプトはメッセージやエラーコード等を考慮してカスタマイズすることで、汎用的に使用できます。
また、複数DB環境でも実装可能です。
上記コマンドを、スクリプトで実施した場合の処理やソースコードは後述します。
※業務要件に応じてDBのwrite suspendや write resumeを使うかもしれませんが、本ブログでは省きます。
スクリプト作成時の前提条件を下記に記載します。
1. 引数の数は「1」とし、確認は必須である。
2. 実行ユーザはインスタンスオーナであること。また確認は必須である。
3. プロセスの二重起動確認は必須である。
4. 正常終了確認は必須である。
5. プロセス起動確認は必須である。
6. 正常終了のリターンコード「0」, 異常終了のリターンコードを「2」とする。
7. スコープの範囲は上記 1~6 の制限を満たすこととする。(他の要件は処理に含めないものとする。)
8. DB2が停止していること
9. インスタンスオーナで本シェルを実行すること
10.実行環境 (推奨)
・OS : Linux (Redhat V6.X ) ※DB2のインストール要件を満たしていること
・DB2 V10.X
・Shell : ksh
2. 処理
本スクリプトの処理は、下記となります。
<処理>
1 引数確認
2 DBインスタンスオーナ確認
3 プロセス二重起動確認
4 DB2起動
5 正常終了確認
6 プロセス起動確認
7 スクリプト終了
3. ソースコード
#!/bin/ksh # インスタンス名はconfファイルから読み出す等して下さい DBINST=$1 _argc=$# _usr=`whoami` # エラーコードはシステムの環境に合わせて変更して下さい exe: ERROR_CODE=4 ERROR_CODE=2 # Main処理 echo の出力はシステムの環境に合わせて変更してください exe: 共通のメッセージ関数を使用 # 引数確認 if (( ${_argc} != 1 )); then echo " Error user is not argc" exit ${ERROR_CODE} fi # DBインスタンスオーナ確認 if [[ ${_usr} != ${DBINST} ]]; then echo " Error user is not ${DBINST}" exit ${ERROR_CODE} fi # プロセス二重起動確認 _ps=`ps -ef | grep db2sysc | grep -v grep | wc -l` if [[ ${_ps} != 0 ]]; then echo " Error db2sysc is already enable" exit ${ERROR_CODE} fi # DB2起動 db2start > /dev/null 2>&1 _rec=$? # 正常終了確認 if [[ ${_rec} != 0 ]]; then echo " Error db2start failed " exit ${ERROR_CODE} fi # プロセス起動確認 _ps=`ps -ef | grep db2sysc | grep -v grep | wc -l` if [[ ${_ps} != 1 ]]; then echo " Error db2sysc is not enable " exit ${ERROR_CODE} fi echo " db2start is success " # スクリプト終了 exit 0
スクリプトを実行した時の例が下記になります。
正常終了した場合
異常終了した場合(DB2の起動に失敗した場合)
4. 最後に
今回はDB2を起動するスクリプトをブログに記載しました。
上記ソースをcronに登録することで自動化が可能です。
初めて運用スクリプトを作成した時に、スクリプトの仕様を決めるのに非常に苦労しました。
「参考になるスクリプトが欲しい」と思う人が、私の他にもいるのではないかと思います。
DB2の運用スクリプトを作成する人に、少しでもお役に立てれば幸いです。
ご一読頂き有難うございました。