热备份模式下,使用用户管理的备份,在数据库运行过程中数据库文件丢失,
请问如何恢复啊?

解决方案 »

  1.   

    恢复要求很高,要根据场景确定.下面是一个笔记,列举了几种情况,供参考5、用户管理的完全恢复
       5.1 完全恢复简介
       5.1.1 诊断数据文件介质失败
       1、诊断数据文件介质失败
       启动数据库的时候dbwr 报错误:ora-01157  ora-01110
       2、在open状态下诊断数据文件损坏,损坏的数据文件在检查点时自动被数据库脱机。在查询相关对象时
       select * from emp  (全表扫描)  ora-000376 ora-01110
       3、在open下诊断数据块损坏。只有涉及到损坏的块,就会报错误
       select * from emp  (全表扫描)  ora-01578 ora-01110
       5.1.2 转换数据文件到其它磁盘
       在mount时,可以改变任何文件的位置,在open时,不能改变system的数据文件
       1、在mount下改变文件位置
       host copy d:\aa e:\dd
       alter database rename file 'd:\aa' to 'e:dd'
       2、在open状态下改变文件位置。
       alter tablespace test offline 或者 alter database datafile 'd:aa' offline
       alter database rename file 'd:\aa' to 'e:dd'
       alter tablespace test rename datafile  'd:\aa' to 'e:dd'
       
       5.1.3 完全恢复命令
       1、recover database (sql*plus 命令 对应的sql命令是 alter database recover database ) 
       该命令恢复多个数据文件,只能在mount下执行。
       2、recover tablespace (sql*plus 命令 对应的sql命令是 alter database recover tablespace ) 
       这个命令只能在open下执行
       3、recover datafile (sql*plus 命令 对应的sql命令是 alter database recover datafile ) 
       即可以在open下执行也可以在mount下执行
       5.1.4 应用归档日志
       当执行用户管理的完全恢复时,需要英国归档日志和重做日志的事物变化。如果归档日志、重做日志存在相同的事物变化
       那么只应用重做日志的变化;应用重做日志是可以指定名称,也可以应用oracle建议的日志
       1、应用默认目录的归档日志
       recover datafile 5 
       2、应用指定位置的归档日志
       recover datafile 5 from 'c:\test'
       3、自动应用归档日志
       方法1:recover datafile 5  命令后选择auto选项
       方法2:set autorecovery on
       方法2:recover automatic datafile 5 
       5.1.5 察看恢复文件
       1、列出需要恢复的数据文件
       首先把备份文件放到指定位置。然后查询序列号。这是查询到的是备份文件的scn。根据这个scn可以确定重哪个
       日志文件开始应用
       select * from v$recover_file; 
       2、列出日志历史信息
       select * from v$loghist where 11231 between first_change# and switch_change#;
       3、列出恢复需要使用的归档日志
       显示所有的归档日志 
       select * from v$recovery_log 
       
       
       5.3 在mount状态下恢复数据文件
       这种方法可以恢复任何数据文件,不过需要数据库处于mount状态;其实只有system的数据文件必须在mount
       下恢复,其他文件可以在open状态下恢复。在mount恢复方法如下(假设system表空间文件有问题):
       1、装载数据库
       conn / as sysdba
       startup force mount
       2、确定需要恢复的文件
       select file#,error from v$recover_file;
       3、复制文件备份
       host copy d:\backup\system.dbf  d:\oracle\orcl\
       如果磁盘损坏,可以将备份文件复制到可用位置
       host copy d:\backup\system.dbf  d:\oracle\orcl\
       alter database rename file old_namepath to  new_namepath
       4、恢复数据文件
       recover datafile 1  或者使用命令 alter database recover datafile 1
       5、打开数据库
       alter database open 
       
       5.4 在open状态下恢复关闭后意外丢失的数据文件   
       如果在数据库关闭的情况下文件意外损坏,那么数据库无法打开。假设user1.dbf丢失。为了减少停机时间,在open
       下恢复该文件
       1、装载数据库
       如果文件无法访问,数据库是否无法打开的,因此先装载。
       startup force mount
       2、确定需要恢复的文件
       select file#,error from v$recover_file;
       3、使损坏文件脱机
       alter database datafile 4 offline;
       4、打开数据库
       alter database open 
       5、复制文件到指定位置
       host copy d:\backup\system.dbf  d:\oracle\orcl\
       如果磁盘损坏,可以将备份文件复制到可用位置
       host copy d:\backup\system.dbf  d:\oracle\orcl\
       alter database rename file old_namepath to  new_namepath
       6、恢复数据文件
       recover datafile 4
       7、使文件联机
       alter database datafile 4 online;
       
       
       5.4 在open状态下恢复意外打开时丢失的数据文件
       在数据库处在open时,如果system的数据文件坏了,系统会自动关闭。如果其他数据文件坏了。那么只有该文件
       无法访问,在执行sql语句的时候会报错误
       select * from temp_t
       
       ora-00376: file 4 cannot be read at this time
       ora-01110: data file 4 
       恢复该文件的方法如:
       1、确定需要恢复的数据文件
       select file#,error from v$recover_file;
       2、使数据文件脱机
       alter database datafile 4 offline;
       3、复制文件的备份到指定位置或者通过rename改变原文件位置
       4、恢复表空间或数据文件
       recover datafile 4
       5、市表空间、数据文件联机
       alter database datafile 4 online;
       
       5.5、在open状态下恢复未备份数据文件
       在archivelog下,如果dba增加了新的数据文件,并且未备份新增加的数据文件,如果该文件损坏,dba可以恢复该文件
       但前提是从该文件建立到损坏时的所有归档文件都必须存在。
       1、装载数据库
       startup force mount
       2、确定需要恢复的数据文件
       select file#,error from v$recover_file;
       3、使数文件脱机
       alter database datafile 6 offline
       4、打开数据库
       alter database open
       5、重新建立数据文件
       alter database create datafie 'd:\aa'; 
       如果需要换磁盘
       alter database create datafie 'e:\aa' as  'd:\aa'; 
       6、恢复数据文件
       recover datafile 6不完全恢复---------------------
    6 用户管理的不完全恢复
      恢复数据库到失败时刻前的某一个时刻,这种恢复方式只适合归档模式数据库。
       学会基于时间点的不完全恢复
       学会基于取消的不完全恢复
       学会基于scn的不完全恢复
       学会基于控制文件副本的不完全恢复
       
       要学会判断场景,选择恢复方法
       
       一般步骤
          1、关闭数据库,并备份当前数据库(重要:避免恢复失败有破坏了现场)
          2、restore all datafiles. do not restore the control file,redo logs,password file,or parameter file
          3、mout the database
          4、recover the datafiles to a point before the time of failure
          5、open the database with resetlogs
          6、perform a closed database backup.(重要:为以后的恢复打基础)
       
      6.1.1 不完全恢复分类
      1、基于时间恢复
      如果不知道时间,可以通过logminer分析归档日志,取得操作时间
      适用于 :误删除表、误截断、体积错误数据
      ora10g开始可以使用flashback功能
      2、基于取消恢复
      使用于在完全恢复时,发现某一个日志丢失的情况。恢复过程只能进行到被迫取消点。
      3、基于scn恢复
      恢复到某一个scn。如果用户知道具体的scn 就可以使用这种方法
      4、基于备份控制文件恢复
      使用备份的控制文件,将数据库恢复到备份点和失败点之间的某一点。
       适用于: 表空间被意外删除;所有控制文件全部丢失
      6.1.2 不完全恢复命令
      1、recover database until time
      基于时间恢复的命令,时间格式必须为 yyyy-mm-dd hh24:mi:ss,用nls_data_format 设置时间格式
      2 recover database until change
      change 后是scn ,只适用于基于scn的恢复
      3 recover database until cancel
      基于取消的恢复
      4 recover database .... using backup controlfile
      使用控制文件的恢复
      
      
      6.2 基于时间的恢复
      如果不知道要恢复到那个时间,可使用logminer 分析操作的时间 方法:
      a   shudown immediate
      b   startup mount
      c   host copy backup_file to now_file
       通过v$recover_file可以查看数据文件的备份时间
      d   recover database until time '2008-06-06 23:32:12' 
      
      e 以 resetlogs 方式打开数据库
      alter database open  resetlogs
      
      注意由于不完全恢复后,必须进行resetlogs 操作。这个操作使之前的备份不能直接使用,因此必须在resetlogs
      后立即重新备份数据库。
      alter database begin backup
       copy database files to other directory
      alter database end backup 
      alter database backup controlfile to 'd:\adfad\adfad';
      alter system archive log current 
      
      6.3 基于scn的恢复
      确定scn  select current_scn from v$database;
      
      方法如下:
      a  shutdown immediate
      b  startup mount
      c  host copy backup_file to now_file 
      d  recober database until change  123143
      e  alter database open resetlogs
      注意由于不完全恢复后,必须进行resetlogs 操作。这个操作使之前的备份不能直接使用,因此必须在resetlogs
      后立即重新备份数据库。
      alter database begin backup
       copy database files to other directory
      alter database end backup 
      alter database backup controlfile to 'd:\adfad\adfad';
      alter system archive log current   
      
      6.4 基于取消的恢复
      方法如下:
      a  shutdown immediate
      b  startup mount
      c  host copy backup_file to now_file 
      d  recober database until cancel
      e  alter database open resetlogs
      注意由于不完全恢复后,必须进行resetlogs 操作。这个操作使之前的备份不能直接使用,因此必须在resetlogs
      后立即重新备份数据库。
      alter database begin backup
       copy database files to other directory
      alter database end backup 
      alter database backup controlfile to 'd:\adfad\adfad';
      alter system archive log current   
      
      
      6.5 基于控制文件的恢复
      在表空间删除,后者所以文件都损坏时使用,这种恢复方法。使用这种方法,需要控制文件备份和
      表空间被误删除的时间
      
      方法如下:
      a  shutdown immediate
      b  复制所有控制文件日志文件的备份到当前位置
      c  startup
      d  recober database until time  '2008-06-06 23:32:12'  using backup controlfile
      e  alter database open resetlogs
      注意由于不完全恢复后,必须进行resetlogs 操作。这个操作使之前的备份不能直接使用,因此必须在resetlogs
      后立即重新备份数据库。
      alter database begin backup
       copy database files to other directory
      alter database end backup 
      alter database backup controlfile to 'd:\adfad\adfad';
      alter system archive log current     
      

  2.   

    1.首先确认丢失的是什么文件,如果是用户数据文件,则可以先将表空间脱机
    如果是system文件,或者undo文件,那么需要shutdown 进行,如果是临时表空间数据文件,那么没关系,重建临时表空间,再设置
    2.如果是用户表空间 ,基本上是
    (1)alter database datafile xx offline;
    (2)然后将备份的数据文件拷贝到目标目录。
    (3)recover tablespace xx ;依据情况是否是不一致性的恢复
    (4) alter tablespace xx online;