RMAN实战

来源:互联网 发布:慕尼黑协定 知乎 编辑:程序博客网 时间:2024/05/15 15:53

  学习东西首先应想着它坏了怎么办,所以学oracle数据库最重要的就是备份与恢复,而就冷备份、热备份以及imp/exp而言,RMAN 优势是不言而喻的。

  

1.运行RMAN

   DOS下运行

   C:/>rman help

 1.2连接到rman

   必须连到目标数据库(需要备份与恢复的数据库);如果要使用恢复目录(用于存放rman元数据,可选,当使用目标数据库控制文件存放rman元数据时,在rman元数据存放填天数达到初始化参数control_file_record_keep_time是值之后,其元数据可能会被覆盖,从而导致之前的备份不能使用,通过使用恢复目录,可以永久保存rman元数据)存放RMAN元数据(rman元数据是指rman在备份、转储和恢复操作中所使用的数据);如果需要使用辅助数据库,那么还必须连到辅助数据库()

  1.2.1连接到目标数据库(不使用恢复目录)

c:\>rman target sys/oracle@demo nocatalog

   //如果不使用恢复目录,则需要指定nocatalog选项,通过指定target选项,可以连接到目标数据库;注意:必须以特权用户身份(SYSDBASYSOPER)进行连接;

也可以c:\>rman nocatalog

          c:\>connect target sys/oracle@demo

          //如果只有一个demo数据库,就不用指定了,地球人都知道

     

  1.2.2连接到目标数据库和恢复目录数据库

    c:\>rman target sys/oracle@demo catalog rman/rman@rcat

     //通过指定catalog连接到恢复目录数据库,当然要先建立 

      rman表空间

         下面简单介绍一下rman的恢复目录的配置:

          (1) create tablespace rman datafile '...\rman.dbf' size 20m;

          (2) create user rman identified by rman default tablespace rman;

          (3) grant recovery_catalog_owner,connect,resource to rman;

          (4) dos下 c:\>rman catalog rman/rman

          (5) rman>create catalog;

              rman>exit;

          (6) c:\>rman target sys/oracle@demo catalog rman/rman;

          (7) rman>register database;

             //注册目标数据库到恢复目录 

        

      当然也可以分别使用connect命令连接到目标数据库和恢复目录数据库

       c:\>rman

       rman>connect target sys/oracle@demo

       rman>connect catalog rman/rman

  1.2.3连接到目标数据库和辅助数据库

    辅助数据库(例如复制数据库、备用数据库等),通过AUXILIARY选项,可以连接到上面,当然要注意以特权用户身份(SYSDBASYSOPER)进行连接。

    c:\>rman target sys/oracle auxiliary sys/admin@aux

       //aux数据库中sys用户怎么创建我就不再赘述了啊,偷下小懒,嘻嘻~

  

   好了,到此为止前面的准备工作都做好了,下面就可以 

    用RMAN 来进行备份和恢复了。 

2. RMAN命令

   2.1.1独立命令

    除了setswitch等少数几个命令之外,多数RMAN命令都可以单独执行。

   eg: rman>shurdown immediate

       rman>startup

      是不是很神奇呀,当然最重要的就是备份与恢复咯

       rman>backup format 'd:\bk\%d_%s.bak' tablespace users; 

   2.1.2作业命令

    是指以成组方式执行的命令,类似于批处理

     注意:除了connectcreate/delete/update catalogcreate/delete/replace scriptlistrman命令外,其他rman命令都可以被包含在run块内。

    eg:

    rman>run{

        shutdown immediate;

        startup mount;

        alter database archivelog;   

        startup;  

        backup format 'd:\bk\%d_%s.bak' tablespace        users; 

      }

   2.1.3运行SQL命令

    rman>sql 'select name from v$database';

     //必须以sql开头,并且sql语句字符串必须用单引号引住

   2.1.4运行存储脚本

    rman>run {execute script s1;}

   2.1.5运行操作系统命令

    rman>run {host "dir d:\bk";}

   2.1.6运行rman命令

    rman>run { backup format 'd:\bk\%d_%s.bak' tablespace users; }

配置rman环境

 其实从oracle 9i开始所有rman会发提供了默认配置,当然DBA可以通过使用configure命令,改变rman环境配置;通过使用show命令可以查看rman环境配置

 

1.配置自动通道并行度

 RMAN>configure device type disk parallelism 3;

 //配置磁盘的并行度为3,即分配三个通道,即三个进程

 RMAN>configure device type sbt parallelism 3;

 //配置磁带的并行度为3,即分配三个通道,即三个进程

 

2.;配置所有通道的备份文件格式

 RMAN>configure channel device type disk format 'd:\bk\%d_%s_p.bak';

3.配置特定通道的备份文件格式

RMAN>configure channel 2 device type disk format 'd:\bk\%d_%s_p.bak';

 

 4.配置默认存储设备

 RMAN>configure default device type to sbt;

   //默认是磁盘,但大多数是选磁带,磁带的主要优势是价格和它可作为可拆卸介质的能力。 

5、配置备份集和备份片最大尺寸

 RMAN>configure maxsetsize to 1G;

 RMAN>configure channel device type disk maxpiecesize 500;

//默认情况下,每个备份集只包含一个备份片文件,通过配置备份集最大尺寸,可以将多个文件的备份分布到多个备份集上。

6、配置备份优化

 RMAN>configure backup optimization on ;

//备份优化用于在某些情况下跳过特定文件的备份

7、配置免除表空间

RMAN>configure execute for tablespace temp;

//这样当执行BACKUP DATABASE时,会备份除了临时表空间的所有表空间

8、配置备份冗余策略

 通过配置备份冗余策略,可以使得rman将早期备份标记为陈旧,并且使用delete obsolete命令可以删除陈旧备份。

RMAN>configure retention policy to redundancy 2;

9、配置辅助例程的数据文件名

RMAN>configure auxname for datafile 2 'd:\auxi\df_2.dbf';

10、配置快照控制文件名

 RMAN>configure snapshot controlfile name to

  'd:\oracle\oradata\snfcDEMO.ORA';

11、显示RMAN配置

 RMAN>show  all;

 一个就够了是吧

当然还有清楚RMAN配置

 RMAN>configure retention policy clear;

4、RMAN备份

注意:1RMAN备份是指使用恢复管理器备份数据文件、控制文件、归档日志和SPFILE   的方法

     2、目标数据库必须处于mountopen状态;

     3、当使用RMAN执行备份操作时,必须分配通道,并且RMAN备份是由通道所对应的服务器进程来完成的;

1、备份集:是RMAN所提供的一种用于存储备份信息的逻辑结构,并且备份集只能用RMAN命令建立和转储;

2、备份片:是用于存储备份集信息的二进制文件,备份集由一个或多个备份片组成。并且每个备份片对应一个OS文件

3、映像副本

它是单个数据文件、单个控制文件或单个归档日志的完整备份文件

当使用RMAN生成映像副本时,每个备份的文件都会生成相应的映像副本,因为映像副本文件与源文件的尺寸完全一致,所以映像副本会占用更多的存储空间,但是,映像副本只能备份到磁盘,而不能备份到磁带;

4.1建立备份集

匹配符:

 %c:当生成多重备份时,用于指定备份片的副本号

 %d: 用于指定数据库名

 %e: 用于指定归档日志序列号

 %p: 用于指定在备份集内备份片的编号

 %s: 用于指定备份集编号

 %N:用于指定表空间的名称

 %f: 用于指定绝对文件号

注意:为了防止建立的备份集出错,%s是必须的,如果要建立多个备份片文件,%p是必须的;如果要建立多个备份片副本,则%c是必须的。

4.1.1完全数据库备份集

 4.1.1.1.1一致性备份

是指关闭了数据库之后的所有数据文件和控制文件的方法;可以是archivelog/noarchivelog

C:\>rman target sys/oracle nocatalog

Rman>shurdown immediate

Rman>startup mount

Rman>backup database format='d:\bk\%d_s.dbf';

Rman>sql 'alter system archive lgo current';

4.1.1.1.2非一致性备份

注意:只能是open状态下的archivelog模式

Rman>backup database format='d:\bk\%d_s.dbf';

Rman>sql 'alter system archive lgo current';

4.1.1.1.3免除表空间备份

Rman>configure exclude for tablespace users;

Rman>backup database format='d:\bk\%d_s.dbf';

Rman>sql 'alter system archive lgo current';

4.1.1.2表空间备份集

 注意:只适用于archivelog模式,并且要求数据库必须处于open状态

Rman>backup tablespace USERS format='d:\bk\%N_%f_%s.dbf';

4.1.1.3数据文件备份集

既可以是mount也可以是open

RMAN>backup datafile 2 format='d:\bk\%N_%f_%s.dbf';

4.1.1.4控制文件的备份集

RMAN>backup current controlfile format='d:\bk\%d_%s.ctl';

当然可以备份特定数据文件和当前控制文件

RMAN>backup datafile 2 format='d:\bk\%d_%s.dbf' include current controlfile;

4.1.1.5SPFILE备份集

RMAN>backup spfile format='d:\bk\%d_%s.par';

4.1.1.6归档日志备份集

RMAN>backup format='d:\bk\%d_%s.arc' archivelog from time='sysdate-1' until time='sysdate';

备份过去一天生成的归档日志文件

4.1.1.7并行化备份集

当建立多个备份集时,为了加快备份速度,可以使用并行化备份集。即分配多个通道

RMAN>configure device type parallism 3;

RMAN>backup database format='d:\bk\%d_%s.dbf';

RMAN>configure device type desk clear;

4.1.1.8建立多重备份

RMA>backup copies 3 tablespace users

Format='d:\bk1%N_%s.dbf','d:\bk1%N_%s.dbf','d\bk1%N_%s.dbf';

4.1.1.9备份备份集

RMAN>backup backupset 32 format='d:\bk\%N_%s.dbf';

//32为备份文件的编号,很神奇吧!

4.1.1.10建立多个备份片

如果磁带存储空间不足以存放一个备份集的单个备份片文件,则需要将备份集划分为几个小的备份片文件;记着必须要指定%p匹配符;

RMAN>configure channel device type sbt maxpicesize 4G;

RMAN>backup device type sbt format='%d_%s_%p.dbf' database;

4.1.1.11备份数据文件和归档日志文件

RMAN>backup format 'd:\bk\%d_%s.bak' tablespace users plus archivelog;

 

4.1.1.12指定备份集标记

RMAN>backup format 'd:\bk\%d_%s.bak' tablespace users tag='users';

//备份标记用于为备份集提供一个有意义的名称。默认情况下,当建立备份集时,RMAN会自动为备份集提供一个标记;

5、建立映像副本

 映像副本类似于用户管理的备份,它是单个数据文件、控制文件或归档日志文件的完整备份,就像copy过来的一样,和源文件大小一模一样;不能建立SPFILE的映像副本;

使用backup as copy copy命令备份

5.1建立数据文件映像

RMAN>backup as copy format='d:\bk\dg_5,dbf' datafile 5;

或者RMAN> copy datafile 5 to 'd:\bk\ag_5.dbf';

5.2建立控制文件的映像副本

RMAN>backup as copy format='d:\bk\demo.ctl' current controlfile;

或者RMAN>copy current controlfile to 'd:\bk\demo.ctl';

5.3建立归档日志映像副本

RMAN>backup as copy format='d:\bk\arc.log' arcivelog sequence 1;

RMNA>copy archivelog 'd:\bk\archive\arc0020_53234234234.001' to 'd:\bk\arc.log';

//建立日志序列号为1的归档日志备份

6.建立增量备份和累积备份

  6.1增量备份

当制定备份和恢复策略时,为了降低备份和恢复时间,可以考虑采用增量备份和累积备份

包括01234五个备份级别

 0--完全备份

 其他级别只会备份相应级别最近一次备份以来变化的数据块,当制定备份策略时,必须首先建立增量0级备份;

方法:

 假定周日执行0级备份,周三执行1级备份,而其他时间执行2级备份

  周日:会备份数据文件的所有已用块

  周一:会备份周一变化的所有数据块

  周二:会备份周二变化的所有数据块

  周三:会包含之前的所有增量2级备份,即会备份在周日到周三之间变化的所有数据块

 ···

RMAN>backup incremental level 0 format='d:\bk\%d_%s,.dbf' tablespace users;

RMAN>backup incremental level 1 format='d:\bk\%d_%s,.dbf' tablespace users;

RMAN>backup incremental level 2 format='d:\bk\%d_%s,.dbf' tablespace users;

6.2累积备份

是指备份更低级别或n-1级别最近一次以来变化的数据块。

区别:增量备份可以降低备份时间,但如果同一级别的增量备份很多,那么当执行恢复时需要转储更多的备份集,,从而需要更多的恢复时间。

假定:周日执行增量0级备份,周一增量2级备份,周二累积2级备份,周三增量1级备份,

   周四增量2级备份,周五累积2级备份,周六累积2级备份;

  周日:会备份所有的已用块

  周一:会备份周一变化的所有数据块

  周二:会包含之前的所有2级备份,即周日到周二之间的所有数据块

  周三:会包含之前的所有2备份,即周日到周三间的所有数据块

  周四:会备份周四变化的所有块

 ···

RMAN>backup incremental level 0 format='d:\bk\%d_%s,.dbf' tablespace users;

RMAN>backup incremental level 2 format='d:\bk\%d_%s,.dbf' tablespace users;

RMAN>backup incremental level 2 cumulative format='d:\bk\%d_%s,.dbf' tablespace users;

RMAN>backup incremental level 1 format='d:\bk\%d_%s,.dbf' tablespace users;

7、显示备份信息

当使用RMAN执行备份操作时,RMAN资料库信息会被放到目标数据库的控制文件中,通过查询目标数据库的动态性能视图,可以取得RMAN资料库的相关信息;

1.查看所有归档日志映像副本的信息--v$archived_log

Sql>sql name format a45

Sql>select * from v$archived_log;

2.查看控制文件和数据文件的备份集信息--v$backup_datafile

3.查看归档日志备份集的信息--v$backup_redolog;

8、RMAN恢复

 是指当数据库文件出现介质失败或逻辑失败时,使用RMAN命令转储数据文件备份,并使用RMAN恢复命令应用归档日志和重做日志的过程。

  通过完全恢复可以将数据库恢复到失败点状态

  通过不完全恢复可以将数据库恢复到备份点与失败点之间的某个时刻的状态;

RMAN恢复只适用于archivelog模式

8.1RMAN完全恢复

 是指当数据库出现介质失败时,使用restore命令转储数据文件备份,并使用recover命令将数据文件恢复到失败点的状态

8.2RMAN不完全恢复

是指当数据库出现介质失败时,使用restore命令转储数据文件备份,并使用recover命令将数据文件恢复到失败点之间的某个时刻的备份

8.3RMAN转储命令

当使用RMAN执行介质恢复时,首先需要转储备份文件,使用restore命令,会自动转储最近的备份的文件

 Restore database --只能在mount状态下

 Restore tablespace--只能在open状态下

 Restore datafile --可以想mountopen

 Restore controlfile --只能在nomount

 Restore archivelog--可以想mountopen

 Restore spfile --只能在nomount

8.4RMAN恢复命令

 Recover database--只能在mount状态下

 Recover tablespace --只能在open状态下

 Recover datafile--可以想mountopen

8.5RMAN完全恢复

8.5.1所有数据文件被删除

 RMAN>startup force mount

RMAN>run{

  Restore database;

  Recover database;

 Sql 'alter database open';

}

8.5.2数据文件所在磁盘出现硬件故障

 如果数据文件所在硬盘出现硬件故障,那么数据文件将不能被转储到其原位置

RMAN>run{

 Startup force mount;

 Set newname for datafile 1 to 'd:\bk\system01.dbf';

 Set newname for datafile 2 to 'd:\bk\sysaux01.dbf';

```

Restore database;

Switch datafile all;

Recover database;

Sql 'alter database open';

}

8.5.3恢复system 表空间的数据文件,必须在mount

8.5.4open状态下恢复关闭后意外丢失的数据文件

 因为在mount下会增加数据库停用时间,所以应该在open下恢复数据文件,即除了system表空间的数据文件之外,其他数据文件都可以用该方法进行恢复;

Eg: 数据文件被误删除

 那么在装载数据库之后,先使用sql语句脱机丢失的数据文件,接着使用sql打开数据库,···

RMAN>run{

 Startup force mount;

 Sql 'alter database datafile 4 offline';

 Sql 'alter database open';

 Restore datafile 4;

 Recover datafile 4;

 Sql 'alter database datafile 4 online';

}

若数据文件所在磁盘出现损失

RMAN>{

Startup force mount;

Sql 'alter database datafile 4 offline';

Sql 'alter database open';

Set newname for datafile 4 to 'd:\bk\users01.dbf';

Restore datafile 4;

Recover datafile 4;

}

8.5.4open状态下恢复未备份的数据文件

 前提条件:始终在archivelog下,

方式和上面一样

8.5.5恢复表空间

当数据库在open下,如果某个表空间所有的数据文件全部出现介质失败,

RMAN>run{

Sql 'alter tablespace users offline for recover';

Restore tablespace uses;

Recover tablespace users;

Sql 'alter tablespace users online';

}

若表空间的数据文件所在磁盘出现故障,则:

RMAN>run{

Sql 'alter tablespace users offline for recover';

Set newname for datafile 4 to 'd:\bk\users.dbf';

Restore tablespace uses;

Recover tablespace users;

Sql 'alter tablespace users online';

}

8.5.6数据块介质恢复

如果数据文件的部分块出现损坏,那么当访问到这些损坏块时,会显示ORACLE DATA BLOCK CORRUPEDD```

oracle 9i开始,使用blockrecover命令可以恢复损坏数据块,而不用整个数据文件恢复

RMAN>blockrecover device type disk datafile 5 block 21,48,128;

8.6RMAN不完全恢复

不完全恢复只适用于archivelog模式,并且不完全恢复只能在mount状态下

 8.6.1基于时间恢复

 C/>set nls_date_format=yyyy-mm-dd hh24:mi:ss

 C:/>rman target sys/oracle nocatalog

 Rman>run{

 Startup force mount;

 Set until time='2011-07-19 17:31:27';

 Restore database;

 Recover database;

 Sql 'alter database open resetlogs';

 }

 Resetlogs选项打开数据库之后,会复位日志序列号,并生成新的数据库副本,10g之后执行了不完全恢复之后,建议删除早期的所有备份,并重新备份数据库;

 RMAN>run{ 

 Delete noprompt backup;

 Delete noprompt copy;

 Backup database format='d:\bk\%d_%s.bak';

 Sql 'alter system archive log current';

}

8.6.2基于SCN恢复

Sql>select current_scn from v$database;

Scn可以从预警日志中查到

 C:/>rman target sys/oracle nocatalog

 Rman>run{

 Startup force mount;

 Set until scn=$122343;

 Restore database;

 Recover database;

 Sql 'alter database open resetlogs';

 }

Resetlogs选项打开数据库之后,会复位日志序列号,并生成新的数据库副本,10g之后执行了不完全恢复之后,建议删除早期的所有备份,并重新备份数据库;

 RMAN>run{ 

 Delete noprompt backup;

 Delete noprompt copy;

 Backup database format='d:\bk\%d_%s.bak';

 Sql 'alter system archive log current';

0 0