Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

OracleDB

ORA-03113 end-of-file on communication channelエラーの対処

投稿日:2017年10月15日 更新日:

”ORA-03113 end-of-file on communication channel”の対処法について記述します。

(0) 目次

(1) 解析
(2) 原因
(3) 対策
(4) 解説
 (4-1) アラート・ログ
 (4-2) トレースファイル
 (4-3) リスナー・ログ
 (4-4) DDLログファイル

(1) 解析

以下のログファイルについて内容を確認します。

cd /u01/app/oracle/diag/rdbms/orcl/orcl/trace
tail -100 alert_orcl.log

※ログの出力結果

Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_arc1_4650.trc:
ORA-19815: WARNING: db_recovery_file_dest_size of 2713714688 bytes is 100.00% used, and has 0 remaining bytes available.
************************************************************************
You have following choices to free up space from recovery area:
1. Consider changing RMAN RETENTION POLICY. If you are using Data Guard,
then consider changing RMAN ARCHIVELOG DELETION POLICY.
2. Back up files to tertiary device such as tape using RMAN
BACKUP RECOVERY AREA command.
3. Add disk space and increase db_recovery_file_dest_size parameter to
reflect the new space.
4. Delete unnecessary files using RMAN DELETE command. If an operating
system command was used to delete files, then use RMAN CROSSCHECK and
DELETE EXPIRED commands.
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_4639.trc:
ORA-19815: WARNING: db_recovery_file_dest_size of 2713714688 bytes is 100.00% used, and has 0 remaining bytes available.
************************************************************************
************************************************************************
You have following choices to free up space from recovery area:
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_arc1_4650.trc:
ORA-19809: limit exceeded for recovery files
ORA-19804: cannot reclaim 39296512 bytes disk space from 2713714688 limit
1. Consider changing RMAN RETENTION POLICY. If you are using Data Guard,
ARC1: Error 19809 Creating archive log file to '/home/oracle/flash/ORCL/archivelog/2017_10_15/o1_mf_1_137_%u_.arc'
then consider changing RMAN ARCHIVELOG DELETION POLICY.
2. Back up files to tertiary device such as tape using RMAN
BACKUP RECOVERY AREA command.
3. Add disk space and increase db_recovery_file_dest_size parameter to
reflect the new space.
4. Delete unnecessary files using RMAN DELETE command. If an operating
system command was used to delete files, then use RMAN CROSSCHECK and
DELETE EXPIRED commands.
************************************************************************
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_4639.trc:
ORA-19809: limit exceeded for recovery files
ORA-19804: cannot reclaim 39489536 bytes disk space from 2713714688 limit
ARCH: Error 19809 Creating archive log file to '/home/oracle/flash/ORCL/archivelog/2017_10_15/o1_mf_1_136_%u_.arc'
ARCH: Archival stopped, error occurred. Will continue retrying
ORACLE Instance orcl - Archival Error
ORA-16038: log 2 sequence# 137 cannot be archived
ORA-19809: limit exceeded for recovery files
ORA-00312: online log 2 thread 1: '/u01/app/oracle/oradata/orcl/redo02.log'
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_arc1_4650.trc:
ORA-16038: log 2 sequence# 137 cannot be archived
ORA-19809: limit exceeded for recovery files
ORA-00312: online log 2 thread 1: '/u01/app/oracle/oradata/orcl/redo02.log'
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_4639.trc:
ORA-16038: log 1 sequence# 136 cannot be archived
ORA-19809: limit exceeded for recovery files
ORA-00312: online log 1 thread 1: '/u01/app/oracle/oradata/orcl/redo01.log'
USER (ospid: 4639): terminating the instance due to error 16038
Instance terminated by USER, pid = 4639

目次にもどる

(2) 原因

どうやら「フラッシュリカバリ領域」が不足している事が原因でエラーが発生している様です。

ORA-19809: limit exceeded for recovery files

目次にもどる

(3) 対策

方針として、まずは『3-1.一時的に領域を拡張してDBをOPEN状態にする』、 OPENしたら次に『3-2.「不要なログファイルを削除」or「NOARCHIVELOGモードへの変更」』のいずれかを検討
という対応をします(今回の記事は(3-1)まで実施)。

(3-1)一時的に領域を拡張してDBをOPEN状態にする

以下の手順でSQL*Plusを起動して一時的にフラッシュリカバリ領域を拡張し、DBをOPEN状態にします。

//sql*Plusを起動
export ORACLE_BASE=/u01/app/oracle/
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
export ORACLE_SID=orcl
cd /u01/app/oracle/product/11.2.0/dbhome_1/bin/
./sqlplus /nolog
//sql*Plusを起動完了後
//インスタンスに接続
CONN SYSTEM/XXXXX AS SYSDBA
//データベースをマウント状態にする
STARTUP MOUNT
//フラッシュリカバリ領域の容量を増量
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=10G SCOPE=BOTH SID='orcl'
//データベースをオープンする
ALTER DATABASE OPEN;

目次にもどる

(4) 解説

Oracleデータベースの代表的なログについて記載します。

(4-1) アラート・ログ

データベース個別のイベントとダンプファイル情報などを保持し、稼働する間の動作の状態が逐次記録されています。障害が発生した場合に最初に確認するログが「アラート・ログ」になるケースが多く、「アラート・ログ」で障害が確認出来ない場合、トレースログも併せて確認を行うのがベストプラクティスの様です。

●格納場所

$ORACLE_BASE/diag/rdbms/[DB名]/[SID]/trace

私の環境では「$ORACLE_BASE」=/u01/app/oracle、[DB名]=orcle、[SID]=orcleのため下記に存在していました。

/u01/app/oracle/diag/rdbms/orcl/orcl/trace

●ログのサンプル

[oracle@tk2-262-40837 trace]$ head -2000 alert_orcl.log | grep "ORA-"
ORA-1109 signalled during: ALTER DATABASE CLOSE NORMAL...
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: '/u01/app/oracle/oradata/orcl/redo01.log'
ORA-27037: unable to obtain file status
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: '/u01/app/oracle/oradata/orcl/redo01.log'
ORA-27037: unable to obtain file status
ORA-00313: open failed for members of log group 2 of thread 1
ORA-00312: online log 2 thread 1: '/u01/app/oracle/oradata/orcl/redo02.log'
ORA-27037: unable to obtain file status
ORA-00313: open failed for members of log group 2 of thread 1
ORA-00312: online log 2 thread 1: '/u01/app/oracle/oradata/orcl/redo02.log'
ORA-27037: unable to obtain file status
ORA-00313: open failed for members of log group 3 of thread 1
ORA-00312: online log 3 thread 1: '/u01/app/oracle/oradata/orcl/redo03.log'
ORA-27037: unable to obtain file status
ORA-00313: open failed for members of log group 3 of thread 1
ORA-00312: online log 3 thread 1: '/u01/app/oracle/oradata/orcl/redo03.log'
ORA-27037: unable to obtain file status
ORA-19815: WARNING: db_recovery_file_dest_size of 2713714688 bytes is 85.88% used, and has 383157248 remaining bytes available.

(4-2) トレースファイル

トレースファイルとは「エラーが発生した際の情報やメモリダンプの事を指しています。
①Oracleのバックグラウンドプロセスでエラーや異常終了が発生した際にプロセスが書き出すファイルで、障害の原因調査に利用される情報が記載されます。ファイルの名前にはそのファイルを生成したプロセスの名前が含まれており、拡張子は「.trc」で記載されます。
②クリティカルエラーに対してはインシデント番号を採番し、データをADR(Automatic Diagnostic Repository)に格納します。
③ディレクトリ上の出力場所は初期化パラメーターの「USER_DUMP_DEST」と「BACKGROUND_DUMP_DEST」から確認ができます。

●出力場所の確認手順
①SQL*Plusにログイン
②USER_DUMP_DESTの現在の値の確認

SQL> SHOW PARAMETER USER_DUMP_DEST

③BACKGROUND_DUMP_DESTの現在の値の確認

SQL> SHOW PARAMETER BACKGROUND_DUMP_DEST

上記階層を「ls」コマンドで照会した例を示します。

(4-3) リスナー・ログ

リスナーへの接続要求毎に1行出力され、タイムスタンプと共にSID・ホスト名・プロトコル・接続試行結果・リターンコード(0=接続成功、失敗時はエラー)などの情報が出力されています。格納場所の調べ方として「リスナー制御ユーティリティ(lsnrctl)」の「status」コマンドで確認する方法があります。

●格納場所

$ORACLE_BASE/diag/tnslsnr/[ホスト名]/listener/trace

私の環境では「$ORACLE_BASE」=/u01/app/oracleのため下記に存在していました。

/u01/app/oracle/diag/tnslsnr/[ホスト名]/listener/trace

●ログのサンプル

09-JUN-2017 03:50:14 * (CONNECT_DATA=(SID=orcl)(CID=(PROGRAM=perl)(HOST=tk2-262-40837.vs.sakura.ne.jp)(USER=oracle))) * (ADDRESS=(PROTOCOL=tcp)(HOST=XXX.XXX.XXX.XXX)(PORT=45005)) * establish * orcl * 0

 

(4-4) DDLログファイル

実行されたDDL文(CREATE・DROP・ALTERとTRUNCATEも一部)の一部情報が書き込まれるログファイルです。ENABLE_DDL_LOGGING初期化パラメーターがTRUEに設定されている場合にのみログが作成されます。このパラメーターの変更は以下の手順で実施します。

●出力パラメタ変更手順
①SQL*Plusにログイン
②ENABLE_DDL_LOGGINGの現在の値の確認

SQL> SHOW PARAMETER ENABLE_DDL_LOGGING

③ENABLE_DDL_LOGGINGの値の更新
上記②の結果がFALSEだった場合TRUEに更新します。

SQL> ALTER SYSTEM SET ENABLE_DDL_LOGGING = TRUE SCOPE = BOTH;

上記の文で「SCOPE = BOTH」は変更の適用を起動中インスタンスとSPFILEの両方に行う事を意味します。 各種の診断結果ファイルの場所は「V$DIAG_INFO」ビューからも確認が出来ます。

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-OracleDB

執筆者:


comment

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

関連記事

SQL Developer接続エラーへの対処(ORA-12514, ORA-12505)

SQL Developer接続エラーへの対処 SQL Developerを起動してSYSTEMユーザで接続する際に発生した、下記2つのエラーの対処法について記載します。 エラー#1:ORA-12514 …

ORA-00257エラーの対応(“archiver error. Connect Internal only. until freed”)

ORA-00257エラーの対応法についてです。 (“archiver error. Connect Internal only, until freed”) (0) 目次 (1 …

Linuxサーバ(CentOS6)にOracleDB11gをインストールする(その1)

掲題の通り、LinuxにOracleDB(11g)をインストールする方法について書きます。 ■目次 (0)前提条件 (1)インストール要件の確認 (2)ユーザ/グループ作成 (3)Oracle DBソ …

OracleDB11g で新規表領域とスキーマの作成

(0) 目次 (1) 表領域の作成 (2) スキーマの作成 (3) スキーマの接続権限を付与 (4) 用語解説 (1) 表領域の作成 表領域とデータベースファイル(dbf)を以下のコマンドで作成します …

SQLでCASE文の結果をWHERE句に指定する方法およびコスト面の考察

本記事では、 ・SQLでCASE文の結果をWHERE句に指定する方法について記述します。 ・CASE文を使う場合のコストについて考察します。 (0)目次&概説 (1) NG例 (2) OK例&解説 ( …

  • English (United States)
  • 日本語
Top