今天过来头说老总的windows机器上oracle用pl/sql登录不上去,报ORA-01033错误(ORACLE initialization or shutdown in progress)
问题解决:
第一步:
1、我先打开cmd,试了一下sqlplus / as sysdba发现直接报ORA-12560(TNS: 协议适配器错误)
2、运行services.msc查看ORACLE监听及实例服务(OracleOraDB12Home1TnsListener、OracleService<SID>)有没有启动,发现都是启动的。
按常理来说本地登录根本跟监听没关系,想到会不会是实例名不对,进入注册表查看目前到底用的是哪个实例
3、运行regedit,进入HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0将该环境变量ORACLE_SID就是实例
4、设置环境变量,添加变量名=oracle_sid,变量值=实例名,即可,或者临时设置set ORACLE_SID=实例名
发现这样设置后还是报ORA-12560
5、想到会不会是该机器上以前安装过多个实例,环境变量太多的问题,查看环境变量发现果然是有好多,有多个实例,也安装了客户端,ORACLE如果用客户端连接时必须有监听,因此我们相当于用的是客户端的plsql,应该进入服务器下的sqlplus登录,进入服务器安装的目录,果然登录进去了
6、在用sqlplus users/pwd@ip:port/sid发现登录时报 ORA-01033错误,估计是异常关机导致的,shutdown immeidate,再次startup时出现ORA-00600错误
7、该错误大体信息:ORA-00600: 内部错误代码, 参数: [kcratr_nab_less_than_odr], [1], [99189],[43531], [43569], [], [], [], [], [], [], []
第二步,解决ORA-00600问题
1、SQL> SELECT STATUS FROM V$INSTANCE;
STATUS
------------
MOUNTED
2、尝试直接recover database
SQL> RECOVER DATABASE ;
ORA-00283: 恢复会话因错误而取消
ORA-00264: 不要求恢复
3、尝试不完全恢复
SQL> RECOVER DATABASE UNTIL CANCEL;
ORA-10879: error signaled in parallel recovery slave
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误
ORA-01152: 文件 1 没有从过旧的备份中还原
ORA-01110: 数据文件 1: 'f:\my\DATA\SYSTEM01.DBF'
4、重建控制文件
SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS 'f:/1.txt';
数据库已更改。
5、SQL> SHUTDOWN IMMEDIATE;
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
6、SQL> STARTUP NOMOUNT;
ORACLE 例程已经启动。
7、从刚才备份的控制文件f:/1.txt中copy出并执行:
SQL> CREATE CONTROLFILE REUSE DATABASE "my" NORESETLOGS NOARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 18688
7 LOGFILE
8 GROUP 1 'D:\my\LOG\REDO01.LOG' SIZE 50M BLOCKSIZE 512,
9 GROUP 2 'D:\my\LOG\REDO02.LOG' SIZE 50M BLOCKSIZE 512,
10 GROUP 3 'D:\my\LOG\REDO03.LOG' SIZE 50M BLOCKSIZE 512
11 DATAFILE
12 'D:\my\DATA\SYSTEM01.DBF',
13 'D:\my\DATA\SYSAUX01.DBF',
14 'D:\my\DATA\RBSG01.DBF',
15 'D:\my\DATA\DATA01.DBF',
16 'D:\my\DATA\INDX01.DBF',
17 'D:\my\DATA\DATA02.DBF',
18 'D:\my\DATA\DATA03.DBF',
19 'D:\my\DATA\DATA04.DBF',
20 'D:\my\DATA\INDX02.DBF',
21 'D:\my\DATA\SYSTEM02.DBF'
22 CHARACTER SET ZHS16GBK
23 ;
控制文件已创建。
8、继续尝试恢复
SQL> RECOVER DATABASE ;
完成介质恢复。
9、SQL> ALTER DATABASE OPEN;
数据库已更改。
至此 数据库恢复成功。
在这次恢复中,主要就是重建控制文件,然后直接恢复成功,如果redo有损坏,那么可能需要使用不完全恢复,然后使用resetlogs打开数据库