https://blog.csdn.net/rrrrroy_ha/article/details/80601497
今天中午连Oracle调试程序,电脑太卡了,一气之下强制关机,再连Oracle的时候吓傻了,捣鼓了一下午,刚才总算是弄好了,提醒各位程序连Oracle的时候千万别强制关机!都是手贱惹的祸!下面开始讲解决办法。
——————————————————分割线——————————————————
电脑强制重启后,打开Oracle登录,提示如下:
造成ORA-01033的原因有很多,比如断电、电脑强制重启,或者数据库文件误删等,这些导致oracle要么卡在初始化中,要么关闭了,我们要做的就是重启它。
一.检查oracle服务是否启动。
如果没有启动,就手动开启。如果启动,手动重启后,再尝试连接Oracle。(看到网上有说重启好了的,姑且提醒一下各位,说不定碰巧解决了呢)
在下面内容开始之前,本人测试发现,当时程序连接的是orcl的实例,只有以orcl连接时才提示“ORA-01033”错误,其他连接没有影响,下面的操作其实就是为了修复orcl并重启。
二.检查注册表oracle实例
打开regedit,在HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb11g_home1中检查ORACLE_SID是否为orcl。(看网上的意思是要修改成报错的实例名?)
三.利用cmd命令重启数据库
1.打开cmd,以管理员身份登录orcl。
2.尝试打开数据库 alter database open,提示“ORA-00600”错误。ORA-00600[kcratr_nab_less_than_odr]故障解决,从这篇文章大致得出,数据库需要恢复到rba到70153,但是因为某种原因实例恢复的时候,只能利用1 thread 329 seq#,恢复rba到70139,从而导致数据库无法正常open。
3.接着根据2中的文章提示,输入recover database until cancel 尝试不完全恢复,可以看到返回四条错误,这里大致是说,恢复成功,但有一个文件SYSTEM01.DEF没有从旧的备份中恢复,打到这里的时候本人当时不明白,也就没有在意,后来才发现其实这里是说的介质恢复,把这个文件恢复了,数据库就能正常打开了(后面操作了那么多,还是回到了这个文件上)。
4.关闭重启数据库。输入 shutdown immediate(或shutdown normal) startup nomount,又报ORA-12514错误。可参考[Oracle]startup mount时报ORA-12514错误的解决方法。
这里再将文章中的内容描述一下:
找到listener.ora文件,添加如下红框中的内容:
在cmd中,输入“lsnrctl stop”“lsnrctl start”重启侦听服务,下面是cmd中的内容
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
C:\Users\Administrator>lsnrctl stop
LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 06-6月 -2018 20:4
6:42
Copyright (c) 1991, 2010, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))
命令执行成功
C:\Users\Administrator>lsnrctl start
LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 06-6月 -2018 20:4
7:00
Copyright (c) 1991, 2010, Oracle. All rights reserved.
启动tnslsnr: 请稍候...
TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Production
系统参数文件为D:\app\Administrator\product\11.2.0\dbhome_1\network\admin\listene
r.ora
写入d:\app\administrator\diag\tnslsnr\3BAZ7JK7QG9VRB0\listener\alert\log.xml的日
志信息
监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Produ
ction
启动日期 06-6月 -2018 20:47:05
正常运行时间 0 天 0 小时 0 分 5 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 D:\app\Administrator\product\11.2.0\dbhome_1\network\a
dmin\listener.ora
监听程序日志文件 d:\app\administrator\diag\tnslsnr\3BAZ7JK7QG9VRB0\list
ener\alert\log.xml
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
服务摘要..
服务 "CLRExtProc" 包含 1 个实例。
实例 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "orcl" 包含 1 个实例。
实例 "orcl", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
C:\Users\Administrator>
上面其实就两句话:lsnrctl stop 和 lsnrctl start,但要注意不是在sql中输入,如果在cmd中登录oracle,需要exit退出后,才能执行,且不要输入“;”(不要被上面文章中的格式误导),这样监听就修复好了。
5.再次登录orcl实例,启动数据库后,可以看到例程已经启动。之后本人重复 shutdown 和startup,后提示“装载完毕”,输入打开命令后,提示“ORA-01589”异常。
6.介质恢复。关于“ORA-01589”可参考非正常关机,oracle启动报错,要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项 和 ORA-01589错误 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项。两文章都表明了用日志文件恢复的办法。
按照文章中的提示输入,alter database open resetlogs 果然提示有一个文件需要介质恢复,正是上面3中提到的SYSTEM01.DEF,接着到输入指定日志的地址,如果不知道日志在哪,可以去参考的SYSTEM01.DEF目录下,如下图,可以看到有.LOG后缀的日志文件,未恢复的情况下,修改时间是不同的,找最新的文件即可,未恢复前时间最新的是REDO02.LOG。按照提示输入完成。
控制台提示“数据库已更改”,这样,数据库就可以登录了。虽说手贱本可以避免,但能解决问题,学到知识还是可喜可贺的。
后记
有时候用PL/SQL登录时,会出现连接界面未响应或提示监听程序未启动等,打开服务,可以看到Oracle当前已启动的服务,重启一遍,如果遇到重启失败的情况,可尝试注销后再重启。