web-dev-qa-db-ja.com

起動時の「ORA-03113:通信チャネルのファイルの終わり」

私はここ、Oracleサポート、および過去3日間で見つけることができる他の場所で投稿を読んでいて、この問題をあきらめました...

Oracleデータベースがハングしました。データベースのシャットダウンが数時間行われた後、終了しました。再起動しません。サーバーが再起動されました。 Oracleが再起動されました。段階的に進む:起動nomountが機能し、データベースマウントが変更され、データベースオープンが変更されると、ORA-03113が返されます。これはすべてネットワーク経由ではなくローカルホスト上にあります。マシンには実行中のファイアウォールはありません。

このORA-03113エラーを回避する方法はありますか?私は過去4.5時間、インドでサポートを利用して電話をかけてきましたが、まだ役に立った人はいません。

22
kainaw

オラクルの公式サポートから何時間もの誤解を受けた後、私はこれを自分で調べて修正しました。他の誰かがこの問題を抱えている場合に備えて、私はそれをここに文書化しています。

これを行うには、Oracleユーザーである必要があります。

$ su - Oracle

ステップ1:アラートログを確認する必要があります。期待どおりに/ var/logにありません。 Oracleログ読み取りプログラムを実行する必要があります。

$ adrci
ADRCI: Release 11.2.0.1.0 - Production on Wed Sep 11 18:27:56 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
ADR base = "/u01/app/Oracle"
adrci>

ADRベースに注目してください。それはインストールではありません。使用する家に接続できるように、家を確認する必要があります。

adrci> show homes
ADR Homes:
diag/rdbms/cci/CCI
diag/tnslsnr/cci/listener
diag/tnslsnr/cci/start
diag/tnslsnr/cci/reload

CCIはホームです。それを設定します。

adrci> set home diag/rdbms/cci/CCI
adrci>

これで、アラートログを確認できます。ログを簡単に解析できるように、それらが/ var/logにあるとしたら非常に便利です。このインターフェースを使いたくないだけで対処してください。少なくともあなたはテイルすることができます(そしてあなたがスクロールバックバッファを持っていることを願っています):

adrci> show alert -tail 100

エラーが表示されるまでスクロールします。最初のエラーが必要です。最初のエラーの後のエラーは、おそらく最初のエラーが原因です。私の場合、最初のエラーは:

ORA-19815: WARNING: db_recovery_file_dest_size of 53687091200 bytes is 100.00% used, and has 0 remaining bytes available.

これはトランザクションが原因です。 Oracleは使用するように設計されていません。大量のデータをプッシュすると、トランザクションログが保存されます。それらはリカバリファイル領域に入ります。それがいっぱいになると(この場合は50GBがいっぱいになります)。その後、Oracleは死にます。設計上、問題が発生した場合、Oracleはシャットダウンして応答します。

2つの解決策があります。適切な解決策と、迅速で汚れた解決策です。すばやく汚いのは、db_recovery_file_dest_sizeを増やすことです。まず、adrciを終了します。

adrci> exit

次に、データベースを開かずにsqlplusに移動し、マウントするだけです(データベースをマウントせずにこれを実行できる場合がありますが、とにかくマウントします)。

$ sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on Wed Sep 11 18:40:25 2013
Copyright (c) 1982, 2009, Oracle. All rights reserved.
SQL> connect / as sysdba
Connected.
SQL> startup mount

これで、現在のdb_recovery_file_dest_sizeを増やすことができます。私の場合は75Gに増やしました。

SQL> alter system set db_recovery_file_dest_size = 75G scope=both

これで、シャットダウンして再起動できるようになり、以前のエラーはなくなるはずです。

適切な修正は、回復ファイルを取り除くことです。 SQLPLUSやADRCIではなく、RMANを使用してそれを行います。

$ rman
Recovery Manager: Release 11.2.0.1.0 - Production on Wed Sep 11 18:45:11 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
RMAN> backup archivelog all delete input;

RMAN-06171: not connected to target database、使用するよりもrman target /だけではなくrman

しばらく待つと、アーカイブログ(そのスペースをすべて使用していました)がなくなります。したがって、データベースをシャットダウン/起動して、ビジネスに戻ることができます。

35
kainaw