データベース管理システムの運用でトラブルが発生したらどうするか。データベースサポートスペシャリストが現場目線の解決Tipsをお届けします。今回は、クラスタウェア「Oracle RAC」の動作状態を確認する「crsctl status resource -t」の使いこなしTipsを紹介します。
複数のサーバで1つのデータベースを構成するOracle Databaseのクラスタリング機能「Oracle RAC(Real Application Clusters)」は、クラスタウェア(Oracle Clusterware)によってデータベースやリスナーがリソース管理される仕組みとなっています。そのため、メンテナンスの際にはクラスタウェアを含めた再起動が必要となるケースがあります。
今回は、このメンテナンス体制を的確に構築することを目的に、「crsctl」コマンドを使ってOracle RAC環境が正しく起動したことを判断するTipsを紹介します。
本稿の対象は、Linux/UNIXシステム上で動作する「Oracle Grid Infrastructure 11gR2/12cR1」以降となります。ちなみにOracle Clusterwareは、Oracle Database 11gR2から「Oracle Grid Infrastructure」のコンポーネントの1つとなっています。
Oracle RAC環境が正しく起動したかどうかは、「crsctl status resource -t」コマンドで確認します。具体的には、このコマンドを実行することで、クラスタウェアに管理されているデータベースやリスナーなどの「リソース」の起動状況を確認できます。なお、「crsctl stat res -t」と少し略すことも可能です。
crsctl status resource -t
crsctl stat res -t
コマンドは、Oracle RACを構成するいずれかのノードで、「Oracle Grid Infrastructureのインストールユーザー名で実行します。通常は、「grid」というユーザー名でインストールされています。
正常に起動されていれば、各リソースのTarget列、State列が共に「ONLINE」の結果が返されます。ちなみに、Target列にはクラスタウェアが認識している状態(あるべき状態)、State列にはリソースの現在の状態が示されます。
[grid@node1 ~]$ crsctl stat res -t ---------------------------------------------------------------------- Name Target State Server State details ---------------------------------------------------------------------- Local Resources ---------------------------------------------------------------------- ・・・ ora.LISTENER.lsnr ONLINE ONLINE node1 STABLE ONLINE ONLINE node2 STABLE ・・・ ora.v1212.db 1 ONLINE ONLINE node1 Open,STABLE 2 ONLINE ONLINE node2 Open,STABLE
一方、異常時には、各リソースのTarget列とState列の値が「ONLINE以外」で返されます。
[grid@node1 ~]$ crsctl stat res -t ---------------------------------------------------------------------- Name Target State Server State details ---------------------------------------------------------------------- Local Resources ---------------------------------------------------------------------- ・・・ ora.LISTENER.lsnr ONLINE ONLINE node1 STABLE ONLINE ONLINE node2 STABLE ・・・ ora.v1212.db 1 ONLINE OFFLINE Abnormal Termination ,CLEANING 2 ONLINE ONLINE node2 Open,STABLE
上記の例では、データベース名「ora.v1212.db」が「OFFLINE」となっています。データベースに問題が発生しており、Oracle RACも正しく起動できていないことを示しています。データベースにどんな問題が発生したのかについては、アラートログを確認して状況を把握します。
今回はテストのために、smon(システムモニター)プロセスを強制終了(kill)して仮想的に障害を発生させました。アラートログを確認すると、クラスタウェアの死活監視機能によって、データベースの停止が検知され、自動復旧されたことが記録されていました。
Wed Oct 21 16:25:45 2015 Instance Critical Process (pid: 24, ospid: 11247, SMON) died unexpectedly /* SMONが停止し、データベースが異常終了 */ PMON (ospid: 11165): terminating the instance due to error 474 ・・・ Wed Oct 21 16:26:00 2015 Starting ORACLE instance (normal) (OS id: 15687) /* 死活監視により停止を検知し、起動を実施 */ ・・・ Wed Oct 21 16:26:35 2015 AQPC started with pid=51, OS id=16032 Starting background process CJQ0 Completed: ALTER DATABASE OPEN /* db agent *//* {0:25:36} */ /* データベースの起動が完了 */
なお今回のテストでは単純なデータベースの異常終了を模したことから自動復旧されましたが、エラーの内容によっては、死活監視機能による再起動でも正しく起動されない可能性があります。バックナンバー『忘れていませんか? 「アラートログ調査」に必要な、たった3つのキホン』と『Oracleトラブル解決の基礎 「ログ」を理解して「初動対応」を早くする』を参照いただき、しかるべき対処ができるように「ただしいログ採取の体制」はあらかじめ整えておくようにしてください。
Copyright © ITmedia, Inc. All Rights Reserved.