解决ORA-01033: ORACLE initialization or shutdown in progress错误

关键字:
ORA-01033,
某个数据文件损坏,如何打开数据库——ORA-01033: ORACLE initialization or shutdown in progress错误

系统环境:
1、操作系统:Windows 2000 Server,机器内存128M
2、数据库: Oracle 8i R2 (8.1.6) for NT 企业版
3、安装路径:C:/ORACLE

错误现象:
因误操作,数据库中某一数据文件被误删,控制面板的Oracle相关服务显示已启动,但用SQL*Plus无法连接,显示以下错误:
ORA-01033: ORACLE initialization or shutdown in progress

模拟现象:
create tablespace test datafile
'c:/test.ora' size 5M
AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED
default storage (initial 128K next 1M pctincrease 0)
/
关闭所有服务stop.bat
net stop "OracleWebAssist ant0"
net stop "OracleOraHome81TNSListener"
net stop "OracleServiceORADB"
shutdown
在操作系统中删除test.ora文件
重新启动服务start.bat
net start "OracleWebAssist ant0"
net start "OracleOraHome81TNSListener"
net start "OracleServiceORADB"
服务里OracleServiceORADB显示已启动,但用SQL*Plus无法连接,
显示ORA-01033: ORACLE initialization or shutdown in progress
解决方法:
先让该数据文件脱机,就可以打开数据库
C:/>svrmgrl
svrmgrl>connect internal
svrmgrl>shutdown
svrmgrl>startup mount
--ARCHIVELOG模式命令,文件名要大写
svrmgrl>alter database datafile 'C:/TEST.ORA' offline;
--NOARCHIVELOG模式命令
svrmgrl>alter database datafile 'C:/TEST.ORA' offline drop;
svrmgrl>alter database open;
--查询数据文件联、脱机状态
SQL> select file#,name,status from v$datafile;
SQL> drop tablespace test;
表空间已丢弃。
丢失联机日志文件
分两种情况处理
1、丢失的是非活动的日志文件;
2、丢失的是当前激活的日志文件。
如果是第一种情况,而发生故障的日志文件组又具有多个成员,可以先将数据库shutdown,然后用操作系统命令将损坏日志文件组中好的日志成员文件把损坏的成员文件覆盖(在同一个日志成员组中的所有日志文件的各为镜象的),如果其物理位置不可用可将其拷贝到新的驱动器上,使用alter database rename file ‘xxxx’ to ‘xxxx’改变文件位置,之后启动数据库,如果正常马上进行一个冷备份。如果损坏的日志组中只有一个日志成员,先mount上数据库,将其转换为noarchivelog模式,执行alter database add logfile member ‘xxx’ to group ‘x’给相关组增加一个成员,再执行alter database drop logfile member ‘bad_file’将损坏的日志文件删除,由于数据库的结构发生变动需要备份控制文件,之后将数据库改回archivelog模式,做一个冷备份。
如果丢失的是当前激活的日志文件,数据库又没有镜像而且当前日志组中所有成员均变为不可用。首先将数据库shutdown abort,从最近的一次全备份中恢复所有的数据文件,将数据库启动到mount状态。如果原来的日志文件物理位置不可用,使用alter database rename file ‘xxx’ to ‘xxx’改变文件的存放位置。然后,使用recover database until cancel命令来恢复数据库,直到提示最后一个归档日志运用完之后,输入cancel。之后用alter database open resetlogs打开数据库,如果没有问题,立即进行一个冷备份。注意!所有包含在损坏的redo log中的信息将会丢失,也就是说数据库崩溃前已经提交的数据有可能会丢失。这对于某些要求很高的应用将会损失惨重,因此应尽量使每个日志组具有多个日志成员,并且放置在不同的驱动器上防止发生介质故障。

请记住本文永久地址:
http://www.javaresource.org/oracle/ORA-01033.html
解决ORA-01033: ORACLE initialization or shutdown in progress错误

Java资源网收集整理,转载请保留出处.  
<think>嗯,用户遇到了Oracle错误ORA-01033,需要解决方案。首先,我要回忆一下这个错误通常是什么原因引起的。根据之前看到的引用内容,这个错误可能是因为数据库突然断电或者异常关闭,导致日志和数据文件不一致,无法正常启动。用户可能需要按照步骤来恢复数据库状态。 首先,应该以管理员身份登录SQL*Plus,使用sysdba权限。命令应该是sqlplus / as sysdba或者sqlplus system/密码 as sysdba。然后,检查数据库的状态,看看是否处于mount或nomount状态。如果数据库没有正常关闭,可能需要执行shutdown immediate,然后再startup。 不过,根据引用中的步骤,可能需要更详细的操作,比如在mount模式下恢复数据文件。例如,执行alter database open,如果遇到问题,可能需要恢复数据文件,使用recover datafile,然后alter database open。此外,用户可能需要检查数据文件的状态,使用select file#, name, status from v$datafile;,然后根据结果进行恢复。 另外,用户提到的引用[4]中有详细的步骤,包括卸载数据库、关闭监听、停止服务等。可能需要按顺序停止服务,再重新启动,确保所有组件正常启动。同时,注意数据文件路径是否正确,如引用[2]中提到的数据文件路径是否存在问题,可能需要确认文件是否存在或是否需要恢复。 还需要提醒用户在操作前备份数据,防止进一步的数据丢失。如果用户不熟悉这些步骤,建议他们联系DBA,或者在测试环境中先尝试。另外,检查日志文件alert.log可能会有更详细的错误信息,帮助诊断问题。 总结步骤应该是:1. 以sysdba登录;2. 检查状态,尝试正常关闭和启动;3. 如果失败,进入mount模式恢复数据文件;4. 重新启动服务和监听。同时,注意环境变量和文件路径是否正确,避免其他问题。</think>### 解决 Oracle 错误 ORA-01033 的步骤 #### 1. **以管理员身份登录数据库** 使用命令行工具(如 `cmd`)以 `sysdba` 权限登录: ```bash sqlplus / as sysdba 或 sqlplus system/密码 as sysdba ``` #### 2. **检查数据库状态** 查看数据库是否处于异常状态: ```sql SELECT status FROM v$instance; ``` 若状态为 `MOUNT` 或 `NOMOUNT`,需进一步修复[^1]。 #### 3. **尝试正常关闭和重启** ```sql -- 强制关闭(若正常关闭失败) SHUTDOWN ABORT; -- 重新启动 STARTUP; ``` 若仍报错,可能是数据文件未同步,需手动恢复[^4]。 #### 4. **挂载数据库并修复数据文件** ```sql -- 进入挂载模式 STARTUP MOUNT; -- 检查损坏的数据文件(如引用[2]中的文件路径) SELECT file#, name, status FROM v$datafile; -- 恢复指定文件(示例:文件编号8) RECOVER DATAFILE 8; -- 打开数据库 ALTER DATABASE OPEN; ``` #### 5. **重启监听和服务** 若数据库恢复后仍无法连接,需重启监听和服务: ```bash lsnrctl stop lsnrctl start -- 根据实际服务名操作(如OracleServiceORCL) net stop OracleServiceORCL net start OracleServiceORCL ``` 确保服务与监听的启动顺序正确。 #### 6. **验证连接** 使用客户端工具(如PL/SQL)重新登录,确认错误是否解决--- ### **注意事项** - **备份数据**:操作前建议备份数据文件(如 `D:/app/.../ORADATA/MyDB/201912.DAT`)[^2]。 - **日志分析**:查看 `alert.log` 文件(位于 `$ORACLE_BASE/diag/rdbms/<实例名>/trace`)定位具体错误- **权限问题**:确保操作账户具有 `sysdba` 权限。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值