RMAN_数据库的绝大部分数据文件丢失或者损坏的恢复

 
  1. 简述

    当数据库的多个表空间的文件都遭到不同程度的损坏,我们直接在数据库级进行恢复。本试验测试是丢失数据文件,控制文件、REDO文件等其他文件没有受到破坏。

    本试验中删除绝大部分的数据文件,模拟该大部分数据文件物理破坏或者丢失的情况发生,也就是说,如果一个数据库的绝大部分的数据文件丢失了,可以参照下面的操作步骤进行数据库库的恢复工作。

2. 建立测试环境


2.1在测试表空间上创建表

SQL> CREATE TABLE AIDU.TEST_FOR_RECOVERY_DB(ID NUMBER NOT NULL,NAME VARCHAR2(200),PRIMARY KEY(ID)) TABLESPACE USER02;

表已创建。


2.2 做一次RMAN全备份

C:> RMAN TARGET /

RMAN>RUN{

SQL ALTER SYSTEM ARCHIVE LOG CURRENT;

ALLOCATE CHANNEL D1 TYPE DISK;

BACKUP FULL DATABASE PLUS ARCHIVELOG;

RELEASE CHANNEL D1;}


2.3 在测试表中插入数据,用于验证数据是否完全恢复

SQL> CONN AIDU/AIDU

已连接。

SQL> INSERT INTO TEST_FOR_RECOVERY_DB VALUES(1,'TEST FOR RECOVERY DATABASE');

已创建 1 行。

SQL> COMMIT;

提交完成。

SQL> CONN / AS SYSDBA

已连接。

SQL> ALTER SYSTEM SWITCH LOGFILE;

系统已更改。


3. 模拟灾难恢复

SQL>SHUTDOWN IMMEDIATE;

SQL>HOST DEL C:\ORADATA\AIDU\SYS*.*

SQL>HOST DEL C:\ORADATA\AIDU\US*.*

SQL>HOST DEL C:\ORADATA\AIDU\IN*.*

SQL>HOST DEL C:\ORADATA\AIDU\UN*.*

SQL>HOST DEL C:\ORADATA\AIDU\TE*.*

实际上只保留了数据库数据目录下的REDO文件,控制文件。

SQL>STARTUP

ORACLE 例程已经启动。

Total System Global Area 268435456 bytes

Fixed Size 1248504 bytes

Variable Size 100664072 bytes

Database Buffers 163577856 bytes

Redo Buffers 2945024 bytes

数据库装载完毕。

ORA-01157: 无法标识/锁定数据文件 1 - 请参阅 DBWR 跟踪文件

ORA-01110: 数据文件 1: 'C:\ORADATA\AIDU\SYSTEM01.DBF'

数据库无法启动


4.进行灾难恢复


4.1 查看当前数据库状态

SQL> SELECT OPEN_MODE FROM V$DATABASE;

OPEN_MODE

----------

MOUNTED

SQL>COL NAME FORMAT A30

SQL>COL ERROR FORMAT A30

SQL>COL FILE# FORMAT 99

SQL> SELECT A.FILE#,A.NAME,B.ERROR FROM V$DATAFILE A,V$RECOVER_FILE B

2 WHERE A.FILE#=B.FILE#;

FILE# NAME ERROR

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

1 C:\ORADATA\AIDU\SYSTEM01.DBF FILE NOT FOUND

2 C:\ORADATA\AIDU\USER02.DBF FILE NOT FOUND

3 C:\ORADATA\AIDU\SYSAUX01.DBF FILE NOT FOUND

4 C:\ORADATA\AIDU\USERS01.DBF FILE NOT FOUND

5 C:\ORADATA\AIDU\INDX01.DBF FILE NOT FOUND

6 C:\ORADATA\AIDU\INDX02.DBF FILE NOT FOUND

7 C:\ORADATA\AIDU\UNDO2.ORA FILE NOT FOUND

8 C:\ORADATA\AIDU\USER02B.ORA FILE NOT FOUND

已选择8行。

这里看到有8个文件需要进行恢复。


4.2使用RMAN进行恢复

RMAN> run{

2> RESTORE DATABASE;

3> RECOVER DATABASE;

4> SQL 'ALTER DATABASE OPEN';}

启动 restore 2006-07-11 11:25:46

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

分配的通道: ORA_DISK_1

通道 ORA_DISK_1: sid=46 devtype=DISK

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

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

正将数据文件00001恢复到C:\ORADATA\AIDU\SYSTEM01.DBF

正将数据文件00002恢复到C:\ORADATA\AIDU\USER02.DBF

正将数据文件00003恢复到C:\ORADATA\AIDU\SYSAUX01.DBF

正将数据文件00004恢复到C:\ORADATA\AIDU\USERS01.DBF

正将数据文件00005恢复到C:\ORADATA\AIDU\INDX01.DBF

正将数据文件00006恢复到C:\ORADATA\AIDU\INDX02.DBF

正将数据文件00007恢复到C:\ORADATA\AIDU\UNDO2.ORA

正将数据文件00008恢复到C:\ORADATA\AIDU\USER02B.ORA

通道 ORA_DISK_1: 正在读取备份段 C:\ORADATA\FLASH_RECOVERY_AREA\AIDU\BACKUPSET\2006_07_11\O1_MF_NNNDF_TAG20060711T094614_2C60Q8F5_.BKP

通道 ORA_DISK_1: 已恢复备份段 1

段句柄 = C:\ORADATA\FLASH_RECOVERY_AREA\AIDU\BACKUPSET\2006_07_11\O1_MF_NNNDF_TAG20060711T094614_2C60Q8F5_.BKP 标记 = TAG20060711T094614

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

完成 restore 2006-07-11 11:27:04

启动 recover 2006-07-11 11:27:04

使用通道 ORA_DISK_1

正在开始介质的恢复

存档日志线程 1 序列 25 已作为文件 C:\ORADATA\FLASH_RECOVERY_AREA\AIDU\ARCHIVELOG\2006_07_11\O1_MF_1_25_2C60S8NJ_.ARC 存在于磁盘上

存档日志线程 1 序列 26 已作为文件 C:\ORADATA\FLASH_RECOVERY_AREA\AIDU\ARCHIVELOG\2006_07_11\O1_MF_1_26_2C60WK00_.ARC 存在于磁盘上

存档日志线程 1 序列 27 已作为文件 C:\ORADATA\FLASH_RECOVERY_AREA\AIDU\ARCHIVELOG\2006_07_11\O1_MF_1_27_2C65YXJ3_.ARC 存在于磁盘上

存档日志文件名 =C:\ORADATA\FLASH_RECOVERY_AREA\AIDU\ARCHIVELOG\2006_07_11\O1_MF_1_25_2C60S8NJ_.ARC 线程 =1 序列 =25

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

完成 recover 2006-07-11 11:27:17

sql 语句: ALTER DATABASE OPEN


4.3 检查数据是否正常恢复

SQL> COL NAME FORMAT A30

SQL> SELECT * FROM TEST_FOR_RECOVERY_DB;

ID NAME

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

1 TEST FOR RECOVERY DATABASE

SQL> COL FILE# FORMAT 99

SQL> COL NAME FORMAT A30

SQL> COL STATUS FORMAT A10

SQL> SELECT FILE#,NAME,STATUS FROM V$DATAFILE ORDER BY FILE#;

FILE# NAME STATUS

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

1 C:\ORADATA\AIDU\SYSTEM01.DBF SYSTEM

2 C:\ORADATA\AIDU\USER02.DBF ONLINE

3 C:\ORADATA\AIDU\SYSAUX01.DBF ONLINE

4 C:\ORADATA\AIDU\USERS01.DBF ONLINE

5 C:\ORADATA\AIDU\INDX01.DBF ONLINE

6 C:\ORADATA\AIDU\INDX02.DBF ONLINE

7 C:\ORADATA\AIDU\UNDO2.ORA ONLINE

8 C:\ORADATA\AIDU\USER02B.ORA ONLINE

已选择8行。

SQL> SELECT FILE#,NAME,STATUS FROM V$TEMPFILE ORDER BY FILE#;

FILE# NAME STATUS

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

2 C:\ORADATA\AIDU\TEMP02.DBF ONLINE

       

         我们可以看到TEMP 表空间的文件自动恢复了,请注意这些文件并不是从RMAN备份集中恢复回来的,而是系统自动创建的。这次测试的环境是10.2.0.1,TEMP表空间的文件可以自动重新创建,如果是10.2之前的版本,可能需要手工创建一下。

 

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

转载于:http://blog.itpub.net/32980/viewspace-673803/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值