Chinaunix首页 | 论坛 | 博客
  • 博客访问: 142524
  • 博文数量: 12
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 600
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-09 14:36
文章分类

全部博文(12)

文章存档

2011年(1)

2008年(11)

我的朋友

分类: Oracle

2008-05-07 17:28:59

RMAN(Recovery   Manager)是DBA的一个重要工具,用于备份、还原和恢复oracle数据库,前一段时间有网友找我要,可惜没时间,趁这两天出差在外没什么事,就写了一下,供初学的朋友参考。本文将介绍RMAN的基本操作,更多的信息请参考《Oracle8i   Backup   &   Recovery     Guide》及RMAN手册,或者是OCP   Student   Guide   M09096《Backup   and   Recovery   Workshop》Volume   2,也可以通过gototop@vip.sina.com和我联系。Oracle自带的例子参考$ORACLE_HOME/rdbms/demo目录下的*.rcv脚本。  
  一、RMAN简介  
        RMAN可以用来备份和恢复数据库文件、归档日志和控制文件,也可以用来执行完全或不完全的数据库恢复。RMAN有三种不同的用户接口:COMMAND   LINE方式、GUI方式(集成在OEM中的备份管理器)、API方式(用于集成到第三方的备份软件中)。具有如下特点:  
  1)功能类似物理备份,但比物理备份强大N倍,从下面的特点可以看到;  
  2)可以压缩空块;  
  3)可以在块水平上实现增量;  
  4)可以把备份的输出打包成备份集,也可以按固定大小分割备份集;  
  5)备份与恢复的过程可以自动管理;  
  6)可以使用脚本(存在Recovery   catalog中)  
  7)可以做坏块监测  
  二、相关术语解释  
  1)Backup   sets   备份集  
      备份集顾名思义就是一次备份的集合,它包含本次备份的所有备份片,以oracle专有的格式保存。一个备份集根据备份的类型不同,可能构成一个完全备份或增量备份。  
  2)Backup   pieces   备份片  
      一个备份集由若干个备份片组成。每个备份片是一个单独的输出文件。一个备份片的大小是有限制的;如果没有大小的限制,   备份集就只由一个备份片构成。备份片的大小不能大于你的文件系统所支持的文件长度的最大值。  
  3)Image   copies   映像备份  
      映像备份不压缩、不打包、直接COPY独立文件(数据文件、归档日志、控制文件),类似操作系统级的文件备份。而且只能COPY到磁盘,不能到磁带。  
      可以作为增量备份的0级,一般用来备份控制文件。  
  4)Full   backup   全备份  
      全备份是指对数据文件中使用过的数据块进行备份,没有使用过的数据块是不做备份的,也就是说,RMAN进行备份是进行压缩的。    
  5)Incremental   backup   增量备份  
      增量备份是指备份数据文件中自从上一次同一级别的或更低级别的备份以来被修改过的数据块。   与完全备份相同,增量备份也进行压缩。  
      增量备份虽然概念很好,备份也很简单,但恢复起来却是另外一回事,不仅麻烦而且容易出错,所以实际中越来越少使用,到了Oracle   9i已经建议不再使用,以后版本会逐渐取消对增量备份的支持。  
  6)Recovery   catalog   恢复目录  
        恢复目录用于记录RMAN使用过程中的控制信息,恢复目录应该经常被同步(这在后面会讲到)。尽管我们可以使用nocatalog方式来使用RMAN,此时控制信息记录在目标数据库的控制文件中,但这样毕竟不安全,因为一旦目标数据库的控制文件损坏就意味着所有的RMAN备份失效。同样的道理恢复目录应该建立在另外一个数据库中,在下面的例子中我们称作“目录数据库”。   
   
三、创建恢复目录  
   
  1、在目录数据库中创建恢复目录所用表空间  
   
  SQL>   create   tablespace   rmants   datafile   'c:\oracle\oradata\cc\rmants.ora'   size   20M   ;  
   
  表空间已创建。  
   
  2、在目录数据库中创建RMAN用户并授权  
   
  SQL>   create   user   rman   identified   by   rman   default   tablespace   rmants   temporary   tablespace   temp   quota   unlimited   on   rmants;  
   
  用户已创建  
   
  SQL>   grant   recovery_catalog_owner   to   rman   ;  
   
  授权成功。  
   
  3、在目录数据库中创建恢复目录  
   
  C:\>rman   catalog   rman/rman  
   
  恢复管理器:版本8.1.7.0.0   -   Production  
   
  RMAN-06008:连接到恢复目录数据库  
  RMAN-06428:未安装恢复目录  
   
  RMAN>create   catalog   tablespace   rmants;  
   
  RMAN-06431:恢复目录已创建  
   
   
  4、注册目标数据库到恢复目录  
   
  注意哦,这里我的目标数据库使用的服务名称是rman,意思为要使用RMAN进行备份的数据库,而目录数据库使用的服务名称是CC。  
   
  C:\>rman   target   sys/sys@rman  
   
  恢复管理器:版本8.1.7.0.0   -   Production  
   
  RMAN-06005:连接到目标数据库:RMAN   (DBID=1303772234)  
   
  RMAN>connect   catalog   rman/rman@cc  
   
  RMAN-06008:连接到恢复目录数据库  
   
  RMAN>register   database;  
   
  RMAN-03022:正在编译命令:register  
  RMAN-03023:正在执行命令:register  
  RMAN-08006:注册在恢复目录中的数据库  
  RMAN-03023:正在执行命令:full   resync  
  RMAN-08002:正在启动全部恢复目录的   resync  
  RMAN-08004:完成全部   resync  
   
  四、使用RMAN  
   
  下面通过具体的例子来说明RMAN的使用,这里会涉及到除了恢复以外的所有RMAN操作,关于使用RMAN进行恢复的内容请参考我以前写的另外一篇文章:RMAN恢复实践。  
   
  1、备份整个数据库  
   
  RMAN>run   {  
  2>   allocate   channel   c1   type   disk;  
  3>   backup   database   format   'e:\dbbackup\2db.dmp';  
  4>   }  
   
  2、复制数据文件  
   
  RMAN>run   {  
  2>   allocate   channel   c1   type   disk;  
  3>   copy   datafile   'c:\oracle\oradata\rman\users01.dbf'   to   'e:\dbbackup\u.dbf'   tag  
  =u1215;  
  4>   }  
   
  3、查看备份及复制的信息  
   
  RMAN>list   backup;  
   
  RMAN-03022:正在编译命令:list  
   
  备份集列表  
  关键字           Recid             标记         LV     集合标记       集合计数         完成时间  
  -------   ----------   ----------   --   ----------   ----------   ----------------------  
  216           1                     417347013     0     417346992     1                     26-12月-00  
   
        备份段列表  
        关键字     Pc#   Cp#   状态                 完成时间                               段名  
        -------   ---   ---   -----------   ----------------------   ------------------------  
        217           1       1       AVAILABLE       26-12月-00                           E:\DBBACKUP\2DB.DMP  
   
        数据文件包括列表  
        文件   名称                                                                     LV   类型   检查点SCN     检查点时间  
        ----   -------------------------------------   --   ----   ----------   -------------  
        1         C:\ORACLE\ORADATA\RMAN\SYSTEM01.DBF       0     Full   33224             26-12月-00  
        2         C:\ORACLE\ORADATA\RMAN\RBS01.DBF             0     Full   33224             26-12月-00  
        3         C:\ORACLE\ORADATA\RMAN\USERS01.DBF         0     Full   33224             26-12月-00  
        4         C:\ORACLE\ORADATA\RMAN\TEMP01.DBF           0     Full   33224             26-12月-00  
        5         C:\ORACLE\ORADATA\RMAN\TOOLS01.DBF         0     Full   33224             26-12月-00  
        6         C:\ORACLE\ORADATA\RMAN\INDX01.DBF           0     Full   33224             26-12月-00  
   
  RMAN>list   copy   of   datafile   'c:\oracle\oradata\rman\users01.dbf';  
   
  RMAN-03022:正在编译命令:list  
   
  数据文件备份列表  
  关键字     文件状态   完成时间         检查点   SCN     检查点时间     名称  
  -------   ----   -   ---------------   ----------   ---------------   ------  
  226           3         A   26-12月-00             33226             26-12月-00           E:\DBBACKUP\U.DBF  
   
  4、在备份是设置相关参数  
   
  format   --文件输出格式,  
  %d--database   name,  
  %s--backup   sets   sequence   number,  
  %p--backup   pieces   sequence   number  
  filesperset   --每个备份集中所包括的文件数  
   
  更多参数请参考本文开始时列出的书。  
   
  RMAN>run   {  
  2>   allocate   channel   c1   type   disk;  
  3>   set   limit   channel   c1   kbytes   8000;  
  4>   backup  
  5>   format   'e:\dbbackup\db_%d_%s_%p.bck'  
  6>   (database   filesperset=2   );  
  7>   }  
   
  RMAN-03022:正在编译命令:allocate  
  RMAN-03023:正在执行命令:allocate  
  RMAN-08030:分配的通道:c1  
  RMAN-08500:通道   c1:sid=9   devtype=DISK  
   
  RMAN-03022:正在编译命令:set   limit  
  RMAN-03023:正在执行命令:set   limit  
   
  RMAN-03022:正在编译命令:backup  
  RMAN-03023:正在执行命令:backup  
  RMAN-08008:通道   c1:正在启动   full   数据文件备份集  
  RMAN-08502:set_count=6   set_stamp=417351064   creation_time=26-12月-00  
  RMAN-08010:通道   c1:正在指定备份集中的数据文件  
  RMAN-08522:输入数据文件   fno=00003   name=C:\ORACLE\ORADATA\RMAN\USERS01.DBF  
  RMAN-08522:输入数据文件   fno=00005   name=C:\ORACLE\ORADATA\RMAN\TOOLS01.DBF  
  RMAN-08013:通道   c1:已创建   1   段  
  RMAN-08503:段   handle=E:\DBBACKUP\DB_RMAN_6_1.BCK   comment=NONE  
  RMAN-08525:备份集完成,经过时间:00:00:03  
  RMAN-08008:通道   c1:正在启动   full   数据文件备份集  
  RMAN-08502:set_count=7   set_stamp=417351067   creation_time=26-12月-00  
  RMAN-08010:通道   c1:正在指定备份集中的数据文件  
  RMAN-08522:输入数据文件   fno=00002   name=C:\ORACLE\ORADATA\RMAN\RBS01.DBF  
  RMAN-08522:输入数据文件   fno=00006   name=C:\ORACLE\ORADATA\RMAN\INDX01.DBF  
  RMAN-08013:通道   c1:已创建   1   段  
  RMAN-08503:段   handle=E:\DBBACKUP\DB_RMAN_7_1.BCK   comment=NONE  
  RMAN-08525:备份集完成,经过时间:00:00:04  
  RMAN-08008:通道   c1:正在启动   full   数据文件备份集  
  RMAN-08502:set_count=8   set_stamp=417351071   creation_time=26-12月-00  
  RMAN-08010:通道   c1:正在指定备份集中的数据文件  
  RMAN-08522:输入数据文件   fno=00001   name=C:\ORACLE\ORADATA\RMAN\SYSTEM01.DBF  
  RMAN-08011:备份集中包括当前控制文件  
  RMAN-08013:通道   c1:已创建   1   段  
  RMAN-08503:段   handle=E:\DBBACKUP\DB_RMAN_8_1.BCK   comment=NONE  
  RMAN-08013:通道   c1:已创建   2   段  
  RMAN-08503:段   handle=E:\DBBACKUP\DB_RMAN_8_2.BCK   comment=NONE  
  RMAN-08013:通道   c1:已创建   3   段  
  RMAN-08503:段   handle=E:\DBBACKUP\DB_RMAN_8_3.BCK   comment=NONE  
  RMAN-08013:通道   c1:已创建   4   段  
  RMAN-08503:段   handle=E:\DBBACKUP\DB_RMAN_8_4.BCK   comment=NONE  
  RMAN-08013:通道   c1:已创建   5   段  
  RMAN-08503:段   handle=E:\DBBACKUP\DB_RMAN_8_5.BCK   comment=NONE  
  RMAN-08013:通道   c1:已创建   6   段  
  RMAN-08503:段   handle=E:\DBBACKUP\DB_RMAN_8_6.BCK   comment=NONE  
  RMAN-08013:通道   c1:已创建   7   段  
  RMAN-08503:段   handle=E:\DBBACKUP\DB_RMAN_8_7.BCK   comment=NONE  
  RMAN-08525:备份集完成,经过时间:00:00:19  
  RMAN-08008:通道   c1:正在启动   full   数据文件备份集  
  RMAN-08502:set_count=9   set_stamp=417351090   creation_time=26-12月-00  
  RMAN-08010:通道   c1:正在指定备份集中的数据文件  
  RMAN-08522:输入数据文件   fno=00004   name=C:\ORACLE\ORADATA\RMAN\TEMP01.DBF  
  RMAN-08013:通道   c1:已创建   1   段  
  RMAN-08503:段   handle=E:\DBBACKUP\DB_RMAN_9_1.BCK   comment=NONE  
  RMAN-08525:备份集完成,经过时间:00:00:07  
  RMAN-03023:正在执行命令:partial   resync  
  RMAN-08003:启动部分恢复目录的   resync  
  RMAN-08005:完成部分   resync  
  RMAN-08031:释放的通道:c1  
   
  5、使用脚本功能  
   
  使用脚本的目的在于方便我们操作中的方便,操作上和存储过程相似。  
   
  RMAN>create   script   l0dbbackup   {  
  2>   allocate   channel   c1   type   disk;  
  3>   backup  
  4>   format   'e:\dbbackup\db_%d_%s_%p.bck'  
  5>   (database   filesperset=2   );  
  6>   }  
   
  RMAN-03022:正在编译命令:create   script  
  RMAN-03023:正在执行命令:create   script  
  RMAN-08085:已创建脚本   l0dbbackup  
   
  RMAN>run   {execute   script   l0dbbackup;   }  
阅读(467) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~