Oracle Database の起動と切断の自動化! By Solaris 実行制御スクリプト


oracle_db_auto_01

OSを起動するたびに Oracle Database と Oracle リスナーを手動で起動するのは結構面倒!ということでOSの起動・切断に連動してDBやリスナーの起動・切断を自動化する設定を行いました。一回設定するとしばらくしなく忘れるので、その備忘録です。

【構築環境】
  • Oracle Solaris 11.3 (64-Bit)
  • Oracle Database 12c Release 1 Standard Edition

※参考:Oracle Database管理者リファレンス > Oracleソフトウェアの停止と起動

自動化の流れ

自動化として以下の処理が必要になります。
まず、Oracle Database 自身の起動が必要になります。また外部からOracle Database に接続するためには Oracle リスナーの起動も必要になります。切断するためには Oracle Database 自身と Oracle リスナーの切断が必要になります。

■自動起動時
 ・Oracle Database 自身の起動
 ・Oracle リスナーの起動
■自動切断時
 ・Oracle Database 自身の切断
 ・Oracle リスナーの切断

もう少し具体的にみていくと、Oracle Database 自身の起動 には Oracleが準備している dbstart コマンドを実行します。
切断時には、dbshut コマンド です。
上記コマンドを OS機能の 実行制御スクリプト で実行します。

■実行制御スクリプト ランレベル3(※コンソール利用レベル)
 ・dbstart $ORACLE_HOME
■実行制御スクリプト ランレベル0(※電源切断状態)
 ・dbshut $ORACLE_HOME

dbstart と dbshut コマンドは Oracle Database と Oracleリスナー処理をまとめて実行してくれます。

dbstart の動作確認

Solarisでコマンドラインを起動します。まずは dbstart コマンドが正常に動作するか確認します。

root@Solaris:~# su - oracle
Oracle Corporation    SunOS 5.11    11.3    September 2015

Oracleソフトウェア所有者として作成したユーザに シェルのユーザを切り替えます。
私は oracle という名前のユーザにしたので以下、oracle ユーザで進めます。

oracle@Solaris:~$ dbstart $ORACLE_HOME
oracle@Solaris:~$

dbstart コマンドを実行しました。パラメータは Oracle Database をインストールした Oracleホームへのパスです。正常にOracle Database が起動したならばプロセスが表示されます。上記のように何もプロセスが表示されずにすぐに終わったならばdbstart コマンドの対象インスタンスが設定されていません。

※dbstart へのパスが通ってない場合、実行ファイルは $ORACLE_HOME/bin にあります。フルパスで指定してください。
※環境変数 $ORACLE_HOME はOracle Database が動作する環境ならば既に設定していると思いますが、未設定の場合 WinにVirtualBoxでOracle DB 環境構築! Solaris に Oracle Database をインストールする を参考にしてください。

oratabファイルで dbstart および dbshut コマンド の対象を設定する

dbstart および dbshut コマンド は oratabファイルをみて対象を判断します。Solaris では Oracle Database インストール時に /var/opt/oracle/oratab が生成されます。このファイルを開きます。

oracle@Solaris:~$ 
oracle@Solaris:~$ vi /var/opt/oracle/oratab

データベース作成すれば、以下のような行が追記されています。

orcl:/oracle/app/oracle/product/12.1.0/dbhome_1:N

「SID:Oracleホーム:可否」の形式なので、上記では、Oracleホーム「/oracle/app/oracle/product/12.1.0/dbhome_1」のSID「orcl」への dbstart 及び dbshut コマンドの実行は 不可 となっています。なので、可否を 許可「Y」に変更します。

orcl:/oracle/app/oracle/product/12.1.0/dbhome_1:Y

許可「Y」に変更しました。oratabファイルを保存します。

dbstart の動作確認

再度、dbstart コマンドの実行確認です。

oracle@Solaris:~$ dbstart $ORACLE_HOME
Processing Database instance "orcl": log file /oracle/app/oracle/product/12.1.0/dbhome_1/startup.log
oracle@Solaris:~$

今度は、「Processing Database instance ・・・」と表示されました。SID:orcl へのインスタンスが起動します。

※インスタンス起動には数秒かかります。一瞬で終わったならば起動失敗している可能性があります。ログで確認してください。Solaris再起動などで直ることもあります。

dbshut の動作確認

dbshut コマンドも実行確認します。

oracle@Solaris:~$ dbshut $ORACLE_HOME
Processing Database instance "orcl": log file /oracle/app/oracle/product/12.1.0/dbhome_1/shutdown.log
oracle@Solaris:~$ 

「Processing Database instance ・・・」も表示され SID:orcl へのインスタンスを切断しています。

※インスタンス切断には数秒かかります。一瞬で終わったならば切断失敗している可能性があります。ログで確認してください。Solaris再起動などで直ることもあります。

実行制御スクリプトで実行するシェルスクリプト作成

慣習的に実行制御スクリプトのシェルスクリプトのファイルは /etc/init.d ディレクトリに作成します。dbora というファイル名で作成しました。

oracle@Solaris:~$ su -
Password: 
Oracle Corporation	SunOS 5.11	11.3	September 2015
You have new mail.
root@Solaris:~# 

root@Solaris:/# vi /etc/init.d/dbora

実行制御スクリプトはrootユーザで実行されます。 rootユーザで dbora を作成します。

【/etc/init.d/dbora】

#! /bin/sh  -x
#
# Change the value of ORACLE_HOME to specify the correct Oracle home
# directory for your installation.

ORACLE_HOME=/oracle/app/oracle/product/12.1.0/dbhome_1
#
# Change the value of ORACLE to the login name of the
# oracle owner at your site.
#
ORACLE=oracle

case $1 in
'start')
        su - $ORACLE -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME" 
        ;;
'stop')
        su - $ORACLE -c "$ORACLE_HOME/bin/dbshut $ORACLE_HOME" 
        ;;
*)
        echo "usage: $0 {start|stop}" 
        exit
        ;;
esac
#
exit

かんたんなシェルスクリプトです。自動処理は rootユーザ になっているので 「su - $ORACLE -c ...」と Oracleソフトウェア所有者 のユーザにシェルユーザを変更してコマンドを実行しています。

■パラメータが start の場合
 ・dbstart $ORACLE_HOME
■パラエータが stop の場合
 ・dbshut $ORACLE_HOME

※ORACLE_HOME と ORACLE の値は各自環境に変更してください。

/etc/init.d/dbora の動作確認

作成したシェルスクリプトの動作確認をします。

bash /etc/init.d/dbora start
root@Solaris:/# bash /etc/init.d/dbora start
Oracle Corporation	SunOS 5.11	11.3	September 2015
Processing Database instance "orcl": log file /oracle/app/oracle/product/12.1.0/dbhome_1/startup.log
root@Solaris:/# 

Oracle Database が起動しています。Oracleリスナーも同時起動されてますから 外部クライアントから Oracle Database へ接続できるはずです。
次に切断します。

bash /etc/init.d/dbora stop
root@Solaris:~# bash /etc/init.d/dbora stop
Oracle Corporation	SunOS 5.11	11.3	September 2015
Processing Database instance "orcl": log file /oracle/app/oracle/product/12.1.0/dbhome_1/shutdown.log
root@Solaris:~# 

Oracle Database が切断されました。Oracleリスナーも同時に切断されています。外部クライアントから接続できなくなっています。

実行制御スクリプトとして dbora を実行する

いよいよ最後です。作成したシェルスクリプト dbora を自動実行しなければなりません。その設定を行います。
自動実行をするために 実行制御スクリプトとして動作させます。

※参考:実行制御スクリプト (Solaris のシステム管理 (基本編))

実行タイミングにより、実行レベルがあり 1~6とS の7分類に分かれます。詳しくは上記 参照の公式リファレンスを参考にしてください。
今回は、起動時にシェルスクリプトが実行できるタイミングの実行レベル3 と シャットダウン時のタイミングの 実行レベル0を使います。

■実行レベル3
 ・dbora start を実行
■実行レベル0
 ・dbora stop を実行

/etc/rc[実行レベル].d のディレクトリがあるので、そこにシェルスクリプトを配置するだけで指定したタイミングで実行されます。慣習的にシェルスクリプトの実体は /etc/init.d に、/etc/rc[実行レベル].d には実体ファイルへのシンボリックリンクを貼ります。

【実行レベル3で dbora start を実行】

実行レベル3なので、/etc/rc3.d ディレクトリ内にシンボリックリンクを作成します。注意しなければいけないのが命名規則があります。

[KS][0-9][0-9]*

先頭は 「K か S」 そして 2文字と3文字目は「00から99」それ以降は任意です。
スクリプト先頭が S の場合は、そのスクリプトは start パラメータが付与されます。K の場合は stop パラメータが付与されます。2文字と3文字目は優先順位です。/etc/rc3.d ディレクトリ内には複数のスクリプトがあるため、どのスクリプトから実行するのか優先を決めます。今回は

/etc/rc3.d/S99dbora

という名前にしました。起動のため 先頭は 「S(付与パラメータ:start)」 です。優先順位は何でもいいのですがとりあえず 「99」 にしました。これでシンボリックリンクを貼ります。

root@Solaris:/# ln -s /etc/init.d/dbora /etc/rc3.d/S99dbora
root@Solaris:/# ls -l /etc/rc3.d/
total 5
-rw-r--r--   1 root     sys         1232 10月  7日 2015年 README
lrwxrwxrwx   1 root     root          17 11月 12日  15:39 S99dbora -> /etc/init.d/dbora
root@Solaris:/# 
【実行レベル0で dbora stop を実行】

実行レベル0なので、/etc/rc0.d ディレクトリ内にシンボリックリンクを作成します。 今回は

/etc/rc0.d/K01dbora

という名前にしました。切断のため 先頭は 「K(付与パラメータ:stop)」 です。優先順位は何でもいいのですがとりあえず 「01」 にしました。これでシンボリックリンクを貼ります。

root@Solaris:/# ln -s /etc/init.d/dbora /etc/rc0.d/K01dbora
root@Solaris:/# ls -l /etc/rc0.d/
total 6
lrwxrwxrwx   1 root     root          17 11月 12日  15:49 K01dbora -> /etc/init.d/dbora
-rwxr--r--   5 root     sys         1836 10月  7日 2015年 K50pppd
root@Solaris:/#

以上で、自動実行の設定は完了です。

まとめ

複雑なようで意外とやっていることは単純です。実行処理をまとめたシェルスクリプトを作って 実行制御スクリプトのランレベルに従ったディレクトリに配置(※シンボリックリンクを貼る)するだけです。多少パスなどは違いますが、Linux系ならほぼ同じように様々なシェルを自動実行できます。一回覚えるといろいろ応用ができると思います。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です