1、关闭数据库备份数据文件和控制文件
2、打开数据库,drop tablespace indx including contents; (此时的时间是 2011-12-20:11:20:20)
3、关闭数据库,拷贝所有备份的数据文件过来
4、startup mount  
5、recover database until time '2011-12-20:11:20:20'
6、alter database open resetlogs;
此时表空间indx已找到
但是:select * from v$datafile 发现indx所对应的数据文件MISSING000011,原因是此时的控制文件里和SYSTEM表空间里的信息不一致,请问该如何解决这个问题?
-----------------------------------------------------------
在网上查找了相关信息,说是要重建控制文件,我做了如下测试:
在上面第3步中,把备份的控制文件和数据文件一同拷贝过来,加载数据库后,没有需要恢复的数据文件。因为控制文件中的SCN和数据文件中的START_SCN一致。请问这个时候该怎样做?重建控制文件是在哪步发生的,如何重建? 

解决方案 »

  1.   

    1.你的数据库是在归档模式下吗?
    2.一般来说 执行恢复 步骤是 
    startup mount;
    restore database;
    recover database until time to_date();
    alter database open resetlogs;看你现在的错误提示, 应该是没有针对那个文件没有找到,如果你的数据库有打开的话,
    select * from dba_datafiles ;
    select * from dba_tablespace ;看看你删除的表空间的状态 。 是不是online 或者active的。
    如果是recover ,那么需要进行文件恢复。重建控制文件是在 startup nomount;然后再进行控制文件重建。 
      

  2.   

    是归档模式的,我也是在NOMOUNT前重建控制文件的,但这时会有问题,如果使用备份的控制文件,这个控制文件里的SCN号会和备份的数据文件SCN号相同,那么就不用恢复数据文件了
      

  3.   

    其实这个本身就不应该需要重建控制文件, 而是只需要
    startup mount
    restore database;
    recover database untile date ‘’
    alter database open resetlogs 应该就可以了。
      

  4.   

    restore database时除了拷贝备份的数据文件外,还要restore控制文件吗?