Oracle数据库备份与恢复(3):OS备份和用户管理(4)
3.3.3 联机热备的恢复
3.3.3.1完全恢复
一般步骤:
1. 通过以下信息,找到故障数据文件
alert.log
background trace file v$recover_file v$recovery_lo通过这两个视图可以了解详细的需要恢复的数据文件与需要使用到的归档日志。
2. 将故障数据文件对应的表空间 offline SQL> alter tablespace xxx offline;
3. restore and recover SQL> host cp …… ……;SQL> [alter database] recover database/tablespace/datafile 'xx';
4. 将表空间 online SQL> alter tablespace xxx online;
3.3.3.2不完全恢复
不完全恢复的方法只能恢复到过去某个时间点/SCN的数据库状态。
一些限制:
1. 必要条件
一个有效的 online/offline 备份(包含所有的数据文件)
自从备份到故障前的所有归档日志,有可能需要控件文件 (所有控件文件丢失,数据库结构已改变) SQL> recover database …… using backup controlfile;
2. 只能恢复到所有备份数据文件的最大 SCN以后,
3. 恢复后需要 resetlog,所以需要在恢复后马上备份
三种不完全恢复的方法:
1. 基于变化的不完全恢复 Change-based Recovery
2. 基于用户干涉(取消)的不完全恢复 Cancel-based Recovery
3. 基于时间的不完全恢复 Time-based Recovery
获得信息:alert.log可以通过 LogMiner获得精确的时间/SCN,一般在备机上恢复,再 exp/imp到生产机。 查看需要恢复的文件,以及相关的提示信息SQL> select * from v$recover_file; SQL> select * from v$datafile;查看二者的 change#, 确定对应的在 v$log_history 中的范围,从而确定需要那个日志文件序列
设置归档日志文件的路径: LOG_ARCHIVE_DEST
设置 log 在不同的路径:SQL> SET LOGSOURCE 'xx';SQL> alter system archive log start to 'xx';
恢复步骤:
1. 关闭数据库,启动到 MOUNT 状态SQL> shutdown; SQL> startup mount;
2. 恢复数据文件、日志文件、归档日志文件SQL> host cp …… ……; SQL> archive log list;SQL> archived log ==>LOG_ARCHIVE_DEST
3. 执行恢复命令 基于变化:SQL> recover database until change 9999;基于时间:SQL> revover database until time '2001-12-01 14:02:23' using backup controlfile;基于取消:SQL> recover database until cancel;
4. 重置日志,恢复后需要马上备份SQL> alter database open resetlogs;