Fenng曾经总结过ORA-03113的各类原因:

  • Unix核心参数设置不当
  • Oracle执行文件权限不正确/环境变量问题
  • 客户端通信不能正确处理
  • 数据库服务器崩溃/操作系统崩溃/进程被kill
  • Oracle 内部错误
  • 特定SQL、PL/SQL引起的错误
  • 空间不够
  • 防火墙的问题

可是有一种原因也能引起这个问题,这绝对是多数人意想不到的。

SQL> conn sys/manager as sysdba
Connected to an idle instance.
SQL> startup
ORACLE instance started.

Total System Global Area 167772160 bytes
Fixed Size 1247876 bytes
Variable Size 62915964 bytes
Database Buffers 96468992 bytes
Redo Buffers 7139328 bytes
Database mounted.
Database opened.

然后在操作系统中执行这个命令:

REG DELETE HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE /F
SQL> alter database datafile 'D:\ORADATA\ZEENO.DBF' resize 100M;
alter database datafile 'D:\ORADATA\ZEENO.DBF' resize 100M
*
ERROR at line 1:
Error while trying to retrieve text for error ORA-03113
SQL> alter database drop datafile ‘D:\ORADATA\ZEENO.DBF’;
ERROR:
Error while trying to retrieve text for error ORA-03114

SQL> alter database datafile ‘D:\ORADATA\ZEENO.DBF’ resize 100M;
ERROR:
ORA-03114: not connected to ORACLE

由于单位里的一套ERP系统许多注册表参数跟Oracle的起冲突,因而我为了安装自己的测试环境不得不临时修改一下注册表。偶尔的,我忘记手头正在做的事情,于是撞出了这个CASE :)