现在的位置: 首页 > 数据库 > 正文

Oracle热备份恢复(归档模式数据库恢复)

2014年11月17日 数据库 ⁄ 共 3341字 暂无评论 ⁄ 阅读 2,133 次
文章目录

联机恢复首先需要把要恢复的表空间或数据文件设置为OFFLINE状态,然后修复备份文件(将备份文件复制回数据库原位置,英文称Restore),再恢复归档日志文件和重做日志文件中提交的数据(即从备份到系统崩溃期间的数据,这样才保证了数据的不丢失,英文称Recover),最后将表空间或数据文件设置为ONLINE即完成恢复。

归档模式恢复优缺点

优点:

  • 恢复期间不需要关闭数据库,可保障非故障数据正常服务;
  • 不会造成数据丢失;
  • 仅需要恢复出问题的数据文件,降低恢复时间;

缺点:

  • 数据库必须运行在归档模式下,会增加系统内存、CPU和磁盘消耗;
  • 必须保证归档日志文件完好,否则会造成数据丢失,增加了管理维护负担;
  • 对DBA技能要求较高,一旦出错可能是灾难性的。

RECOVER命令详解

原理:

  • 将从备份到系统崩溃这段时间内的所有提交数据由归档日志文件和联机重做日志文件中还原成数据文件所需要的数据库,就也叫前滚(Roll Forward)。
  • 然而,此时数据文件中包含所有已commit数据,也可能包含没有commit的数据。系统使用回滚数据块回滚未提交的数据,这也叫回滚或事务恢复(Transaction Recovery)。

使用:

Recover是SQL*PLUS中的命令,使用语法前可加alter database也可不加,一般建议不加。Oracle提供了3种恢复方法,语法如下:

  • recover [automatic] database,该命令只能在数据库加载状态(mount)使用;
  • recover [automatic] tablespace “表空间号或名”,该命令只能在数据库打开(open)时使用;
  • recover [automatic] datafile “数据文件号或名”,该命令在mount或open时均可使用;

其中,automatic是可选参数,表示自动搜索和恢复归档日志文件及重做日志文件中提交的数据。

归档模式恢复知识点

表空间和数据文件恢复区别:

  • 将表空间设为offline时其表空间状态及对应的数据文件状态都是offline,将数据文件设为offline时其对应的数据文件状态是recover而表空间状态是online。
  • 表空间offline后可直接再online,但数据文件offline后必须recover后才能online。
  • 在进行维护时建议优先采用表空间offline,因为这样操作清晰简单。

RECOVER归档日志使用:

在大型生产系统中,数据恢复时需要许多归档日志文件,手工获取比较繁杂,一般采用自动获取所需的归档日志文件,即在恢复时采用automatic关键字,如:recover automatic datafile 6。或者可以在开始恢复前设置SQL*PLUS环境,如set autorecovery on。

归档模式数据恢复(热备份数据恢复)

归档模式数据恢复的应用环境可以分为4种:

  • 故障数据未造成数据库关闭;
  • 故障数据造成数据库关闭但可打开;
  • 故障数据没有备份文件;
  • 故障数据造成数据库关闭不可打开;

在数据库崩溃时,DBA要做的第一件事不是恢复数据库而是以最快速度启动数据库,哪怕带着问题,之后才应考虑查找问题和恢复数据文件等。不同情况下步骤稍有不同,具体如下:

情形1:故障数据未造成数据库关闭恢复步骤

1)使用数据字典dba_data_files获取要恢复的数据文件与所对应的表空间的状态信息,使用命令:select file_id,file_name,tablespace_name from dba_data_files;。

2)使用数据字典dba_tablespaces或v$datafile获取要恢复的表空间或数据文件状态,使用命令:select tablespace_name,status from dba_tablespaces;或select file#,status from v$datafile;,因为Oracle服务器有时会自动将有问题的数据文件设置为脱机状态。

3)若表空间或数据文件处于联机状态(online),将其设为脱机状态offline,使用命令:alter tablespace “表空间序号或名称” offline;或alter database datafile “数据文件序号或名称” offline;。将表空间设置为脱机时,该表空间对应的所有数据文件都脱机,但将表空间中一个数据文件设为脱机时,只有这个数据文件中的数据不能访问,其他数据文件仍可访问。

4)使用操作系统复制命令将备份文件复制到数据库原位置,若原位置磁盘损坏则将备份文件放到其他磁盘上,然后使用命令修改参数文件:alter database 。

5)使用RECOVER命令将归档日志和重做日志中所有提交的数据恢复到数据文件,恢复表空间则使用命令:recover tablespace “表空间序号或名称”;,恢复数据文件则使用命令:recover datafile “数据文件序号或名称”;。

6)将表空间或数据文件恢复联机状态online,使用命令:alter tablespaces online;或alter datafile online;。

7)确认恢复,使用数据字典dba_data_files确认数据文件和表空间对应,使用数据字典dba_tablespaces或v$datafile确认表空间或数据文件处于联机状态。

情形2:故障数据造成数据库关闭但可打开恢复步骤

与故障数据未造成数据库关闭类似,不过,之前要先尽快恢复数据库打开。

1)使用命令startup mount加载数据库。因为损坏的数据文件不能打开,所以数据库无法打开,只能先加载。

2)使用数据字典v$datafile获取要恢复的数据文件状态。这种情况下不能使用数据字典dba_tablespaces,因为该字典只能在数据库开启状态下使用。

3)将故障数据文件设置为脱机,使用命令:alter database datafile “数据文件序号或名称” offline;,这种情况下也不能用alter tablespace命令,因为数据库还没有open。

4)打开数据库,使用命令alter database open;。

5)备份文件复制(详见情形1);

6)使用RECOVER(详见情形1);

7)恢复联机状态(详见情形1);

8)确认恢复(详见情形1);

情形3:故障数据没有备份文件

这种情况发生在从未备份或备份文件丢失的情况下,必须先保证归档日志的完整完好性,然后先重建数据文件再恢复。数据文件重建有两种情况,如:

  • 原文件所在磁盘可用:alter database create datafile “原文件名”;
  • 原文件成在磁盘损坏:alter database create datafile “原文件名” as “新文件名”;

恢复步骤:

1)若数据库处于打开状态,则使用dba_data_files获取数据文件与表空间信息,dba_tablespaces获取表空间状态,若表空间处于联机状态则设置为脱机。

若数据库处于关闭状态,先使用命令startup mount加载数据库,然后将出问题的数据文件设为脱机,再open数据库。

2)使用alter database create datafile命令重建数据文件;

3)使用RECOVER(详见情形1);

4)恢复联机状态(详见情形1);

5)确认恢复(详见情形1);

情形4:故障数据造成数据库关闭不可打开

当需要恢复的数据文件属于系统表空间或回滚段表空间时,则数据库无法打开。或者虽然可以打开但要恢复的数据量超过总量的一半以上,这时关闭恢复更安全可靠。

1)若数据库处于关闭状态,则先加载数据库。若数据库处于打开状态,则先使用dba_data_files查看表空间与数据文件信息,再shutdown abort,使数据库处于加载状态。

2)备份文件复制(详见情形1);

3)使用RECOVER(详见情形1);

4)open数据库;

5)确认恢复(详见情形1);

附:

标识需要恢复的数据文件以及恢复从何处开始:

select * from v$recover_file;

定位归档期间所需的归档日志文件:

select * from v$recovery_log;

声明:该笔记转载自《Oracle DBA培训教程》,仅用于个人学习,若侵犯到您的版权敬请告知!

» 声明:本站文章源于个人经验总结或书籍、互联网转载,内容仅用于个人学习,请勿转载,否则后果自负!

给我留言

留言无头像?