启动时出现“ORA-03113:通信通道上的文件结尾”

kai*_*naw 28 oracle startup

在过去的三天里,我一直在这里阅读有关 Oracle 支持以及我能找到的任何其他地方的帖子,但我已经放弃了这个问题......

Oracle 数据库挂起。关闭数据库坐了几个小时,然后它就退出了。它不会重新启动。服务器已重新启动。Oracle 已重新启动。循序渐进:启动 nomount 工作,alter database mount 工作,alter database open 返回 ORA-03113。这一切都在本地主机上 - 而不是通过网络。机器没有运行任何类型的防火墙。

知道如何解决这个 ORA-03113 错误吗?在过去的 4.5 小时里,我一直在与印度的支持人员通电话,但我还没有找到任何有帮助的人。

kai*_*naw 43

在受到 Oracle 官方支持人员数小时的误导后,我自己深入研究并修复了它。我在这里记录它以防其他人有这个问题。

为此,您必须是 oracle 用户:

$ su - oracle
Run Code Online (Sandbox Code Playgroud)

第 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>
Run Code Online (Sandbox Code Playgroud)

注意 ADR 基数。那不是安装。您需要查看房屋,以便连接到您使用的房屋。

adrci> show homes
ADR Homes:
diag/rdbms/cci/CCI
diag/tnslsnr/cci/listener
diag/tnslsnr/cci/start
diag/tnslsnr/cci/reload
Run Code Online (Sandbox Code Playgroud)

CCI是家。设置那个。

adrci> set home diag/rdbms/cci/CCI
adrci>
Run Code Online (Sandbox Code Playgroud)

现在,您可以查看警报日志。如果它们在 /var/log 中会非常好,这样您就可以轻松解析日志。停止想要并处理这个接口。至少你可以拖尾(我希望你有一个回滚缓冲区):

adrci> show alert -tail 100
Run Code Online (Sandbox Code Playgroud)

向后滚动,直到看到错误。你想要第一个错误。第一个错误之后的任何错误都可能是由第一个错误引起的。就我而言,第一个错误是:

ORA-19815: WARNING: db_recovery_file_dest_size of 53687091200 bytes is 100.00% used, and has 0 remaining bytes available.
Run Code Online (Sandbox Code Playgroud)

这是由交易引起的。Oracle 不是为使用而设计的。如果您确实将大量数据推送到其中,它会保存事务日志。那些进入恢复文件区域。一旦它已满(在这种情况下为 50GB 已满)。然后,甲骨文就死了。按照设计,如果出现任何问题,Oracle 将通过关闭来响应。

有两种解决方案,一种是正确的,另一种是快速而肮脏的。快速而肮脏的方法是增加 db_recovery_file_dest_size。首先,退出adrci。

adrci> exit
Run Code Online (Sandbox Code Playgroud)

现在,在不打开数据库的情况下进入 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
Run Code Online (Sandbox Code Playgroud)

现在,您可以增加当前的 db_recovery_file_dest_size,在我的情况下增加到 75G:

SQL> alter system set db_recovery_file_dest_size = 75G scope=both
Run Code Online (Sandbox Code Playgroud)

现在,您可以关闭并再次启动,之前的错误应该消失了。

正确的解决方法是删除恢复文件。您可以使用 RMAN 而不是 SQLPLUS 或 ADRCI 来执行此操作。

$ 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;
Run Code Online (Sandbox Code Playgroud)

如果你有RMAN-06171: not connected to target database,比尝试使用rman target /而不是仅仅rman

等待很长时间,您的存档日志(用完所有空间)将消失。因此,您可以关闭/启动您的数据库并重新开始业务。

  • 谢谢!有用。但是 rman 的正确命令是:`export ORACLE_SID=my_oracle` // `rman target /` (3认同)