分类: Oracle
2009-08-24 16:46:52
1. 数据文件无需恢复的情况:
下午在操作数据库时,一不小心将一个看着不顺眼的文件删除了,按下回车按钮后才想起这是Oracle数据库的一个数据文件。还好这个数据库是测试用的,数据文件丢了关系不大,不过还是惊出一身冷汗,使用rm -rf前一定要三思啊!
下面参照网络上的文章将误删除的数据文件从数据库中去除,使其不会影响数据库的正常启动。
被删除的数据文件:/u02/oracle/oradata/SM_SPACE
属于表空间:SM_SPACE
属于用户:SM
注:如何查看当前的数据文件名:SQL > select name from v$datafile;
1.1 将数据文件剥离:
如果数据库未启动,将其启动到mount状态:
SQL> startup mount;
如果数据库正在运行中,则直接进行下面的操作:
SQL> alter database datafile '/u02/oracle/oradata/SM_SPACE' offline drop;
/u01/app/oracle/product/
datafile offline drop 与 datafile offline 区别:
归档模式下是没有区别的,非归档模式必须用offline drop。
打开数据库:
SQL> alter database open;
1.2 删除表空间
查看表空间:
方法一:
SQL> select tablespace_name,status from dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------ ---------
SYSTEM ONLINE
UNDOTBS1 ONLINE
SYSAUX ONLINE
TEMP ONLINE
USERS ONLINE
PA_DATA ONLINE
PA_INDEX ONLINE
SM_SPACE ONLINE
方法二:
select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size
from dba_tablespaces t, dba_data_files d
where t.tablespace_name = d.tablespace_name
group by t.tablespace_name;
TABLESPACE_NAME TS_SIZE
------------------------------ ----------
SYSAUX 360
UNDOTBS1 145
SM_SPACE
MINGYA2 7000
USERS 479
SYSTEM 630
PA_DATA 50
PA_INDEX 50
删除表空间:
SQL> drop tablespace SM_SPACE including contents;
2、如果数据文件需要恢复
2.1 如果有冷备份的话:
进入mount状态,然后将备份的数据文件拷到目的目录中,然后使用命令,
SQL > alter database open.
如果有热备份的话:
进入mount状态,再使数据文件脱机,然后将备份的数据文件拷到目的目录中,然后使用命令,
SQL > recover datafile '文件名'