第19章 归档模式下的数据库恢复

1. Restore(修复)将数据文件带回到过去(备份的时间点)+Recover(恢复)恢复从备份到数据文件崩溃这段时间内所有提交的数据=>数据库的完全恢复(所有提交的数据都恢复);

 1)修复损坏的或丢失的操作系统文件就是使用操作系统命令或其他工具将备份的数据文件复制回来以替换已经损坏或丢失的操作系统的文件;

 2)恢复就是使用SQL*Plus的recover命令将备份开始到数据文件崩溃这段时间内所有提交的数据从归档日志文件或重做日志文件写回到修复的数据文件。

2. 在归档模式下进行数据库全恢复时数据库所经过的状态如下:

 1)利用备份修复(Restores)损坏或丢失的数据文件,即将备份的操作系统文件复制回数据库中原来的位置;

 2)将从 备份到系统崩溃这段时间内的所有提交数据由归档日志文件和联机重做日志文件中还原成数据文件所需的数据块;

 3)此时数据库中包含了所有的提交数据,也可能包含没有提交的数据;

 4)系统使用还原(回滚)数据块回滚未提交的数据;

 5)最后,数据库到达了已恢复的状态。

3. 数据库的完全恢复就是所有提交数据都得以恢复,而数据库的 不完全恢复是将数据库恢复到系统崩溃之前的某个时间点。

4. 进行数据库的完全恢复时要进行如下的操作:

 1)将要恢复的文件或表空间设为脱机(offline),但是不包括系统表空间或活动的还原表空间;

 2)仅修复损坏的或丢失的操作系统文件,不修复(Restore)其他的任何文件;

 3)恢复数据文件。

5. 归档模式下的数据库全恢复优点:

 1)在恢复时不必关闭数据库;

 2)所有的提交数据都可以恢复;

 3)仅需要修复损坏的或丢失的数据文件;

 4)恢复的全部时间=将损坏的或丢失的数据文件的备份复制回数据库的时间+使用归档日志文件或重做日志文件恢复提交的数据所用的时间;

6. 归档模式下的数据库全恢复缺点:

 1)数据库必须运行在归档模式下,增大系统的内存和CPU的开销;

 2)必须保证所有的归档日志文件完好无损;

 3)对DBA只是和技能的要求明显提高

7. recover命令使用:

 1)recover [automatic] database:该命令只能在数据库加载状态时使用;

 2)recover [automatic] tablespace "表空间号" | "表空间名":该命令只能在数据库打开状态时使用;

 3)recover [automatic] datafile "数据文件名" | "数据文件号"

注意:automatic表示自动搜寻和恢复归档日志文件及联机重做日志文件中提交的数据;

 4)相关的数据字典

  a)查看所有数据文件的文件号,文件名和对应的表空间;

   select file_id,file_name,tablespace_name from dba_data_files;

  b)查看所以表空间当前状态

   select tablespace_name,status from dba_tablespaces;

  c)查看所有数据文件的当前状态

   select file#,status from v$datafile;

  d)查看标识需要恢复的数据文件以及恢复从何处开始

  select * from v$recover_file;

  e)查看定位在恢复期间所需的归档日志文件

  select * from v$recovery_log;

8. 演示表空间脱机与表空间所对应的数据文件脱机区别

 1)演示表空间脱机

  表空间脱机:alter tablespace xiaoming_index offline; 

  查看表空间是否脱机:select tablespace_name,status from dba_tablespaces;

  查看数据文件是否脱机:select file#,status frin v$datafile;数据文件的状态变为offline

  查看所有数据文件当前的与备份相关信息:select * from v$recover_file;
注意:第4列ERROR显示的结果有两种可能:offline normal表示该数据文件在设置在联机之前不需要进行恢复;null表示该数据文件脱机的原因不清楚;

 2)演示数据文件脱机

  数据文件脱机:alter database datafile 7 offline;

  查看数据文件当前状态:select file#,status from v$datafile;数据文件的状态变为recover

9. 数据库完全恢复方法

 1)在数据库最初处于打开的状态下,进行开启数据库的恢复;

 2)在数据库最初处于关闭的状态下,进行开启数据库的恢复;

 3)恢复没有备份的数据文件;

 4)在关闭的状态下进行数据库的恢复

10. 最初处于打开状态下进行的开启数据库恢复

 a)适用如下情况:

  1)所需恢复的数据文件不属于系统表空间或还原/回滚段表空间;

  2)磁介质的损坏,数据文件的崩溃,或数据文件的丢失并未造成数据库的关闭;

  3)数据库是以每天24小时每周7天运营的方式操作的,数据库的当机时间必须保持最小

 b)操作步骤:

  1)使用数据字典dba_data_files获取要恢复的数据文件与所对应的表空间及它们的相关信息;

  2)dba_tablespaces获取要恢复的表空间是处在脱机还是联机状态,可以使用v$datafile确认要恢复的数据文件是处在脱机还是联机状态;

  3)如果表空间处在联机状态,将表空间设为脱机状态,也可以将数据文件设为脱机;

  4)使用操作系统复制命令将备份的数据文件复制回数据库中原来的位置,如果硬盘损坏,将备份的数据文件复制到其他硬盘上,之后使用alter命令修改数据文件名;

  5)使用recover命令将所有提交的数据从归档日志文件和重做日志文件重新写入已经修复的数据文件

  6)当恢复完成后将表空间或数据文件重新设置为联机状态;

  7)检查是否正常;

11. 最初处于关闭状态下进行的开启数据库恢复

 a)适用如下情况:

  1)所需恢复的数据文件不属于系统表空间或还原/回滚段表空间;

  2)磁介质的损坏,硬盘的损毁,或数据文件的丢失已经造成数据库的关闭;

  3)数据库是以每天24小时每周7天运营的方式操作的,数据库的当机时间必须保持最小;

 b)步骤:

  1)使用startup mount加载数据库。因为损坏的数据文件不能打开

  2)使用v$datafile确认要恢复的数据文件的文件名。这时不能使用数据字典dba_tablespaces,因为该数据字典只能在数据库开启状态下使用;

  3)使用 alter database datafile "数据文件名" offline:将出问题的数据文件设为脱机,这时不能使用alter tablespace命令将出文件的表空间设为脱机,因为该命令只能在数据库开启状态下使用;

  4)使用alter database open 将数据库打开。因为出问题的数据文件已经脱机,所有其他的数据文件都是同步的;

  5)使用操作系统复制命令将备份的数据文件复制回数据库中原来的位置,如果硬盘损坏,将备份的数据文件复制到其他硬盘上,之后使用alter命令修改数据文件名;

  6)使用recover命令将所有提交的数据从归档日志文件和重做日志文件重新写入已经修复的数据文件;

  7)当恢复完成后将表空间或数据文件重新设置为联机状态;

12. 恢复没有备份的数据文件

 a)适用如下情况:

  1)所需恢复的数据文件不属于系统表空间或还原/回滚段表空间;

  2)由于介质损坏或用户错误导致数据文件的丢失,但是这个数据文件从来没有备份过;

  3)从这个数据文件创建以来所有的归档日志文件都完好无损;

 b)oracle提供两个重新建立数据文件的结构的命令

  alter database create datafile "原始文件名":该命令重建与原来数据文件同名的数据文件

  alter database create datafile "原文件名" as "新文件名" 

 c)步骤:

  1)使用数据字典dba_data_file获取要恢复的数据文件与所对应的表空间及它们的相关信息;

  2)dba_tablespaces获取要恢复的表空间是处在脱机还是联机状态,可以使用v$datafile确认要恢复的数据文件是处在脱机还是联机状态;

  3)如果表空间处在联机状态,将表空间设为脱机状态,也可以将数据文件设为脱机;

  4)使用数据字典v$recover_file查看数据文件的恢复状态此时error列的显示应该为file not found,change#列的显示应该为0,而time列应该没有显示输出;

  5)使用alter database create datafile命令重建数据文件的结构;

  6)使用数据字典v$recover_file确认数据文件的恢复状态,此时ERROR列应该没有显示输出,change#列和time列的显示都有了新值;

  7)使用recover命令将所有提交的数据从归档日志文件和重做日志文件重新写入已经修复的数据文件;

  8)当恢复完成后将表空间或数据文件重新设置为联机状态;

12. 在关闭的状态下进行数据库的恢复

 a)适用如下情况:

  1)所需恢复的数据文件属于系统表空间或还原/回滚段表空间;

  2)整个数据库或大多数数据文件都需要恢复;

  3)数据库不是以每天24小时每周7天运营的方式操作的,数据库在工作期间可以关闭;

 b)步骤:

  1)使用数据字典dba_data_file获取要恢复的数据文件与所对应的表空间及它们的相关信息;

  2)如果数据库是打开状态,使用shutdown关闭数据库shutdown abort;

  3)以加载方式启动数据库startup mount

  4)使用操作系统复制命令将备份的数据文件复制回数据库中原来的位置,如果硬盘损坏,将备份的数据文件复制到其他硬盘上,之后使用alter命令修改数据文件名;

  5)使用recover命令将所有提交的数据从归档日志文件和重做日志文件重新写入已经修复的数据文件;

  6)使用alter database open命令将数据库打开;

13.最初在关闭状态下进行开启数据库恢复的实例

  1)准备工作,备份数据库

    alter tablespace system begin backup;

    host copy E:\app\kxbin\oradata\orcl\system01.dbf D:\orcl\Backup\

    alter tablespace system end backup;

  2)关闭数据库

    shutdown immediate;

  3)模拟xiaoming_index.dbf文件丢失,删除xiaoming_index.dbf文件

  4)试着启动数据库

    shtartup

  5)第6号数据文件出现问题,将该文件设为脱机

    alter database datafile 6 offline;

  6)打开数据库

    alter database open;

  7)查看数据文件的状态

    select file#,status from v$datafile;

  8)查看与数据文件相关的恢复信息

    select * from v$recover_file; (提示第6号数据文件已经丢失)

  9)使用操作系统的复制命令将备份文件复制回第6号数据文件原来的目录下

    host copy D:\orcl\Backup\xiaoming_index.dbf  E:\app\kxbin\oradata\orcl\

  10)对第6号数据文件进行恢复

    recover datafile 6;

  11)将xiaoming_index表空间重新设置为联机

    alter tablespace xiaoming_index online;

  12)查看数据文件的当前状态

    select file#,status from v$datafile;

14. 在关闭的状态下进行数据库恢复的实例 

  1)准备工作,备份数据库

    alter tablespace xiaoming_index begin backup;

    host copy E:\app\kxbin\oradata\orcl\system01.dbf D:\orcl\Backup\

    alter tablespace xiaoming_index end backup;

  2)关闭数据库

    shutdown immediate;

  3)模拟由于系统表空间所对应的数据文件的损坏造成数据库关闭的情况,删除system01.dbf文件

  4)以加载的方式启动数据库

    startup mount 

  5)使用操作系统的复制命令将备份文件复制到新的硬盘上

    host copy D:\orcl\Backup\system01.dbf  E:\app\kxbin\oradata\orcl\

    alter database rename file 'D:\orcl\Backup\system01.dbf' to 'E:\app\kxbin\oradata\orcl\';

  6)恢复数据库

    recover database;

  7)打开数据库

    alter database open;

posted on 2013-01-23 16:21  kangxuebin  阅读(2914)  评论(0编辑  收藏  举报

导航