- 简述
当数据库的多个表空间的文件都遭到不同程度的损坏,我们直接在数据库级进行恢复。本试验测试是丢失数据文件,控制文件、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/