解决方案:先用sqlplus连接sys用户,执行shutdown immediate;然后startup restrict;接着执行alter database open upgrade;如果还是报错,检查alert日志,可能是control file问题,用alter database mount;然后alter database open upgrade;远程处理时,确保rsh或ssh连通,用dbca或手动脚本。
故障原因分析
ORA-39702: database not open for upgrade/downgrade这个错误通常发生在数据库启动时处于NOARCHIVELOG模式,或者试图升级但数据库没有正确mount。用户反馈:在执行dbupgrade脚本时直接报这个错,没有进入upgrade模式。
步骤1:远程登录检查
远程用ssh root@server,su - oracle,export ORACLE_SID=orcl,sqlplus / as sysdba,shutdown abort; startup nomount; alter database mount;。
修复操作指南
1. sqlplus /nolog
2. conn /as sysdba
3. shutdown immediate;
4. startup mount;
5. alter database open upgrade;
6. @?/rdbms/admin/catupgrd.sql
如果远程卡住,用screen -S upgrade,nohup sqlplus &。
另一个案例分享
数据库从11g升级到12c,报ORA-39702,直接原因是没有open upgrade。解决:startup restrict upgrade;但restrict不够,要upgrade参数。日志显示database registered for downgrade,但实际要upgrade。
降级情况处理
降级时报同样错:alter database open downgrade;确保兼容性参数设置如COMPATIBLE=11.2.0。
预防措施
升级前备份spfile,检查$ORACLE_HOME版本匹配,远程用dgmgrl查看standby状态,如果rac环境先stop crs。
FAQ
Q: 为什么远程处理ORA-39702总失败?
A: 检查防火墙,端口1521,rsh启用,或用ssh隧道。
Q: upgrade后还能回滚吗?
A: 是,用备份的controlfile,alter database open resetlogs downgrade。
Q: 非root用户能修复吗?
A: 可以,oracle用户sqlplus as sysdba,需ORACLE_HOME环境对。
Q: 报错伴随ORA-01092怎么处理?
A: 先startup restrict,忽略实例恢复,直接open upgrade。