oracle数据文件被误删除后的灾难处理方法
环境windows 2003 linux 环境
数据库Oracle 10.0.2.0
linux安装oracle无法启动图形界面时间:2009.12.05下午1310
2013.01.15 下午1430
起因,我以前建立了一个表空间是scsstz,此为四川公司的上市账套,对应的三个数据文件为scsstz01.dbf,scsstz02.dbf,scsstz03.dbf。因这个表空间是以前查账用的,现在不用了。因以前操作过直接删除数据文件的情况,因此今天就先将数据库关闭,然后直接在磁盘上将三个数据文件强行删除(shift+delete)。结果数据库不能启动了。
启动不了后,突然想到要想直接删除磁盘上的数据文件,必须先在数据库正常运行时先执行删除表空间语句,然后再关闭数据库,最后再将磁盘上的数据文件删除。本次直接删除磁盘文件是忘记先在数据库中执行删除表空间语句而直接关闭数据库删磁盘文件,因此在数据库启动时数据库会首先检查控制文件,发现不到这三个数据文件了,因此数据库无法启动。
删除表空间语句:
1.首先看一下是不是已经使用了OMF, sqlshow parameter db_create查看参数db_create_file_dest,如果已经设置则drop tablespace tablespacename 就可以直接删除表空间以及相应的数据文件
2.如果没使用OMF,则:drop tablespace tablespacename including contents and datafiles
若在删除数据文件前也忘记删除的数据文件名是什么,则可以在数据库的启动日志中到alert_orcl.log中可以到提示
alter database open
Sat Dec 05 123335 2009
Errors in file doracleproduct10.2.0adminorclbdumporcl_
ORA-01157 cannot identifylock data file 9 - see DBWR trace file
ORA-01110 data file 9 'DORACLEPRODUCT10.2.0ORADATAORCLSCSSTZ01.DBF'
ORA-27041 unable to open file
OSD-04002 无法打开文件
OS-Error (OS 2) 系统不到指定的文件。
Sat Dec 05 123335 2009
Errors in file doracleproduct10.2.0adminorclbdumporcl_
ORA-01157 cannot identifylock data file 11 - see DBWR trace file
ORA-01110 data file 11 'DORACLEPRODUCT10.2.0ORADATAORCLSCSSTZ02.DBF'
ORA-27041 unable to open file
OSD-04002 无法打开文件
OS-Error (OS 2) 系统不到指定的文件。
Sat Dec 05 123335 2009
Errors in file doracleproduct10.2.0adminorclbdumporcl_
ORA-01157 cannot identifylock data file 12 - see DBWR trace file
ORA-01110 data file 12 'DORACLEPRODUCT10.2.0ORADATAORCLSCSSTZ03.DBF'
ORA-27041 unable to open file
OSD-04002 无法打开文件
OS-Error (OS 2) 系统不到指定的文件。
分析问题
因为数据文件在没有被offline的情况下实物理删除了,导致oracle的数据不一致,因此启动失败.
解决方法
lsnrctl stop
sqlplus conn as sysdba
SQL shutdown abort
SQL startup mount
SQL alter database datafile 'DORACLEPRODUCT10.2.0ORADATAORCLSCSSTZ01.DBF'
offline drop;
数据库已更改。
SQL alter database datafile 'DORACLEPRODUCT10.2.0ORADATAORCLSCSSTZ02.DBF'
offline drop;
数据库已更改。
SQL alter database datafile 'DORACLEPRODUCT10.2.0ORADATAORCLSCSSTZ03.DBF'
offline drop;
数据库已更改。
SQL alter database open;
SQL drop tablespace r_csh_20051001;
lsnrctl start
其中省略了屏幕输出内容.
start 后启动成功。