Oracle リカバリーキットが提供する監視機能についてご説明します。
対象製品
・Oracle リカバリーキット (LifeKeeper for Windows)
※本処理概要は LifeKeeper for Windows v8.3 に付属するリカバリキットをもとに作成しています。
クイックチェック (quickCheck)
Windows の sc コマンドを使用して得られるサービスのステータスから、以下の Core サービスの起動状態を確認します。
・Oracle サービス
・Oracle Listener サービス
また、Oracle リソース作成時にオプションの保護サービスを追加した場合には、同様にsc query コマンドを使用して該当サービスのステータスを確認します。
sc query [サービス名]
サービスステータスに対する監視結果は以下となります。
RUNNNING:
サービスが正常に起動していると判断し、監視処理を終了します。
RUNNING 以外:
障害とみなします。
この監視によって障害が検出された場合、検出したサービスによって以下のようなメッセージをイベントログに出力し、監視失敗として処理を終了します。
Oracle サービス、Oracle Listener サービスのとき
Error 2103 "Core service [サービス名] is not running on system [ノード名]."
任意に追加したオプションサービスのとき
Warning 2104 "Optional service [サービス名] is not running on system [ノード名]."
詳細チェック (deepCheck)
(1) クイックチェックを実施します。
(2) Oracle インスタンスへの接続確認
Oracle の sqlplus コマンドを使用して、リソース作成時に指定されたユーザ名とパスワードでインスタンスに接続します。
接続後、以下の SQL を実行してエラーが発生しない事を確認し、エラーが発生していない場合は監視成功として処理を終了します。
select file_name from dba_data_files;
SQL クエリ実行結果について、クエリエラーを示す ERROR: が発生した場合、以下のようなメッセージをイベントログに出力し、監視失敗として処理を終了します。
Error 2842 "Error: An unexpected Oracle error has occurred. The SQL FILE_NAME Report identified the error as follows: $SqlOutput"
ORA-01034 エラーが発生した場合、イベントログへ以下のようなメッセージを出力し、監視失敗として処理を終了します。
Error 2846 "Error: An Oracle Error 1034 \"Oracle Not Available\" has occurred. The SQL FILE_NAME report identified the error as follows: $SqlOutput."
ユーザ名・パスワードの誤りを示す ORA-01017 エラーが発生した場合、イベントログへ以下のようなメッセージを出力します。
ただし、監視成功と判断して処理を終了します。
Warning 2843 "Error: Invalid username/password combination found for Oracle SID [SID名]. Please use the UpdateLKOra utility to reset to the correct values."
起動処理 (restore)
(1) Oracle サービス の起動状況を確認します。
sc query [サービス名]
サービス起動状態により、以下の処理を行います。
既にサービスが正常に起動しているとみなし、ディープチェックを実施します。
ディープチェックに成功した場合、起動完了とみなして起動処理を終了します。
ディープチェックに失敗した場合、sc stop [サービス名] コマンドを実施してサービスを停止します。その後 (2) へ進みます。
STOPPED:
サービスが停止していると判断し、(2) へ進みます。
RUNNING、STOPPED 以外:
サービスの起動中、あるいは停止中と判断し、sc stop [サービス名] を実施して サービスを停止します。
サービス停止後、(2) へ進みます。
(2) サービスに対して起動状況を取得するため、以下コマンドを実行します。
$LKBIN/ScQueryState [サービス名]
(2-1) 取得したサービスの状態が RUNNING 以外の場合、以下のコマンドを実行します。
sc start [サービス名]
サービスを起動できた場合、(3) へ進みます。
サービスを起動できなかった場合、以下のメッセージをイベントログへ出力し、起動失敗と判断して起動処理を終了します。
Error 2853 "Unable to start [サービス名] on system [ノード名]."
(2-2) 既にサービスの状態が RUNNING の場合、(3) へ進みます。
(3) Oracle Listener サービスに対し、(1)、(2) の処理を行います。
Oracle Listener サービスの起動に成功した場合、(4) へ進みます。
(4) オプションサービスも保護する場合は、Oracle 本体のサービス起動完了後に、オプションサービスについてサービス起動状況を取得するため、各々以下コマンドを実行します。
$LKBIN/ScQueryState [オプションサービス名]
オプションサービスを保護しない場合は、(5) へ進みます。
(4-1) 取得したサービスの状態が RUNNING 以外の場合、以下のコマンドを実行します。
sc start [オプションサービス名]
サービスを起動できた場合、次のオプションサービスの起動処理を行い、すべてのサービスの起動完了後 (5) へ進みます。
サービスを起動できなかった場合、以下のメッセージをイベントログへ出力し、起動失敗と判断して起動処理を終了します。
Warning 2854 "Unable to start [オプションサービス名] on system [ノード名]."
(5) サービス起動後、ディープチェックを実施します。
(5-1) ディープチェックに成功した場合、以下のメッセージをイベントログへ出力し、起動成功として起動処理を終了します。
Information 2302 "RESTORE Oracle [リソース名] : deepchk success."
Information 2311 "LifeKeeper: RESTORE Oracle [リソース名] END - successful."
(5-2) ディープチェックに失敗した場合、以下のメッセージをイベントログへ出力し、起動失敗と判断して起動処理を終了します。
Warning 2303 "RESTORE Oracle [リソース名] : deepchk fails."
停止処理 (remove)
(1) オプションで保護するサービスが存在する場合には各サービスを停止するため、以下のコマンドを実行して各オプションサービスの起動状況を1つずつ取得します。
オプションのサービスが存在しない場合、(2) へ進みます。
$LKBIN/ScQueryState.exe [オプションのサービス名]
取得したサービスの状態が STOPPED 以外の場合、以下のコマンドを実行してサービスを停止します。
sc stop [オプションのサービス名]
オプションサービスの停止に成功した場合、次のオプションサービスの停止処理を行います。
オプションサービスの停止に失敗した場合、以下のようなメッセージをイベントログへ出力します。ただし、停止処理の失敗とせずに次のサービスの停止処理を行います。
Warning 2882 "Unable to stop [オプションのサービス名] on system [ノード名]."
(2) Oracle Listener のサービスを停止するため、以下のコマンドを実行してサービス起動状況を取得します。
$LKBIN/ScQueryState.exe [Oracle Listener のサービス名]
取得したサービスの状態が STOPPED 以外の場合、以下のコマンドを実行してサービスを停止します。
sc stop [Oracle Listener のサービス名]
Oracle Listener のサービスの停止に成功した場合、(3) へ進みます。
Oracle Listener のサービスの停止に失敗した場合、以下のようなメッセージをイベントログへ出力し、停止処理に失敗したと判断して停止処理を終了します。
Error 2883 "Unable to stop [Oracle Listener のサービス名] on system [ノード名]."
(3) Oracle サービスを停止するため、以下のコマンドを実行してサービス起動状況を取得します。
$LKBIN/ScQueryState.exe [Oracle サービス名]
取得したサービスの状態が STOPPED 以外の場合、以下のコマンドを実行してサービスを停止します。
sc stop [Oracle サービス名]
Oracle サービスの停止に成功した場合、すべての Oracle に関連するサービスの停止に成功したと判断し、以下のようなメッセージをイベントログへ出力し、停止処理を終了します。
Information 2510 "LifeKeeper: REMOVE Oracle [リソース名] END - successful."
Oracle サービスの停止に失敗した場合、以下のようなメッセージをイベントログへ出力し、停止処理に失敗したと判断して停止処理を終了します。
Error 2883 "Unable to stop [Oracle サービス名] on system [ノード名]."
回復処理 (recover)
起動処理 (restore) と同一の処理を行います。
改訂履歴
[公開日:2010年1月29日] [更新日:2017年2月15日] 以下の処理概要を追加しました。
・起動処理(restore)
・停止処理(remove)
・回復処理(recover)
[更新日:2018年12月13日] 2843 の Error を Warning に修正。