当前位置:文档之家› oracle数据库恢复方案

oracle数据库恢复方案

目录 数据库恢复方案...1 文档控制...1 一、相关概念...3 1,恢复的两个阶段...3 2,Oracle实例启动的三个阶段...3 3,RMAN信息的保存位置...3 二、 完全恢复...3 (一) 控制文件...3 1) 丢失部分控制文件:...3 2) 丢失全部控制文件...3 (二) 重做日志文件...4 1) 非当前使用的重做日志文件:...4 2) 当前使用的重做日志文件(未归档):...4 (三) 数据文件...4 1) 无归档模式下的完全恢复...4 2) 归档模式下的完全恢复...5 三、 不完全恢复...6 (一) 基于SCN的不完全恢复...6 1) 准备工作...6 2) 使用RMAN进行恢复...7 (二) 基于时间点的不完全恢复...8 1) 准备工作...8 2) 使用RMAN进行恢复...8 四、 高级篇...9 (一) 使用RMAN进行异机同目录...9 1) 准备工作...9 2) 通过RMAN进行异机恢复...10 (二)使用RMAN进行异机异目录...11 1) 准备工作...11 2) 通过RMAN进行异机恢复...11 (三)使用RMAN进行在线数据块恢复...14

一、相关概念 1,恢复的两个阶段 数据库无论采取哪种方式进行恢复都分为Restore和Recover两个步骤。 Restore(还原):把控制文件、重做日志文件和数据文件还原到正确位置。 Recover(恢复):恢复还原后的数据文件,使数据库达到一致状态。

2,Oracle实例启动的三个阶段 Oracle实例启动经过三个阶段: l NOMOUNT(未装载):读入参数文件,验证参数文件中的目录是否存在。 l MOUNT(装载):读入参数文件指定位置的控制文件。 l OPEN(打开):验证控制文件中指定的重做日志文件和数据文件是否正确、数据文件是否一致,然后读入数据文件中的数据。

所以按照如下顺序使数据库正确打开。 1) SHUTDOWN(关闭)状态下,确保参数文件指定的文件夹存在,启动到NOMMUNT状态。

2) NOMOUNT状态下,保证控制文件的位置和命名与参数文件中相同,控制文件中指定的重做日志文件和数据文件存在,然后启动到MOUNT状态。

3) MOUNT状态下,执行RMAN还原和恢复操作。 4) OPEN状态下,读入数据文件和重做日志文件。 我们要保证Oracle在各个阶段读入的文件和目录指向正确的路径。 如果更改了某个文件的位置,要把其相应的参数文件和控制文件中的信息要一同更新。

3,RMAN信息的保存位置 NOCATALOG(非恢复目录)模式时,RMAN把备份文件的辅助信息保存在控制文件中。 CATALOG(恢复目录)模式时,RMAN把备份文件的辅助信息保存在一个数据库中。

下面将通过若干实验来总结Oracle的各种崩溃情况下的恢复。

二、 完全恢复 (一) 控制文件 丢失控制文件只需要执行“还原”步骤。 1) 丢失部分控制文件: 1, 关闭数据库 2, 手动复制剩余控制文件并改名成丢失的控制文件名 3, 启动数据库 数据库中所有控制文件是完全相同的,使用DBCA创建数据库会默认产生三个控制文件,建议多路复用控制文件(把多个控制文件放到不同磁盘上),保证数据库的可用性。

2) 丢失全部控制文件 1, 关闭数据库 2, 启动数据库到NOMOUNT状态 3, 重建控制文件 4, 启动数据库

重建控制文件有以下两种方法: 1,找到警告日志,根据其信息创建控制文件。警告日志位于bdump文件夹中,命名为alert_{oracle_sid}.log,启动失败等信息也可以在这里找到。

2,找到跟踪文件,根据其SQL语句重建控制文件。跟踪文件位于udump文件夹下,使用下述命令备份控制文件到跟踪文件。

SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE;

(二) 重做日志文件 丢失非当前状态的重做日志文件需要执行“还原”步骤,丢失当前状态的重做日志文件需要“恢复”步骤。

重做日志文件按状态分为当前、非当前、已归档和未归档四种,需要用不同的命令来打开数据库。

1) 非当前使用的重做日志文件: 1,已归档: SQL> ALTER DATABASE CLEAR LOGFILE GROUP #; 2,未归档: SQL> ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP #;

2) 当前使用的重做日志文件(未归档): SQL> ALTER DATABASE MOUNT; SQL> RECOVER DATABASE UNTIL CANCEL; SQL> ALTER DATABASE OPEN RESETLOGS;

如果清除了未归档的重做日志文件(当前使用的重做日志文件为未归档),会丢失这个重做日志文件包含的信息,导致日后恢复时无法完全恢复,所以清除未归档的重做日志文件后要立刻全备份数据库。

(三) 数据文件 1) 无归档模式下的完全恢复 无归档模式一般采用exp导出或者手工冷备份方式进行备份恢复。 手工冷备份方式: 1,创建表 SQL> create table tb(a integer,b integer); 表已创建。 2,插入数据 SQL> insert into tb(a,b) values(1,1); 已创建1行。 SQL> insert into tb(a,b) values (2,2); 已创建1行。 SQL> commit; 提交完成。 3,关闭数据库,手工删除数据文件模拟数据文件损坏 SQL> shutdown immediate; 4,打开数据库 SQL> startup open; ORACLE例程已经启动。 Total System Global Area 167772160 bytes Fixed Size 1247900 bytes Variable Size 62915940 bytes Database Buffers 100663296 bytes Redo Buffers 2945024 bytes 数据库装载完毕。 ORA-01157:无法标识/锁定数据文件4 -请参阅DBWR跟踪文件 ORA-01110:数据文件4: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF' 5,手工还原数据文件,打开数据库 SQL> alter database open; 6,查询数据 SQL> select * from tb; A B ---------- ---------- 1 1 2 2

数据库恢复完成,数据没有丢失。

2) 归档模式下的完全恢复 归档模式下可采用RMAN备份,手工备份与exp导出方式进行备份,推荐使用RMAN方式进行安全可靠的备份。 RMAN方式: 丢失数据文件需要先“还原”,再“恢复”数据文件到一致状态。 1,查看test表中数据 SQL> select * from tb; A B ---------- ---------- 1 1 2 2

2,备份数据库 RMAN TARGET/ RMAN> BACKUP DATABASE; 3,插入数据,切换日志文件 SQL> insert into tb(a,b) values(3,3); 已创建1行。 SQL> insert into tb(a,b) values(4,4); 已创建1行。 SQL> commit; 提交完成。 SQL> alter system switch logfile; 4,关闭数据库,手动删除USERS01.DBF SQL> SHUTDOWN IMMEDIATE; 5,启动数据库到MOUNT状态 SQL> STARTUP MOUNT: 6, 还原该数据文件 RMAN> RESTORE DATAFILE 4; 7, 恢复该数据文件 RMAN> RECOVER DATABASE; 8, 打开数据库 RMAN> ALTER DATABASE OPEN; 数据库已更改。 9, 查看数据是否丢失 SQL> select * from tb; A B ---------- ---------- 1 1 2 2 3 3 4 4

数据库恢复完成,数据没有丢失。

三、 不完全恢复 (一) 基于SCN的不完全恢复 1) 准备工作 1,备份数据库 rman target/ RMAN> backup database; 2,创建表 SQL> create table tb(a integer); 表已创建。 3,插入数据 SQL> insert into tb(a) values(1); 已创建1行。 SQL> insert into tb(a) values(2); 已创建1行。 SQL> commit; 提交完成。 4,查看数据 SQL> select * from tb; A

相关主题