基于rman的各种恢复

        针对RMAN进行的备份,下面从几个方面利用RMAN进行一些恢复操作。


数据库完全介质恢复
表空间的恢复
数据文件的恢复
归档文件的恢复
控制文件的恢复
参数文件SPFILE的恢复

恢复

1.        对数据库进行完全介质恢复

         数据库的所有数据文件由于种种原因全部丢失,只剩下控制文件、SPFILE、应用重做日志文件、归档文件,并且在数据文件丢失前有数据库的完全备份,在这种情况下可以对数据库进行完全介质恢复。

 1.1进入rman命令行

rman target /

1.2开始备份

backup database format=’ /oracle/u01/app/oracle/backup/%U’;

1.3一致性停止数据库

shutdown immediate;

1.4 删除所有的数据文件

rm –rf /oracle/u01/app/oracle/oradata/orcl/*.dbf

开始恢复:

1.5 利用rman启动数据库到mount状态

RMAN> startup mount;

1.6 数据库修复

RMAN> restore database;

1.7 数据库恢复

RMAN> recover database;

           可以添加其他参数:

           recover database delete archivelog;用于删除在恢复过程中产生的归档日志文件

           recover database skip tablespace temp;指定再恢复过程中跳过临时表空间,默认是不恢       复临时表空间的。

           recover database delete archivelog maxsize 100m;用于指定再恢复过程中限制自动产生       的归档大小为100m,如果超过这个大小就会被删除在循环继续使用来恢复。

1.8 启动数据库到open状态                  

RMAN>alter database open;

 

2.        表空间的恢复

在有备份的基础上我们先模拟破坏表空间,然后将其恢复

2.1 破坏users表空间

echo “” > /oracle/u01/app/oracle/oradata/orcl/users01.dbf

         2.2 切换日志

                   这时我们查询表空间users中的表不一定报错,因为在内存中还有记录,查询到的

                   是内存中的信息,需要我们手动切换日志                           

SQL>alter system switch logfile;

           多执行几次,保证切换完成

2.3 检查表空间是否可用

SQL>select * from test


ERROR at line 1:

ORA-00376:file 4 cannot be read at this time         

ORA-01110: data file 4: '/oracle/u01/app/oracle/oradata/orcl/users01.dbf'

                   这时发现users表空间已经不能使用

 

         开始恢复

         2.4 将表空间offline

RMAN> SQL ‘alter tablespace users offline’;

         2.5修复

RMAN>restore tablespace users;

         2.6 恢复

RMAN>recover tablespace users;

         2.7 将表空间online

RMAN>SQL ‘alter tablespace users online’;

         2.8 检验是否恢复

SQL>select * from test;

                   可以查询到数据,表明表空间已经恢复

 

3.        数据文件的恢复

         数据文件的恢复与表空间的恢复很相似,一个表空间可以对应多个数据文件。

         3.1 将数据文件offline

RMAN> SQL ‘alter database datafile 4 offline’;

         3.2修复

RMAN>restore datafile 4;

         3.3恢复

RMAN>recover datafile 4;

         3.4将数据文件online

RMAN>SQL ‘alter database datafile 4 online’;

         3.5 恢复数据文件并更改路径

                   利用rman执行run脚本

                   Offline数据文件;

                   修复数据文件;

                   恢复数据文件.                

RMAN> SQL ‘alter database datafile 4 offline’;

RMAN>run {

          Set newname for datafile 4 ‘/home/oracle/users01.dbf’;

          Restore datafile 4;

          Switch datafile 4;

          Recover datafile 4;

          }

RMAN>SQL ‘alter database datafile 4 online’;

 

4.        归档文件的恢复

4.1进入rman命令行

SQL>rman target /

   4.2备份归档

RMAN>backup archivelog all delete input;

4.3 检查备份

RMAN>List backup of archivelog all;

 

BS Key  Size       Device Type Elapsed Time Completion Time

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

91      59.54M     DISK        00:00:02     28-FEB-13     

        BP Key: 95   Status: AVAILABLE  Compressed: NO  Tag: TAG20130228T162106

        Piece Name: /oracle/u01/app/oracle/flash_recovery_area/ORCL/backupset/2013_02_28/o1_mf_annnn_TAG20130228T162106_8ly4vmt4_.bkp

 

  List of Archived Logs in backup set 91

  Thrd Seq     Low SCN    Low Time  Next SCN   Next Time

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

  1    311     5582914    27-FEB-13 5583269    27-FEB-13

  1    312     5583269    27-FEB-13 5601615    28-FEB-13

  1    313     5601615    28-FEB-13 5623126    28-FEB-13

  1    314     5623126    28-FEB-13 5625133    28-FEB-13

  1    315     5625133    28-FEB-13 5625135    28-FEB-13

  1    316     5625135    28-FEB-13 5625138    28-FEB-13

  1    317     5625138    28-FEB-13 5628235    28-FEB-13

  1    318     5628235    28-FEB-13 5628281    28-FEB-13

            通过查看,备份了从311-318archivelog,并保存在备份集中,删除了                         /oracle/u01/app/oracle/路径下的归档日志文件.

   4.4 恢复归档

RMAN>restore archivelog sequence between 311 and 315;

            查看log_archive_dest_1路径,发现已经恢复出311-315的归档文件

   4.4指定归档恢复路径

            通过在run脚本中来制定恢复的路径

RMAN>run {

           set archivelog destination to ‘’;

           restore archivelog sequence between 311 and 315;

           set archivelog destination to ‘’;

           restore archivelog sequence between 316 and 317;

          }

            可以指定多个路径。

 

5.        控制文件的恢复

                  在一个数据库系统中有多份控制文件冗余,但是某种情况下也需要恢复,这里采用两种方法      进行恢复。

 

         在自动备份中恢复:

5.1 开启控制文件自动备份

RMAN>CONFIGURE CONTROLFILE AUTOBACKUP ON;

5.2备份控制文件

RMAN>backup current controlfile;

5.3 设置DBID

        没有了控制文件,数据库只能启动到nomount状态,启动之前需要设置DBID

RMAN>set dbid=1324770912

        怎样获取DBID呢:

a)       创建自动备份时未改名的备份文件包含;

b)       rman连接时

c)       Rman备份日志

d)       数据库v$database视图

5.4 恢复控制文件

RMAN> restore controlfile from autobackup;

        如果没有指定路径会恢复到参数文件control_files的路径下

        指定路径:

RMAN> restore controlfile to ‘/home/oracle/control01.ctl’ from autobackup;

 

5.5 找不到恢复路径的解决办法

        在自动备份控制文件前改过备份路径,比如改到/oracle/u01/app/oracle/backup 

RMAN>CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK

       TO '/oracle/u01/app/oracle/backup/%F';

        备份表空间

RMAN> backup tablespace users;

        因为开启了自动备份控制文件,备份表空间也会备份控制文件,查询

RMAN>list backup of controlfile;

        这时提示有控制文件的备份。

        这时记录dbid=1324770912

       

SQL>shutdown immediate;

SQL>startup nomount

SQL>rman target /

RMAN>set dbid=1324770912

RMAN>restore controlfile from autobackup;

 

提示报错:

Starting restore at 28-FEB-13

using target database control file instead of recovery catalog

allocated channel: ORA_DISK_1

channel ORA_DISK_1: sid=540 devtype=DISK

 

recovery area destination: /oracle/u01/app/oracle/flash_recovery_area

database name (or database unique name) used for search: ORCL

channel ORA_DISK_1: no autobackups found in the recovery area

channel ORA_DISK_1: looking for autobackup on day: 20130228

channel ORA_DISK_1: looking for autobackup on day: 20130227

channel ORA_DISK_1: looking for autobackup on day: 20130226

channel ORA_DISK_1: looking for autobackup on day: 20130225

channel ORA_DISK_1: looking for autobackup on day: 20130224

channel ORA_DISK_1: looking for autobackup on day: 20130223

channel ORA_DISK_1: looking for autobackup on day: 20130222

channel ORA_DISK_1: no autobackup in 7 days found

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03002: failure of restore command at 02/28/2013 17:12:17

RMAN-06172: no autobackup found or specified handle is not a valid copy or piece

                 因为:在默认路径下找不到自动备份的控制文件进一步产rman参数 

RMAN>show all;

                 发现自动备份控制文件的路径并不是/oracle/u01/app/oracle/backup,而是默认路径

                 针对windows下默认路径为:$ORACLE_HOME/database

                 linux系统下默认路径为:$ORACLE_HOME/dbs             

                 那么为什么在我们之前设置了rman参数,这里又会改变呢,因为我们利用的              configure置的参数,这个改变是保存在控制文件中的,所以会找不到路径。

                针对这种情况有两种方法:

a)       将备份的文件拷贝到所需要默认的路径下:$ORACLE_HOME/dbs

b)       重新设置自动备份控制文件路径

set CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/oracle/u01/app/oracle/backup/%F';

                                    这里为什么采用set来设置呢,因为现在数据库是nomount状态,不能使用                  configure来设置。

5.6 如果数据库是非归档数据库

         修改自动备份控制文件路径时也不要使用configure来执行,因为此命令是永久生效,默认是保存到控制文件的,这样导致在恢复时找不到控制文件,使用set命令来设置修改自动备份控制文件路径。

 

从备份集中恢复

5.7 通过备份集中的备份恢复控制文件

        需要设置dbid

        启动数据库到nomount状态

        恢复控制文件        

restore controlfile from

 '/oracle/u01/app/oracle/backup/c-1324770912-20130301-08';

        这样即使更改过默认参数,只要指定备份集正确就可以恢复。

 

注意:

        再恢复控制文件后启动数据库步骤:

a)  启动数据库到mount

SQL>alter database mount;

b)  恢复数据库

SQL>recover database using backup controlfile;

 

ORA-00279: change 5756704 generated at 03/01/2013 14:48:02 needed for thread 1

ORA-00289: suggestion :

/oracle/u01/app/oracle/oradata/orcl/archive/1_1_808930082.dbf

ORA-00280: change 5756704 for thread 1 is in sequence #1

 

 

Specify log: {=suggested | filename | AUTO | CANCEL}

auto

ORA-00308: cannot open archived log

'/oracle/u01/app/oracle/oradata/orcl/archive/1_1_808930082.dbf'

ORA-27037: unable to obtain file status

Linux-x86_64 Error: 2: No such file or directory

Additional information: 3

 

 

ORA-00308: cannot open archived log

'/oracle/u01/app/oracle/oradata/orcl/archive/1_1_808930082.dbf'

ORA-27037: unable to obtain file status

Linux-x86_64 Error: 2: No such file or directory

Additional information: 3

在执行auto后,会自动应用归档,但是当前日志文件还没有归档,所以需要指定redo.log来应用剩下的日志从而恢复数据库

SQL>recover database using backup controlfile;

 

ORA-00279: change 5756704 generated at 03/01/2013 14:48:02 needed for thread 1

ORA-00289: suggestion :

/oracle/u01/app/oracle/oradata/orcl/archive/1_1_808930082.dbf

ORA-00280: change 5756704 for thread 1 is in sequence #1

 

 

Specify log: {=suggested | filename | AUTO | CANCEL}

/oracle/u01/app/oracle/oradata/orcl/redo01.log

Log applied.

Media recovery complete.

 

                            提示:Media recovery complete.恢复完成

c)  重做日志文件                   

SQL>alter database open resetlogs;

                            数据库启动完成。

 

         在数据库实例启动时恢复控制文件    

                   如果实例启动,数据库在mount或者open时,是不允许恢复控制文件的如: 

RMAN>restore controlfile from autobackup;

 

Starting restore at 01-MAR-13

using channel ORA_DISK_1

 

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03002: failure of restore command at 03/01/2013 16:27:32

RMAN-06496: must use the TO clause when the database is mounted or open

                   我们需要指定到其他路径来完成                  

RMAN>restore controlfile to '/home/oracle/controlfiletmp' from autobackup;

                            这个是允许恢复的

6.        参数文件spfile的恢复

参数文件在备份的时候即使不手工备份也会自动完成备份,一般不手动备份。

恢复类似于控制文件的恢复.

6.1  利用自动备份恢复

a)       设置dbid

b)       启动到nomount状态

c)       恢复

RMAN>restore spfile from autobackup;

6.2  指定恢复文件

           也可以通过手工指定的备份的控制文件进行恢复

RMAN>restore spfile from

‘/oracle/u01/app/oracle/backup/ c-1324770912-20130301-0a’;

6.3   恢复到制定目标地址

RMAN>restore spfile to ‘/home/oracle/spfiletmp.ora’ from

‘/oracle/u01/app/oracle/backup/ c-1324770912-20130301-0a’;

 

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

转载于:http://blog.itpub.net/26252014/viewspace-755071/

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值