您的位置:首页 > 其它

RMAN 还原与恢复

2013-11-06 13:49 681 查看
--====================-- RMAN 还原与恢复--====================
在Oracle中,三大文件即控制文件,数据文件,日志文件的丢失与破坏都将需要使用还原或恢复来使数据库正常化。而RMAN还原与恢复是实现数据库完整性、可靠性必不可少的手段之一。还原简言之即是将所需的文件从备份中复制到原来文件所在的路径。还原通常可以包括数据库、表空间、数据文件级别的还原。通常还原后的内容会滞后于最新的数据库SCN,因此将归档日志、联机重做日志文件中的内容更新到还原的数据文件中,这个过程称之为恢复。
恢复的几种情形1.在mount 或open 阶段完成的灾难恢复 非系统表空间,undo表空间,所有的数据文件2.在nomount 阶段完成的灾难恢复 控制文件(controlfile)3.在mount 阶段完成的灾难恢复 系统表空间,联机重做日志文件
一、RMAN在归档模式下的还原与恢复的简化例子RMAN> connect target /RMAN> startup mount;RMAN> restore database;RMAN> recover database;RMAN> alter database open;
二、使用RMAN进行还原与恢复(非catalog方式)
1.数据文件丢失的恢复处理--设定客户端环境变量并连接到数据库C:/>set NLS_LANG=AMERICAN_AMERICA.AL32UTF8
C:/>rman target sys/redhat@dedicated nocatalog--对数据库做全备RMAN>backup as backupset2> format'/u01/bk/rmbk/wb_%U'3> tag=whole_bak database;
RMAN> sql'alter system archive log current';--对数据库做0级增量备份RMAN> run{2> allocate channel ch1 type disk;3> backup incremental level 0 database4> format '/u01/bk/rmbk/Inc_0_%U'5> tag=Inc_0;6> release channel ch1;}
--对表插入新记录并切换日志SQL>select * from tb2;
ID NAME---------- ---------------------------------------------1 Robinson2 Henry
SQL>insert into tb2 select 3,'Danny'from dual;
SQL>commit;
SQL>alter system checkpoint;
SQL>alter system switch logfile;--对数据库做1级增量备份RMAN> run{2> allocate channel ch1 type disk;3> backup incremental level 1 database4> format '/u01/bk/rmbk/Inc_1%U'5> tag=Inc_1;6> release channel ch1;}
SQL>shutdown immediate;--关闭数据库
SQL> ho rm $ORACLE_BASE/oradata/orcl/*.dbf--删除所有的数据文件 */
SQL> startup mount
--使用RMAN连接到未mount状态的数据库RMAN> connect target sys/redhat@dedicated
connected to target database: ORCL (DBID=1257415066,not open)
--执行数据库还原--注意当存在完整备份也同时存在0级增量备份时,Oracle会自动使用0级增量备份来还原数据库RMAN>restore database;piece handle=/u01/bk/rmbk/Inc_0_0alqu132_1_1 tag=INC_0--下面可以看出还原的数据来自0级增量备份
--执行数据库恢复RMAN> recover database;piece handle=/u01/bk/rmbk/Inc_10clqu1fe_1_1 tag=INC_1
--打开数据库验证恢复RMAN>alter database open;
SQL>select * from bk.tb2;
ID NAME---------- ---------------------------------------------1 Robinson2 Henry3 Danny
2.磁盘损坏导致数据文件无法恢复到原始位置或不想恢复到原始位置的处理使用set newname 命令将数据文件还原到新路径set newname for datafile 1 to'<newdir>/system01.dbf';--为恢复的数据文件指定新路径或重命名使用switch命令将变更更新到控制文件switch datafile n |all;--等同于alter database rename file命令,该命令将恢复的数据文件重命名更新到控制文件--下面的示例首先删除tbs01.dbf,接下来将其恢复到oradata目录中SQL> ho rm $ORACLE_BASE/oradata/orcl/tbs01.dbf
SQL> startup mount force;
RMAN> connect target sys/redhat@dedicated
connected to target database: ORCL (DBID=1257415066,notopen)
RMAN> run{2> set newname for datafile 6 to'/u01/app/oracle/oradata/tbs01.dbf';3> restore database;4> switch datafile all;# update control file with new filenames5> recover database;6> alter database open;}
SQL>select file#,name,status from v$datafile where file#=6;
FILE# NAME STATUS---------- -------------------------------------------------- -------6 /u01/app/oracle/oradata/tbs01.dbfONLINESQL>selectcount(1)from bk.tb2;--表tb2位于tbs01.dbf内
COUNT(1)----------3
3.恢复表空间--删除表空间内的数据文件,删除后在针对位于该表空间的表进行插入记录以及实施检查点进程SQL> ho rm $ORACLE_BASE/oradata/tbs01.dbf
SQL>insert into bk.tb2 select 4,'Jackson' from dual;
SQL>commit;
SQL>alter system checkpoint;--强制检查点后,告警日志出现错误提示,视图v$recover_file给出了故障数据文件[oracle@oradb ~]$ tail -n 50 $ORACLE_BASE/admin/orcl/bdump/alert_orcl.logErrors infile/u01/app/oracle/admin/orcl/bdump/orcl_ckpt_4724.trc:ORA-01110: data file 6:'/u01/app/oracle/oradata/tbs01.dbf'ORA-01116: error in opening databasefile 6ORA-01110: data file 6:'/u01/app/oracle/oradata/tbs01.dbf'ORA-27041: unable toopenfileLinux Error: 2:No such fileor directorySQL>select * from v$recover_file;
FILE# ONLINE ONLINE_ ERROR CHANGE# TIME---------- ------- ------- ------------------ ---------- --------- 6 OFFLINE OFFLINE FILE NOT FOUND0
SQL>select name,status from v$datafile where file#=6;
NAME STATUS-------------------------------------------------- -------/u01/app/oracle/oradata/tbs01.dbf RECOVER--使用RMAN命令恢复数据文件,此时数据库处于OPEN状态,因此首先需要将表空间脱机,恢复完成之后再将其联机RMAN> run{2> sql 'alter tablespace tbs1 offline immediate';3> set newname for datafile 6 to'/u01/app/oracle/oradata/orcl/tbs01.dbf';4> restore tablespace tbs1;5> switch datafile all;6> recover tablespace tbs1;7> sql 'alter tablespace tbs1 online';}
SQL>select name,status from v$datafile where file#=6;--位置变动到orcl子目录下,状态变为online
NAME STATUS-------------------------------------------------- -------/u01/app/oracle/oradata/orcl/tbs01.dbfONLINE
--也可以使用下面的命令完成同样的功能--注意表空间内有多个数据文件的情形,而仅有单个数据文件损坏则采用下面的方式处理更为妥当RMAN> run{2> sql 'alter database datafile 6 offline immediate';3> set newname for datafile 6 to'/u01/app/oracle/oradata/tbs01.dbf';4> restore datafile 6;5> switch datafile all;6> recover datafile 6;7> sql 'alter databaes datafile 6 online';}
4.RMAN实现不完全恢复 对于RMAN的不完全恢复,使用Oracle的闪回特性的处理有更多的优势。步骤 a.加载数据到mount状态(建议恢复前先做备份) b.为高并发分配多个通道 c.还原所有(所需)的数据文件 d.使用until time,until sequence,until scn来恢复数据库 e.使用resetlogs打开数据库 f.全备数据库演示RMAN基于until time的例子SQL> show user;USER is "BK"SQL>create table tb1(id int,name varchar2(10));
SQL>insert into tb1 select 1,'Lancy' from dual;
SQL> ho strings $ORACLE_BASE/oradata/orcl/redo02.log| grep Lancy--查看联机日志文件中不存在刚刚插入的记录
SQL>commit;--注意commit是将日志缓冲内容写入到日志文件
SQL> ho strings $ORACLE_BASE/oradata/orcl/redo02.log| grep Lancy--提交后联机日志文件中才有新增的记录Lancy
SQL>alter system switch logfile;
SQL> ho ls $ORACLE_BASE/oradata/arch log_1_1_732989230.arclog_1_1_732989889.arc
RMAN> run{2> allocate channel ch1 type disk;3> allocate channel ch2 type disk;4> backup as compressed backupset database plus archivelog delete input5> format '/u01/bk/rmbk/wh_lg_%U'6> tag='Wholebak_Pluslog';7> release channel ch1;8> release channel ch2;}
18:10:36 SQL>drop table tb1;
RMAN> run{2> allocate channel ch1 type disk;3> allocate channel ch2 type disk;4> set until time "to_date('2010-10-21 18:10:36','yyyy-mm-dd hh24:mi:ss')";5> restore database;6> recover database;7> alter database open resetlogs;8> release channel ch1;9> release channel ch2;}
SQL>select * from tb1;
ID NAME---------- ----------1 Lancy
5. SPFILE文件丢失的恢复SPFILE参数文件可以在RMAN中进行备份,因此可以使用RMAN来恢复SPFILE文件。可以自动备份SPFILE。SPFILE的自动备份是随着控制文件的备份一起被完成的,因此可以通过自动备份控制文件来实现自动备份SPFILE文件的目的其次,在备份系统表空间时将引发控制文件的自动备份,而不论是否设置自动备份参数为ON,此时同样也备份SPFILE文件
SPFILE文件恢复步骤a. startup nomount [force];b. set dbid=dbid_no;c. restore spfile from autobackup | '<dir>'d. startup force;如果d执行失败则转到e,f,否则不用执行e,f。e. set dbid=dbid_no;f. startup;下面设定控制文件的自动备份以及设置其备份路径(注意要预先知道目标数据库的DBID,此次演示的DBID为1263182651)RMAN> configure controlfile autobackup on;RMAN> configure controlfile autobackup format for device typediskto'/u01/bk/rmbk/auto_ctl_%d_%F';RMAN>exitsys@ORCL>alter tablespace users add datafile '$ORACLE_BASE/oradata/orcl/users02.dbf'size 5m;[oracle@oradb rmbk]$ ls auto*--执行上一条alter tablespace users add datafile 语句将引发控制文件的自动备份auto_ctl_ORCL_c-1263182651-20101124-00sys@ORCL>shutdown immediate;[oracle@oradb dbs]$ mv spfileorcl.ora spfileorcl.ora.bak--将原来的spfile文件重命名[oracle@oradb ~]$ rman target / nocatalogRMAN> startup nomount force;RMAN> set dbid=1263182651;RMAN> restore spfile from autobackup;--此处并没有找到文件路径,按Oracle联机文档,在nomount状态应该可以找到RMAN-06172:no autobackup found or specified handle isnot a valid copy or pieceRMAN> restore spfile from'/u01/bk/rmbk/auto_ctl_ORCL_c-1263182651-20101124-00';--手动指定路径RMAN> startup force;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息