之前创建了一个表空间,然后今天不小心把表空间文件给删除了。然后用pl/sql连接数据库的时候,报ORA-01033错误。ora-01033:oracle initializationg or shutdown in progress
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
C:\Users\Administrator>set ORACLE_SID=orcl
C:\Users\Administrator>sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 10月 23 16:09:58 2012
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> shutdown immediate
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 293601280 bytes
Fixed Size 1248600 bytes
Variable Size 88081064 bytes
Database Buffers 197132288 bytes
Redo Buffers 7139328 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 7 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 7: 'D:\TBS01.DBF'
SQL> shutdown immediate
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 293601280 bytes
Fixed Size 1248600 bytes
Variable Size 88081064 bytes
Database Buffers 197132288 bytes
Redo Buffers 7139328 bytes
数据库装载完毕。
SQL> recover datafile 2
ORA-00283: 恢复会话因错误而取消
ORA-00264: 不要求恢复
SQL> recover datafile 7
ORA-00283: 恢复会话因错误而取消
ORA-01110: 数据文件 7: 'D:\TBS01.DBF'
ORA-01157: 无法标识/锁定数据文件 7 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 7: 'D:\TBS01.DBF'
SQL> startup
ORA-01081: 无法启动已在运行的 ORACLE - 请首先关闭它
SQL> recover datafile 7
ORA-00283: 恢复会话因错误而取消
ORA-01110: 数据文件 7: 'D:\TBS01.DBF'
ORA-01157: 无法标识/锁定数据文件 7 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 7: 'D:\TBS01.DBF'
SQL> select flashback_on from vdatabase
2 ;
select flashback_on from vdatabase
*
第 1 行出现错误:
ORA-01219: 数据库未打开: 仅允许在固定表/视图中查询
SQL> recover datafile 'd:/tbs01.dbf'
ORA-00283: 恢复会话因错误而取消
ORA-01110: 数据文件 7: 'D:\TBS01.DBF'
ORA-01157: 无法标识/锁定数据文件 7 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 7: 'D:\TBS01.DBF'
SQL> select file_name,file_id,tablespace_name from dba_data_files;
select file_name,file_id,tablespace_name from dba_data_files
*
第 1 行出现错误:
ORA-01219: 数据库未打开: 仅允许在固定表/视图中查询
SQL> col file_name format a100;
SQL> select file_name,file_id,tablespace_name from dba_data_files;
select file_name,file_id,tablespace_name from dba_data_files
*
第 1 行出现错误:
ORA-01219: 数据库未打开: 仅允许在固定表/视图中查询
SQL> startup mount;
ORA-01081: 无法启动已在运行的 ORACLE - 请首先关闭它
SQL> alter session set nls_language=american;
Session altered.
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01157: cannot identify/lock data file 7 - see DBWR trace file
ORA-01110: data file 7: 'D:\TBS01.DBF'
SQL> startup nomount;
ORA-01081: 无法启动已在运行的 ORACLE - 请首先关闭它
SQL> alter database mount;
alter database mount
*
ERROR at line 1:
ORA-01100: 数据库已装载
SQL> alter session set nls_language=american;
Session altered.
SQL> alter database datafile 'd:\TBS01.dbf' offline drop;
Database altered.
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01157: cannot identify/lock data file 8 - see DBWR trace file
ORA-01110: data file 8: 'D:\TBS02.DBF'
SQL> alter database datafile 'd:\TBS02.dbf' offline drop;
Database altered.
SQL> alter database datafile 'd:\TBS03.dbf' offline drop;
Database altered.
SQL> alter database datafile 'd:\TBS04.dbf' offline drop;
Database altered.
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01157: cannot identify/lock data file 11 - see DBWR trace file
ORA-01110: data file 11: 'D:\TBS05.DBF'
SQL> alter database datafile 'd:\TBS05.dbf' offline drop;
Database altered.
SQL> alter database open;
Database altered.
SQL>
至此,修复完成,可以正常登陆。
原理:数据库启动到nomount状态,找到初始化参数文件(inittestDB.ora),根据这个定位到控制文件。控制文件中记录着数据库的文件结构信息(当然不止文件结构信息),比如:有哪些数据文件,日志文件数据文件的状态(online offline),但数据库在open 的时候并不查看offline状态下的datafile,所以将datafile offline,数据库不检查这个数据文件里,就可以打开。注意这里的数据文件只是用户数据文件,若是系统数据文件,另要考虑了。数据库启动到mount状态了,这时实例和硬盘上的数据库要关联了。处于这个状态时,可执行些管理型的任务,比如恢复。
参考地址:
http://hi.baidu.com/longredhao/item/2e43b035fa731fd96c15e9ed