1.问题描述
Oracle服务器断电重启以后无法数据库无法正常连接,使用sqlplus envision/envision连接报错。常见的错误有以下这些:
- ORA-12518: TNS:listener could not hand off client connection
- ORA-12560: TNS:protocol adapter error
- ORA-01034: ORACLE not available
- ORA-27101: shared memory realm does not exist
- ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
- ORA-00600:[4194]
2.基本处理
上述这些ORA报错,基本可以归类为一下几种:
- 环境变量ORACLE_SID是否为prjdb,如果不是就设置环境变量
- TNSListener服务是否启动,如果没有启动就重新启动一下。
- prjdb这个oracle服务是否启动,如果没有启动就启动一下
- 使用dba身份能否连接oralce。
3.查看日志确认问题
将上面的这些问题都过一遍,并且都操作一遍以后发现问题还是没有解决,此时我们可以查看oracle 的alert log。我的alert log的路径为:
D:\app\oracle\diag\rdbms\prjdb\prjdb\trace\alert_prjdb.txt
打开alert log文件,找到日志的最后一行,发现行号是1003417,如下图所示:
接着尝试重启oracle服务,
重启完毕以后再次查看log文件,看看日志有什么错误。当我们找到ora-00600[4194]的时候,就定位到undo表空间文件损坏这个问题。最后解决方法就是重建undo表空间。
4.问题处理步骤:重建undo表空间
4.1思路:
在INITprjdb.ora这个配置文件中将undo表空间指向系统表空间system,然后删除undo表空间,最后在创建undo表空间,最后再在INITprjdb.ora这个配置文件中将undo表空间指向刚刚创建的undo表空间。
4.2查看表空间
select * from v$tablespace;
4.3查看undo表空间
show parameter undo
4.4管理员身份登陆:
sqlplus / as sysdba
4.5创建pfile
create pfile from spfile;
关闭实例
shutdown immediate
修改INITprjdb.ora参数
undo_management= MANUAL
undo_tablespace= SYSTEM
这个可以参考:http://www.xifenfei.com/2111.html
启动数据库
在修改INITprjdb.ora以后,以INITprjdb.ora这个参数文件中的配置启动oracle实例
$SQL> startup pfile=D:\app\oracle\product\11.2.0\dbhome_1\database\INITprjdb.ora ORACLE instance started. Total System Global Area 857903104 bytes Fixed Size 1377952 bytes Variable Size 503318880 bytes Database Buffers 348127232 bytes Redo Buffers 5079040 bytes Database mounted. Database opened.
删除undo表空间
因为重新指定了undo表空间,所以我们可以将undotbs1这个表空间删除
SQL> drop tablespace undotbs1 including CONTENTS;
重建表空间
CREATE SMALLFILE UNDO TABLESPACE UNDOTBS1 DATAFILE ‘D:\app\oracle\oradata\prjdb\UNDOTBS01.DBF‘ SIZE 200M REUSE AUTOEXTEND ON NEXT 10M MAXSIZE 8G;
重新创建pfile
create pfile from spfile;
重启oracle数据库