以下是一个在本地磁盘上恢复表空间的例子(在sqlplus中用sys用户操作):
首先查看实例中所有的数据文件及所在的位置 :
select file_id ,file_name, tablespace_name fromdba_data_files;
对相应表空间进行联机热备:
alter tablespace mdm begin backup;(如果数据库运行在noarchivelog模式就会出现ORA-01123错误)
用操作系统命令备份此表空间文件:
host copy e:\oracle\product\10.2.0\oradata\orcl\mdm.dbf d:\oracle\test_backup\;
结束热备:alter tablespace mdm end backup;
这时立即关闭数据库:shutdown immediate;
然后在操作系统中删除mdm表中间中的数据文件e:\oracle\product\10.2.0\oradata\orcl\mdm.dbf
接着启动数据库:startup;
这时在提示“数据库加载完毕”的情况下出现
"ora-01157”和 "ora-01110"错误(无法标示\锁定数据文件6 -请参阅dbwr跟踪文件......)
刚才数据库已经启动到mount状态了,在此状态下把错误提示中文件号为6的数据文件脱机:
alter database datafile 6 offline;
把数据库状态改为打开:alter database open;
查看数据文件号为6的是否处于脱机状态: select file#,name,status from v$datafile;
重新制定表空间的数据文件到刚才热备的文件:alter tablespace rename datafile
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\MDM.DBF' TO 'D:\ORACLE\TEST_BACKUP\MDM.DBF';
(注意,这里引号里的字符要大写)
然后对此文件进行恢复操作: recover datafile 6;
提示“完成介质恢复”。
最后把文件号为6的数据文件修改为联机:alter database datafile 6 online;
查看联机后的情况:select file#,name,status from v$datafile;
至此,搞定。