RMAN 还原与恢复1(RMAN Complete Recovery)
2013-02-22 17:25
375 查看
在Oracle中,三大文件即控制文件,数据文件,日志文件的丢失与破坏都将需要使用还原或恢复来使数据库正常化。而RMAN还原与恢复是实现数据库完整性、可靠性必不可少的手段之一。还原简言之即是将所需的文件从备份中复制到原来文件所在的路径。还原通常可以包括数据库、表空间、数据文件级别的还原。通常还原后的内容会滞后于最新的数据库SCN,因此将归档日志、联机重做日志文件中的内容更新到还原的数据文件中,这个过程称之为恢复。
恢复的几种情形
1.在mount 或open 阶段完成的灾难恢复:非系统表空间,undo表空间,所有的数据文件。
2.在nomount 阶段完成的灾难恢复:控制文件(controlfile)。
3.在mount 阶段完成的灾难恢复:系统表空间,联机重做日志文件。
一、RMAN在归档模式下的还原与恢复的简化例子
二、使用RMAN进行还原与恢复(非catalog方式)
1.数据文件丢失的恢复处理nocatalog(数据库mount状态)
--对数据库做全备
--对数据库做0级增量备份
--对表插入新记录并切换日志
--对数据库做1级增量备份
--使用RMAN连接到mount状态的数据库
--执行数据库还原
2.磁盘损坏导致数据文件无法恢复到原始位置或不想恢复到原始位置的处理(数据库mount状态)
使用set newname 命令将数据文件还原到新路径:set newname for datafile 1 to '<newdir>/system01.dbf'; --为恢复的数据文件指定新路径或重命名
使用switch命令将变更更新到控制文件:switch datafile n | all ; --等同于alter database rename file命令,该命令将恢复的数据文件重命名更新到控制文件
--下面的示例首先删除sun01_1.dbf,接下来将其恢复到oradata目录中
3.恢复表空间(数据库open状态)
--删除表空间内的数据文件,删除后在针对位于该表空间的表进行插入记录以及实施检查点进程
--也可以使用下面的命令完成同样的功能
--注意如果表空间内有多个数据文件,而仅有单个数据文件损坏则采用下面的方式处理更为妥当
恢复的几种情形
1.在mount 或open 阶段完成的灾难恢复:非系统表空间,undo表空间,所有的数据文件。
2.在nomount 阶段完成的灾难恢复:控制文件(controlfile)。
3.在mount 阶段完成的灾难恢复:系统表空间,联机重做日志文件。
一、RMAN在归档模式下的还原与恢复的简化例子
RMAN> connect target / nocatalog RMAN> startup mount; RMAN> restore database; RMAN> recover database; RMAN> alter database open;
二、使用RMAN进行还原与恢复(非catalog方式)
1.数据文件丢失的恢复处理nocatalog(数据库mount状态)
--对数据库做全备
RMAN> backup as compressed backupset 2> format '/tmp/backup/whole_%U' 3> tag =Whole_bak database; RMAN> sql 'alter system archive log current'; sql statement: alter system archive log current RMAN>
--对数据库做0级增量备份
RMAN> run { 2> allocate channel ch1 type disk; 3> backup incremental level 0 database 4> format '/tmp/backup/Inc_0_%U' 5> tag=Inc_0; 6> release channel ch1; 7> }
--对表插入新记录并切换日志
SQL> select * from t order by 1; ID NAME ---------- ---------------- 0 oracle 1 oracle 2 oracle 3 oracle 4 oracle 5 oracle 6 oracle 7 rows selected. SQL> insert into t select 7,'myrman' from dual; 1 row created. SQL> commit; Commit complete. SQL> alter system checkpoint; SQL> alter system switch logfile;
--对数据库做1级增量备份
RMAN> run{ 2> allocate channel ch1 type disk; 3> backup incremental level 1 database 4> format '/tmp/backup/Inc_1_%U' 5> tag=Inc_1; 6> release channel ch1; 7> }
SQL> shutdown immediate; --关闭数据库 SQL> ho rm $ORACLE_BASE/oradata/sunbak/*.dbf --删除所有的数据文件 */ SQL> startup mount
--使用RMAN连接到mount状态的数据库
-bash-3.00$ rman target / nocatalog Recovery Manager: Release 10.2.0.2.0 - Production on Sat Jan 26 13:24:57 2013 Copyright (c) 1982, 2005, Oracle. All rights reserved. connected to target database: SUN (DBID=1913551800, not open) using target database control file instead of recovery catalog RMAN>
--执行数据库还原
--注意当存在完整备份也同时存在级增量备份时,Oracle会自动使用级增量备份来还原数据库 RMAN> restore database; --下面可以看出还原的数据来自级增量备份 channel ORA_DISK_1: reading from backup piece /tmp/backup/Inc_0_1fo0cqbb_1_1 channel ORA_DISK_1: restored backup piece 1 piece handle=/tmp/backup/Inc_0_1fo0cqbb_1_1 tag=INC_0 --执行数据库恢复 RMAN> recover database; channel ORA_DISK_1: reading from backup piece /tmp/backup/Inc_1_1ho0crhi_1_1 channel ORA_DISK_1: restored backup piece 1 piece handle=/tmp/backup/Inc_1_1ho0crhi_1_1 tag=INC_1 --打开数据库验证恢复 RMAN> alter database open; SQL> select * from t order by 1; ID NAME ---------- ---------------- 0 oracle 1 oracle 2 oracle 3 oracle 4 oracle 5 oracle 6 oracle 7 myrman 8 rows selected. SQL>
2.磁盘损坏导致数据文件无法恢复到原始位置或不想恢复到原始位置的处理(数据库mount状态)
使用set newname 命令将数据文件还原到新路径:set newname for datafile 1 to '<newdir>/system01.dbf'; --为恢复的数据文件指定新路径或重命名
使用switch命令将变更更新到控制文件:switch datafile n | all ; --等同于alter database rename file命令,该命令将恢复的数据文件重命名更新到控制文件
--下面的示例首先删除sun01_1.dbf,接下来将其恢复到oradata目录中
--关闭数据库 SQL> shutdown immediate SQL> quit --删除文件 -bash-3.00$ rm -f /u01/oradata/sunbak/sun01_1.dbf --启到mount状态 SQL> startup mount ORACLE instance started. SQL> --查看删除文件 SQL> select file#,name,status from v$datafile; FILE# NAME STATUS ---------- ----------------------------------- ------- 1 /u01/oradata/sunbak/system01.dbf SYSTEM 2 /u01/oradata/sunbak/undotbs01.dbf ONLINE 3 /u01/oradata/sunbak/sysaux01.dbf ONLINE 4 /u01/oradata/sunbak/users01.dbf ONLINE 5 /u01/oradata/sunbak/example01.dbf ONLINE 6 /u01/oradata/sunbak/sun01_1.dbf ONLINE 7 /u01/oradata/sunbak/sun02_1.dbf ONLINE 8 /u01/oradata/sunbak/sun03_1.dbf ONLINE 8 rows selected. SQL> --连接rman bash-3.00$ rman target / nocatalog connected to target database: SUN (DBID=1913551800, not open) using target database control file instead of recovery catalog RMAN> --恢复 RMAN> run{ 2> set newname for datafile 6 to '/u01/oradata/sunbak/sun01.dbf'; 3> restore database; 4> switch datafile all; 5> recover database; 6> alter database open; 7> } --验证结果 SQL> conn user1/user1 Connected. SQL> select * from t order by 1; ID NAME ---------- ---------------- 0 oracle 1 oracle 2 oracle 3 oracle 4 oracle 5 oracle 6 oracle 7 myrman 8 rows selected. SQL>
3.恢复表空间(数据库open状态)
--删除表空间内的数据文件,删除后在针对位于该表空间的表进行插入记录以及实施检查点进程
--插入测试数据 SQL> insert into user1.t select 8,'inspur' from dual; SQL> commit; SQL> alter system checkpoint; System altered. SQL> --强制检查点后,告警日志出现错误提示,视图v$recover_file给出了故障数据文件 [oracle@oradb ~]$ tail -f alert_sun.log Errors in file /u01/admin/sun/bdump/sun_ckpt_4554.trc: ORA-01171: datafile 6 going offline due to error advancing checkpoint ORA-01116: error in opening database file 6 ORA-01110: data file 6: '/u01/oradata/sunbak/sun01.dbf' ORA-27041: unable to open file Intel SVR4 UNIX Error: 2: No such file or directory Additional information: 3 SQL> select * from v$recover_file; FILE# ONLINE ONLINE_ ERROR CHANGE# TIME ---------- ------- ------- ------------------ ---------- --------- 6 OFFLINE OFFLINE FILE NOT FOUND 0 SQL> select name,status from v$datafile where file#=6; NAME STATUS ----------------------------------- ------- /u01/oradata/sunbak/sun01.dbf RECOVER SQL> --使用RMAN命令恢复数据文件,此时数据库处于OPEN状态,因此首先需要将表空间脱机,恢复完成之后再将其联机 RMAN> run { 2> sql 'alter tablespace sun01 offline immediate'; 3> set newname for datafile 6 to '/u01/oradata/sunbak/sun01_1.dbf'; 4> restore tablespace sun01; 5> switch datafile all; 6> recover tablespace sun01; 7> sql 'alter tablespace sun01 online'; 8> } --检查状态 SQL> select name,status from v$datafile where file#=6; NAME STATUS ----------------------------------- ------- /u01/oradata/sunbak/sun01_1.dbf ONLINE SQL> SQL> select * from user1.t order by 1; ID NAME ---------- ----------------------------------- 0 oracle 1 oracle 2 oracle 3 oracle 4 oracle 5 oracle 6 oracle 7 myrman 8 inspur 9 rows selected. SQL>
--也可以使用下面的命令完成同样的功能
--注意如果表空间内有多个数据文件,而仅有单个数据文件损坏则采用下面的方式处理更为妥当
RMAN> run { 2> sql 'alter database datafile 6 offline immediate'; 3> set newname for datafile 6 to '/u01/oradata/sunbak/sun01_1.dbf'; 4> restore datafile 6; 5> switch datafile all; 6> recover tdatafile 6; 7> sql 'alter databaes datafile 6 online'; 8> }
相关文章推荐
- Oracle 基于 RMAN 的不完全恢复(incomplete recovery by RMAN)
- Oracle 基于 RMAN 的不完全恢复(incomplete recovery by RMAN)
- RMAN还原与恢复2(RMAN Incomplete Recovery)
- Oracle 基于 RMAN 的不完全恢复(incomplete recovery by RMAN)
- RMAN Recovery Catalog(恢复目录)
- RMAN Complete Recovery
- RMAN 系列(五) ---- RMAN 还原 与 恢复
- RMAN 系列(五) ---- RMAN 还原 与 恢复
- Oracle RMAN 还原与恢复(四)--在非归档模式中还原与恢复数据库
- Oracle RMAN 还原与恢复(五)--在归档模式中恢复数据库
- RMAN备份与恢复(5)——将数据文件或表空间还原到新位置!
- RMAN恢复until time or recovery window is before resetlogs time
- RMAN简明教程之五——RMAN还原和恢复
- RMAN 系列(五) ---- RMAN 还原 与 恢复
- RMAN简明教程之五——RMAN还原和恢复
- RMAN 还原与恢复
- RMAN简明教程之五——RMAN还原和恢复
- RMAN 还原与恢复
- RMAN 还原与恢复
- RMAN 还原与恢复