背景
由于不熟悉,同事在oracle R2中创建表空间失败后,直接删除了dbf文件,再使用
alter tablespace tablespacenaem drop datafile datafile ;
drop tablespace tablespacename including content and datafiles;
发现无法再正常执行。于是删除了dba_tablespaces中表空间数据,delete from dba_tablespaces。
解决步骤
1、 恢复dbf文件
recover datafile XXX.dbf;
2、 恢复dba_tablespaces中数据
select * from ts$
会发现删除的记录还在,而且online状态为3
使用Update 设置online属性为1,使用id
select * from dba_tablespaces
检查dba_tablespaces中删除的记录是否应经生成
3、 将dbf文件文件设为online
alter database datafile '*****' ONLINE;
解释
由于dba_tablespaces是建立在ts$上的视图,但delete dba_tablespaces 中的一条数据时,并没有同时删除ts$中的数据,只是将其online状态改为了3,同理删除dba_ datafiles时,会在file$将其online 设置2
参考
http://www.anysql.net/dba/delete_dba_tablespaces.html
http://www.itpub.net/viewthread.php?action=printable&tid=801492
http://hi.baidu.com/ancen_ye/blog/item/0fdd3f0ad7ac7a35b1351db9.html