Oracle 障害時の確認事項一覧

Oracle障害発生時に確認すべき項目をまとめました。障害が発生した場合の調査などに使用してください。内容に誤りがあったり環境により異なったりする可能性があります。十分注意して、参考程度にしてください。

環境:Oracle 11g R2 / Redhat Enterprise Linux 5





|
分類 項目 内容 出力される場所 、 出力コマンドなど
ログ アラート ログの確認 ・障害が発生したら最初に確認すべきログ。
・DB側でエラーが発生した場合出力される(ORA-xxxxx )。SQL構文エラーなどクライアントが原因のエラーは記録されない。
・DBの起動、停止などの管理操作が記録される。
・起動時の読み込んだパラメータ。
・エラーが発生した場合、詳細が記録されたトレースファイルへのパス。
・その他重要なログが記録される。
SQL> select * from v$diag_info;
を実行。出力結果の"Diag Alert"のパスを確認。
(*)10gで使用した以下のパラメータは11g R2では使用しない
user_dump_dest,background_dump_dest
トレース ログの確認 ・各プロセスごとの詳細のトレース。アラートログでエラーを確認したら、その後トレースファイルで詳細を確認する。
・Oracleサポート、あるいは上級者向け
SQL> select * from v$diag_info;
を実行。出力結果の"Diag Trace"のパスを確認。
(*)10gで使用した以下のパラメータは11g R2では使用しない
user_dump_dest,background_dump_dest
インシデントログの確認 重大なエラーが発生するたびにインシデントが発行される。
「ORA-00600: 内部エラー」など。
SQL> select * from v$diag_info;
を実行。出力結果の"Diag Incident"のパスを確認。
リスナー ログの確認 ・リスナー関連のログ
・クライアントからの接続障害が発生した場合などに確認する
# lsnrctl status を実行。リスナーログのパスが表示される。

(*)以下の方法でも確認が可能。
SQL> select * from v$diag_info;
を実行し「ADR Base」を確認する。
リスナーログは以下の場所にある。
<ADR BASE>/diag/tnslsnr/<ホスト名>/listener/trace/listener.log
startup.logの確認 ・データベース起動時のログ
・データベース起動時にエラーが発生した場合などに確認する。
<$ORACLE_HOME>/startup.log
監査ログ DBシャットダウン中 必須監査およびAUDIT_ACTIONS で指定した監査 監査出力をファイル指定した場合は以下のフォルダ
<$ORACLE_BASE>/admin/<SID>/adump
DB起動中 必須監査およびAUDIT_ACTIONS で指定した監査 監査出力をファイル指定した場合は以下のフォルダ
AUDIT_FILE_DEST パラメータで指定
リスナー リスナーの状態を確認 ・リスナーの状態を確認する 以下のコマンドを実行する
# lsnrctl status
リスナーの状態を確認 ・リスナーサービスの状態を確認する 以下のコマンドを実行する
# lsnrctl services
tnspingの確認 ・クライアントとサーバの接続確認を行う。
・クライアント側よりコマンドを実行する。
エラーが発生する場合は

<$ORACLE_HOME>/network/tnsnames.ora
を確認。問題ない場合はサーバ側のリスナーを確認する。
以下のコマンドを実行する
# tnsping localhost 

[OK]と表示されること
データベース ステータスの確認 現在のステータスを確認する。

想定したステータスか、途中で停止していないか確認する。
ステータスに関してはOracle ステータス と確認コマンド、移行コマンドを参照。
SQL> select STATUS from v$instance;

以下の表示を確認する。
STATUS
------------
<XXXX>


STARTED -> nomount
MOUNTED -> mount
OPEN -> open

「行1でエラーが発生しました。:
ORA-01034: ORACLE not available」と表示される場合はshutdown状態
表領域の空き容量の確認 表領域の空きスペースを確認する。

スペースが足りない場合は不要なレコードを削除するかテーブルを拡張する
DBA権限で以下 SQLを実行する
SQL>
SELECT
T.TABLESPACE_NAME,
ROUND(T.BYTES/POWER(1024,2),0) 総MB,
ROUND((T.BYTES - SUM(F.BYTES)) / POWER(1024,2),0) 使用MB,
ROUND(SUM(F.BYTES) / POWER(1024,2),0) フリーMB,
ROUND((1-SUM(F.BYTES) / T.BYTES)*100,2) 使用率
FROM SYS.DBA_FREE_SPACE F,
(SELECT TABLESPACE_NAME,SUM(BYTES) BYTES
FROM SYS.DBA_DATA_FILES
GROUP BY TABLESPACE_NAME) T
WHERE T.TABLESPACE_NAME = F.TABLESPACE_NAME(+)
GROUP BY T.TABLESPACE_NAME, T.BYTES;
ファイルシステム パーティションの空き容量の確認 OSとしてのパーティションで不足が発生していないか確認する。 Linux 上から以下のコマンドを実行する
# df -h
権限の確認 主な oracle ファイルのオーナー(所有者)は以下のとおり
owner = oracle
group = oinstall

(*)実行ファイルなど一部の所有者は root。
である。オーナーに誤りがあるとファイル読み込みに失敗し、データベース起動の段階で異常終了する。特にバックアップからリストアする場合、オーナー の設定も注意が必要。
dbfファイル、redoログファイル、コントロールファイル、パラメータファイルなどのオーナーを確認する。
<$Oracle_BASE>に移動し以下を実行する

# find ./ -user oracle -o -ls

# find ./ -group oinstall -o -ls
環境 環境変数 変数の確認する。誤りがある場合、ツールの起動などで失敗する場合あり。 以下設定例

ORACLE_BASE=/opt/oracle/app
ORACLE_HOME=/opt/oracle/app/product/11.2.0/dbhome_1
ORACLE_SID=<SID>
ORACLE_UNQNAME=<ユニーク名>
ORA_NLS10=/opt/oracle/app/product/11.2.0/dbhome_1/nls/data
ユーザ アカウントロック ・パスワード有効期限切れのアカウントは無いか
・パスワード入力誤りでロックされたアカウントは無いか

11g R2の場合デフォルト設定ではパスワードの有効期限が 180日に設定されている。
以下のコマンドで確認する
SQL> select * from DBA_USERS; を実行

EXPIRED と表示されるアカウントは有効期限切れ
LOCKED  と表示されるアカウントはアカウントロック

<参考>
●アカウントロックの解除
SQL> ALTER USER <ユーザ名> ACCOUNT UNLOCK;

●パスワード再設定
SQL> ALTER USER <ユーザ名> IDENTIFIED BY <パスワード>








[Oracle メモに戻る]