ORA-12560、ORA-01033、ORA-00600

今天过来头说老总的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打开数据库

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章