ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle数据库恢复详解

oracle数据库恢复详解

原创 Linux操作系统 作者:treesofthehill 时间:2012-05-03 18:00:47 0 删除 编辑

预防介质失败的措施有:

。在archivelog模式中运行数据库

。复用控制文件、联机重做日志文件和归档日志文件。

。备份数据文件和归档日志文件。

与实例恢复相比,介质恢复是手动过程。

1           恢复结构和进程

受损的控制文件的恢复方法:

。替换为某个复用副本

。使用create control命令重建

。从备份中还原控制文件

受损的重做日志文件:

。使用alter database clear logfile group#命令重建日志文件组的成员。在archivelog模式下必须先归档再执行命令重建。

。使用alter database clear unarchived logfile group#命令日志文件,执行该命令后必须对数据库进行备份。

受损的数据文件:

使用备份和归档日志

有完全恢复和不完全恢复之分

完全恢复:

。在备份中还原受损文件;

。使用归档日志文件进行恢复。

oracle中,还原意味着使用备份替换受损的或丢失的文件;恢复意味着通过归档日志文件来同步受损文件与数据库的剩余部分。

任何控制文件副本受损、system表空间和活动的撤销表空间一步分的数据文件受损会导致实例立即终止。

2           介质失败后的恢复

2.1          恢复受损的复用控制文件

丢失复用控制文件的一个副本:只要将其替换为幸存的控制文件副本。

步骤:

1、  复制一个幸存的控制文件到一个新的文件。

2、  修改ontrol_files参数文件,从而将对受损文件的引用替换为新文件的引用。

3、  删除受损的控制文件。

例子

1         查看控制文件是否复用

sys@ORCL> select * from v$controlfile;

 

STATUS

-------

NAME

--------------------------------------------------------------------------------

--------------------

IS_ BLOCK_SIZE FILE_SIZE_BLKS

--- ---------- --------------

 

E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROLFILE\O1_MF_7RBDCXXS_.CTL

NO       16384            430

 

 

E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROLFILE\O1_MF_7RBDCXXS_1.CTL

NO       16384            430

 

 

E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\CONTROLFILE\O1_MF_7RBDCY2G_.CT

L

YES      16384            430

2         模拟控制文件受损,使用startup 命令,启动操作会停止在nomount模式中

sys@ORCL> startup force;

ORACLE 例程已经启动。

 

Total System Global Area  532676608 bytes

Fixed Size                  1249968 bytes

Variable Size             188747088 bytes

Database Buffers          335544320 bytes

Redo Buffers                7135232 bytes

ORA-00205: ?????????, ??????, ???????

3         将幸存的控制文件复制至新的目录,并重命名其文件

4         编辑control_file 参数

sys@ORCL> alter system set control_files =

'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROLFILE\

O1_MF_7RBDCXXS_.CTL',

'E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\CONTROLFILE\

O1_MF_7RBDCY2G_.CTL',

'E:\ORACLE\controlfile\control03_.CTL' scope=spfile;

系统已更改。

5         重启实例

sys@ORCL> startup force;

ORACLE 例程已经启动。

 

Total System Global Area  532676608 bytes

Fixed Size                  1249968 bytes

Variable Size             188747088 bytes

Database Buffers          335544320 bytes

Redo Buffers                7135232 bytes

数据库装载完毕。

数据库已经打开。

6         删除受损的控制文件

 

2.2          恢复受损的复用联机重做日志文件

在数据库打开时可以恢复复用的联机重做日志文件,因此不会造成数据库的停机。

例子

1         查询联机日志文件的状态

sys@ORCL> select group#, status, member from v$logfile order by group#;

 

    GROUP# STATUS

---------- -------

MEMBER

-----------------------------------------------------------------------------------

 

         1

E:\ORACLE\PRODUCT\10.2.0\ORADATA\REDO001B.LOG

 

         1

E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_1_7RBDCY8S_.LOG

 

         1

E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\O1_MF_1_7RBDCYRW_.LOG

 

         2 STALE

E:\ORACLE\PRODUCT\10.2.0\ORADATA\REDO002B.LOG

 

         2 STALE

E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_2_7RBDCZFO_.LOG

 

         2 STALE

E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\O1_MF_2_7RBDCZX9_.LOG

 

         3 STALE

E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\O1_MF_3_7RBDD21Y_.LOG

 

         3 STALE

E:\ORACLE\PRODUCT\10.2.0\ORADATA\REDO003B.LOG

 

         3 STALE

E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_3_7RBDD0Y8_.LOG

 

 

已选择9行。

2         模拟删除一个日志文件成员来模仿介质失败

sys@ORCL> alter system switch logfile;

 

系统已更改。

 

sys@ORCL> alter system switch logfile;

 

系统已更改。

 

sys@ORCL> alter system switch logfile;

系统已更改。

sys@ORCL> shutdown immediate

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

sys@ORCL> host del E:\ORACLE\PRODUCT\10.2.0\ORADATA\REDO001B.LOG

3         查询联机日志文件的状态,丢失的文件会标志invalid

sys@ORCL> startup

ORACLE 例程已经启动。

 

Total System Global Area  532676608 bytes

Fixed Size                  1249968 bytes

Variable Size             192941392 bytes

Database Buffers          331350016 bytes

Redo Buffers                7135232 bytes

数据库装载完毕。

数据库已经打开。

sys@ORCL> alter system switch logfile;

 

系统已更改。

 

sys@ORCL> alter system switch logfile;

 

系统已更改。

 

sys@ORCL> alter system switch logfile;

 

系统已更改。

 

sys@ORCL> select group#, status, member from v$logfile order by group#;

 

    GROUP# STATUS

---------- -------

MEMBER

----------------------------------------------------------------------------------

 

         1 INVALID

E:\ORACLE\PRODUCT\10.2.0\ORADATA\REDO001B.LOG

 

         1

E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_1_7RBDCY8S_.LOG

 

         1

E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\O1_MF_1_7RBDCYRW_.LOG

 

         2

E:\ORACLE\PRODUCT\10.2.0\ORADATA\REDO002B.LOG

 

         2

E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_2_7RBDCZFO_.LOG

 

         2

E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\O1_MF_2_7RBDCZX9_.LOG

 

         3

E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\O1_MF_3_7RBDD21Y_.LOG

 

         3

E:\ORACLE\PRODUCT\10.2.0\ORADATA\REDO003B.LOG

 

         3

E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_3_7RBDD0Y8_.LOG

 

 

已选择9行。

4         修复受损的重做日志

sys@ORCL> select group#, sequence#, members, archived, status from v$log;

 

    GROUP#  SEQUENCE#    MEMBERS ARC STATUS

---------- ---------- ---------- --- ----------------

         1        118          3 YES INACTIVE

         2        119          3 NO  CURRENT

         3        117          3 YES INACTIVE

 

sys@ORCL> alter system switch logfile;

 

系统已更改。

 

sys@ORCL> select group#, sequence#, members, archived, status from v$log;

 

    GROUP#  SEQUENCE#    MEMBERS ARC STATUS

---------- ---------- ---------- --- ----------------

         1        118          3 YES INACTIVE

         2        119          3 YES ACTIVE

         3        120          3 NO  CURRENT

 

sys@ORCL> alter system checkpoint global;

 

系统已更改。

 

sys@ORCL> select group#, sequence#, members, archived, status from v$log;

 

    GROUP#  SEQUENCE#    MEMBERS ARC STATUS

---------- ---------- ---------- --- ----------------

         1        118          3 YES INACTIVE

         2        119          3 YES INACTIVE

         3        120          3 NO  CURRENT

 

sys@ORCL> alter database clear logfile group 1;

 

数据库已更改。

注:只有当group 1status inactive时,才能执行alter database clear logfile group 1命令。

sys@ORCL> select group#, status, member from v$logfile order by group#;

 

    GROUP# STATUS

---------- -------

MEMBER

----------------------------------------------------------------------------------

 

         1

E:\ORACLE\PRODUCT\10.2.0\ORADATA\REDO001B.LOG

 

         1

E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_1_7RBDCY8S_.LOG

 

         1

E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\O1_MF_1_7RBDCYRW_.LOG

 

         2

E:\ORACLE\PRODUCT\10.2.0\ORADATA\REDO002B.LOG

 

         2

E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_2_7RBDCZFO_.LOG

 

         2

E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\O1_MF_2_7RBDCZX9_.LOG

 

         3

E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\O1_MF_3_7RBDD21Y_.LOG

 

         3

E:\ORACLE\PRODUCT\10.2.0\ORADATA\REDO003B.LOG

 

         3

E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_3_7RBDD0Y8_.LOG

 

 

已选择9行。

 

5         恢复受损的数据文件

a)         noarchivelog模式中数据文件的恢复

noarchivelog模式中无法执行恢复操作,只有一个唯一选项就是还原整个数据库,并且还原了整个数据库后,那么在打开数据库之前必须执行eliminate 联机日志。

b)         archivelog模式中非重要文件的恢复

在数据库处于online进行还原和恢复。

例子:

1         新建表空间,并备份

Create tablespace ts1 datafile ‘e:\oracle\ts.dbf’ size 2m;

输出日志

 

恢复管理器: Release 10.2.0.1.0 - Production on 星期三 5 2 16:51:42 2012

 

 

 

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

 

 

 

RMAN>

 

连接到目标数据库: ORCL (DBID=1308114557)

 

使用目标数据库控制文件替代恢复目录

 

 

 

RMAN>

 

回显已打开

 

 

 

 

 

RMAN> set command id to 'BACKUP_ORCL_000001_050212045130';

 

正在执行命令: SET COMMAND ID

 

 

 

 

 

RMAN> backup device type disk tag 'BACKUP_ORCL_000001_050212045130' tablespace 'TS1'  include current controlfile;

 

启动 backup 02-5 -12

 

分配的通道: ORA_DISK_1

 

通道 ORA_DISK_1: sid=130 devtype=DISK

 

通道 ORA_DISK_1: 启动全部数据文件备份集

 

通道 ORA_DISK_1: 正在指定备份集中的数据文件

 

备份集中包括当前控制文件

 

通道 ORA_DISK_1: 正在启动段 1 02-5 -12

 

通道 ORA_DISK_1: 已完成段 1 02-5 -12

 

段句柄=E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2012_05_02\O1_MF_NCNNF_BACKUP_ORCL_000001_0_7T1XF13F_.BKP 标记=BACKUP_ORCL_000001_050212045130 注释=NONE

 

通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:02

 

通道 ORA_DISK_1: 启动全部数据文件备份集

 

通道 ORA_DISK_1: 正在指定备份集中的数据文件

 

输入数据文件 fno=00009 name=E:\ORACLE\TS1.DBF

 

通道 ORA_DISK_1: 正在启动段 1 02-5 -12

 

通道 ORA_DISK_1: 已完成段 1 02-5-12

 

段句柄=E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2012_05_02\O1_MF_NNNDF_BACKUP_ORCL_000001_0_7T1XF2J3_.BKP 标记=BACKUP_ORCL_000001_050212045130 注释=NONE

 

通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:01

 

完成 backup 02-5 -12

 

 

 

 

 

RMAN> backup device type disk tag 'BACKUP_ORCL_000001_050212045130' archivelog all not backed up;

 

启动 backup 02-5 -12

 

当前日志已存档

 

使用通道 ORA_DISK_1

 

通道 ORA_DISK_1: 正在启动存档日志备份集

 

通道 ORA_DISK_1: 正在指定备份集中的存档日志

 

输入存档日志线程 =1 序列 =99 记录 ID=1 时间戳=781722889

 

输入存档日志线程 =1 序列 =100 记录 ID=3 时间戳=781797650

 

输入存档日志线程 =1 序列 =101 记录 ID=5 时间戳=782228573

 

输入存档日志线程 =1 序列 =102 记录 ID=7 时间戳=782233704

 

输入存档日志线程 =1 序列 =103 记录 ID=9 时间戳=782236504

 

输入存档日志线程 =1 序列 =104 记录 ID=11 时间戳=782236506

 

输入存档日志线程 =1 序列 =105 记录 ID=13 时间戳=782236510

 

输入存档日志线程 =1 序列 =106 记录 ID=15 时间戳=782236514

 

输入存档日志线程 =1 序列 =107 记录 ID=17 时间戳=782236519

 

输入存档日志线程 =1 序列 =108 记录 ID=19 时间戳=782236642

 

输入存档日志线程 =1 序列 =109 记录 ID=21 时间戳=782236643

 

输入存档日志线程 =1 序列 =110 记录 ID=23 时间戳=782236647

 

输入存档日志线程 =1 序列 =111 记录 ID=25 时间戳=782236927

 

输入存档日志线程 =1 序列 =112 记录 ID=27 时间戳=782236943

 

输入存档日志线程 =1 序列 =113 记录 ID=29 时间戳=782237092

 

输入存档日志线程 =1 序列 =114 记录 ID=31 时间戳=782237147

 

输入存档日志线程 =1 序列 =115 记录 ID=34 时间戳=782237200

 

输入存档日志线程 =1 序列 =116 记录 ID=35 时间戳=782237216

 

输入存档日志线程 =1 序列 =117 记录 ID=37 时间戳=782237326

 

输入存档日志线程 =1 序列 =118 记录 ID=39 时间戳=782237360

 

输入存档日志线程 =1 序列 =119 记录 ID=41 时间戳=782237502

 

输入存档日志线程 =1 序列 =120 记录 ID=43 时间戳=782239911

 

通道 ORA_DISK_1: 正在启动段 1 02-5 -12

 

通道 ORA_DISK_1: 已完成段 1 02-5 -12

 

段句柄=E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2012_05_02\O1_MF_ANNNN_BACKUP_ORCL_000001_0_7T1XFCRW_.BKP 标记=BACKUP_ORCL_000001_050212045130 注释=NONE

 

通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:09

 

完成 backup 02-5 -12

 

 

 

 

 

RMAN> exit;

 

 

 

恢复管理器完成。

 

2         模拟数据文件损坏,使用notepad编辑。

3           查询表,确认数据文件已损坏

Select * from t2;

4           还原和恢复数据文件

 恢复管理器: Release 10.2.0.1.0 - Production on 星期三 5 2 17:05:06 2012

 

 

 

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

 

 

 

RMAN>

 

连接到目标数据库: ORCL (DBID=1308114557)

 

使用目标数据库控制文件替代恢复目录

 

 

 

RMAN>

 

回显已打开

 

 

 

 

 

RMAN> run {

 

2> restore datafile 9;

 

3> recover datafile 9;

 

4> sql 'alter database datafile 9 online';

 

5> }

 

启动 restore 02-5 -12

 

分配的通道: ORA_DISK_1

 

通道 ORA_DISK_1: sid=129 devtype=DISK

 

 

 

通道 ORA_DISK_1: 正在开始恢复数据文件备份集

 

通道 ORA_DISK_1: 正在指定从备份集恢复的数据文件

 

正将数据文件00009恢复到E:\ORACLE\TS1.DBF

 

通道 ORA_DISK_1: 正在读取备份段 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2012_05_02\O1_MF_NNNDF_BACKUP_ORCL_000001_0_7T1XF2J3_.BKP

 

通道 ORA_DISK_1: 已恢复备份段 1

 

段句柄 = E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2012_05_02\O1_MF_NNNDF_BACKUP_ORCL_000001_0_7T1XF2J3_.BKP 标记 = BACKUP_ORCL_000001_050212045130

 

通道 ORA_DISK_1: 恢复完成, 用时: 00:00:02

 

完成 restore 02-5 -12

 

 

 

启动 recover 02-5 -12

 

使用通道 ORA_DISK_1

 

 

 

正在开始介质的恢复

 

介质恢复完成, 用时: 00:00:04

 

 

 

完成 recover 02-5 -12

 

 

 

sql 语句: alter database datafile 9 online

 

 

 

 

 

RMAN> exit;

 

 

 

恢复管理器完成。

5 查询是否已恢复

sys@ORCL> select * from t2;

 

D1

--------------

02-5 -12

 

a)         恢复受损的重要数据文件

在数据库处于mount模式中进行还原和恢复。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9537053/viewspace-722657/,如需转载,请注明出处,否则将追究法律责任。

上一篇: ora-600类型(转)
请登录后发表评论 登录
全部评论

注册时间:2008-06-11

  • 博文量
    97
  • 访问量
    179815