こんにちは、キャスレーコンサルティング SI(システム・インテグレーション)部 石田です。

私はサーバのインフラ設計構築をしており、主にDBの設計構築がメインとなります。
以前、DB2に触れる機会があり、その時に学んだ知識をブログに記載しようと思います。

はじめに

前回のブログでは「DB2のデータベースバックアップ」を記載しました。

前回同様、運用について記載しますが、今回は運用の改善や自動化といったテーマで記載しようと思います。
紹介する内容は「DB2起動の運用スクリプト」についてです。

目次

1. 概要
2. 処理
3. ソースコード
4. 最後に

1 . 概要

DB2の起動のスクリプトについて概要を説明する前に、DB2の起動について少し説明します。

図1に記載の通り、DB2のインスタンスはシステムコントローラであるdb2sysc(プロセス)と紐づいています。
db2syscのプロセスを起動することで他のプロセスやスレッドが起動し、DB2として動作可能な状態になります。
(停止の場合は、起動を停止に読み替えて下さい。)

DB2はスレッドモデルで実行されるため、複数DB環境でも、1つのdb2syscプロセスで実行されます。
複数DBが存在した場合でも、db2sysを起動することで複数DBへの接続が可能となります。

図1

図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

スクリプトを実行した時の例が下記になります。

正常終了した場合

図4

異常終了した場合(DB2の起動に失敗した場合)

図5

4. 最後に

今回はDB2を起動するスクリプトをブログに記載しました。
上記ソースをcronに登録することで自動化が可能です。

初めて運用スクリプトを作成した時に、スクリプトの仕様を決めるのに非常に苦労しました。
「参考になるスクリプトが欲しい」と思う人が、私の他にもいるのではないかと思います。

DB2の運用スクリプトを作成する人に、少しでもお役に立てれば幸いです。
ご一読頂き有難うございました。