ora-01033:oracle initialization or shutdown in progress(ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETL)

在尝试使用`ALTER DATABASE OPEN`命令打开Oracle数据库时遇到ORA-01589错误,提示需要使用`RESETLOGS`或`NORESETLOGS`选项。使用`ALTER DATABASE OPEN RESETLOGS`后,又出现ORA-01113和ORA-01110错误,提示数据文件需要介质恢复。通过`RECOVER DATABASE USING BACKUP CONTROLFILE`进行恢复并指定缺失的归档日志文件后,成功完成介质恢复,并最终使用`ALTER DATABASE OPEN RESETLOGS`打开了数据库。
SQL> alter database ope
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项

SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR 位于第 1 行:
ORA-01113: 文件 1 需要介质恢复
ORA-01110: 数据文件 1: 'E:\ORACLE\ORADATA\EYGLE\SYSTEM01.DBF'

SQL> recover database using backup controlfile;
ORA-00279: 更改 1670743 (在 04/17/2008 14:13:16 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\ORACLE\ORA92\RDBMS\ARC00030.001
ORA-00280: 更改 1670743 对于线程 1 是按序列 # 30 进行的

指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
E:\oracle\oradata\EYGLE\REDO01.LOG
ORA-00310: 存档日志包含序列 29;要求序列 30
ORA-00334: 归档日志: 'E:\ORACLE\ORADATA\EYGLE\REDO01.LOG'

SQL> recover database using backup controlfile;
ORA-00279: 更改 1670743 (在 04/17/2008 14:13:16 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\ORACLE\ORA92\RDBMS\ARC00030.001
ORA-00280: 更改 1670743 对于线程 1 是按序列 # 30 进行的

指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
E:\oracle\oradata\EYGLE\REDO02.LOG
已应用的日志。
完成介质恢复。
SQL> alter database open resetlogs;
数据库已更改。
Oracle数据库错误 `ORA-01033: Oracle initialization or shutdown in progress` 通常发生在尝试连接数据库时,数据库正在进行启动关闭操作。此错误表明数据库实例尚未完全打开正在关闭,导致连接请求无法正常处理。 ### 错误原因 - **数据库未完全启动**:当数据库处于启动过程中的某个阶段(如`NOMOUNT``MOUNT`)时,尚未进入`OPEN`状态,此时用户尝试连接将触发此错误。 - **数据库正在关闭**:在执行关闭操作时,数据库会拒绝新的连接请求,以确保数据一致性。 - **服务未启动**:在某些情况下,数据库服务可能未启动,导致连接请求无法处理。 - **监听器问题**:如果监听器配置不正确未启动,也可能导致此错误。 ### 解决方案 #### 1. 确认数据库状态 使用`SQL*Plus``SVRMGRL`(在较新版本中已被`SQL*Plus`取代)检查数据库实例状态: ```sql -- 以sysdba身份登录 sqlplus / as sysdba -- 查看数据库状态 SELECT status FROM v$instance; ``` 如果状态为`STARTED``MOUNTED`,则表示数据库尚未完全打开。 #### 2. 启动数据库 如果数据库尚未打开,执行以下命令启动数据库: ```sql -- 如果数据库处于NOMOUNT状态 ALTER DATABASE MOUNT; -- 如果数据库处于MOUNT状态 ALTER DATABASE OPEN; ``` #### 3. 检查监听器状态 确保Oracle监听器已启动,可以使用以下命令检查监听器状态: ```bash lsnrctl status ``` 如果监听器未运行,使用以下命令启动监听器: ```bash lsnrctl start ``` #### 4. 检查服务状态 在Windows系统中,检查Oracle服务是否启动。主要服务包括: - `OracleService<SID>` - `OracleOraDB<version>TNSListener` 确保这些服务处于运行状态。 #### 5. 检查日志文件 查看`alert_<SID>.log`文件,通常位于`$ORACLE_BASE/diag/rdbms/<SID>/<SID>/trace/`目录下,以获取更多关于启动关闭过程的详细信息[^1]。 #### 6. 重新启动数据库 如果数据库长时间处于中间状态,可以尝试关闭并重新启动数据库: ```sql -- 关闭数据库 SHUTDOWN IMMEDIATE; -- 启动数据库 STARTUP; ``` ### 示例代码:检查数据库状态并启动 ```sql -- 登录并检查状态 sqlplus / as sysdba SELECT status FROM v$instance; -- 如果状态为STARTED,则挂载数据库 ALTER DATABASE MOUNT; -- 打开数据库 ALTER DATABASE OPEN; ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值