in

SDT Community Server

SDT Forums, Blogs, Photos server.

Coolboy

January 2007 - Posts

  • RMAN 初学者指南

    一、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 进行恢复的内容请参考我以前写的另外一篇文章: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; }
    Posted Jan 22 2007, 03:06 PM by Coolboy with no comments
    Filed under:
  • Oracle RMAN快速入门指南

     

    前言

    这篇文章主要介绍RMAN的常用方法,其中包含了作者一些自己的经验,里面的实验也基本全在WIN 2K和ORACLE 8.1.6环境下测试成功(因为这个环境比较容易实现)。

    本文借鉴了网上一些高手的相关文章,希望大侠们不要见怪,此处一并谢过。

    这篇文章主要是在北京出差期间写的,回到家后整理修改了一下,时间比较仓促,同时因为篇幅有限,一些技术细节不能一一覆盖了,只希望能够帮助新手入门的作用,想真正熟练掌握RMAN,必须经过较长时间的实践磨练才可以,尤其需要在工程中获得宝贵的故障解决经验。

    1.什么是RMAN

    RMAN可以用来备份和还原数据库文件、归档日志和控制文件。它也可以用来执行完全或不完全的数据库恢复。

    注意:RMAN不能用于备份初始化参数文件和口令文件。

    RMAN启动数据库上的Oracle服务器进程来进行备份或还原。备份、还原、恢复是由这些进程驱动的。

    RMAN可以由OEM的Backup Manager GUI来控制,但在本文章里不作重点讨论。

    2. Terminology专业词汇解释

    2.1. Backup sets备份集合

    备份集合有下面的特性:
      包括一个或多个数据文件或归档日志
      以oracle专有的格式保存
      有一个完全的所有的备份片集合构成
      构成一个完全备份或增量备份

    2.2. Backup pieces备份片

    一个备份集由若干个备份片组成。每个备份片是一个单独的输出文件。一个备份片的大小是有限制的;如果没有大小的限制, 备份集就只由一个备份片构成。备份片的大小不能大于使用的文件系统所支持的文件长度的最大值。

    2.3. Image copies镜像备份

    镜像备份是独立文件(数据文件、归档日志、控制文件)的备份。它很类似操作系统级的文件备份。它不是备份集或备份片,也没有被压缩。

    2.4. Full backup sets全备份集合

    全备份是一个或多个数据文件中使用过的数据块的的备份。没有使用过的数据块是不被备份的,也就是说,oracle 进行备份集合的压缩。

    2.5. Incremental backup sets增量备份集合

    增量备份是指备份一个或多个数据文件的自从上一次同一级别的或更低级别的备份以来被修改过的数据块。 与完全备份相同,增量备份也进行压缩。

    2.6. File multiplexing

    不同的多个数据文件的数据块可以混合备份在一个备份集中。

    2.7. Recovery catalog resyncing 恢复目录同步

    使用恢复管理器执行backup、copy、restore或者switch命令时,恢复目录自动进行更新,但是有关日志与归档日志信息没有自动记入恢复目录。需要进行目录同步。使用resync catalog命令进行同步。

    RMAN>resync catalog;
    
    RMAN-03022:正在编译命令:resync
    RMAN-03023:正在执行命令:resync
    RMAN-08002:正在启动全部恢复目录的 resync
    RMAN-08004:完成全部 resync

    3. 恢复目录

    3.1.恢复目录的概念

    恢复目录是由RMAN使用、维护的用来放置备份信息的仓库。RMAN利用恢复目录记载的信息去判断如何执行需要的备份恢复操作。

    恢复目录可以存在于ORACLE数据库的计划中。

    虽然恢复目录可以用来备份多个数据库,建议为恢复目录数据库创建一个单独的数据库。

    恢复目录数据库不能使用恢复目录备份自身。

    3.2.建立恢复目录

    第一步,在目录数据库中创建恢复目录所用表空间:

    SQL> create tablespace rman_ts datafile "d:\oracle\oradata\rman\rman_ts.dbf" size 20M;
    
    表空间已创建。

    第二步,在目录数据库中创建RMAN 用户并授权:

    SQL> create user rman identified by rman default tablespace rman_ts temporary 
      tablespace temp quota unlimited on rman_ts;
    
    用户已创建。
    
    SQL> grant recovery_catalog_owner to rman;
    
    授权成功。
    
    SQL> grant connect, resource to rman;
    
    授权成功。
    

    第三步,在目录数据库中创建恢复目录

    C:\>rman catalog rman/rman
    
    恢复管理器:版本8.1.6.0.0 - Production
    
    RMAN-06008:连接到恢复目录数据库
    RMAN-06428:未安装恢复目录
    
    RMAN>create catalog tablespace rman_ts;
    
    RMAN-06431:恢复目录已创建

    注意:虽然使用RMAN不一定必需恢复目录,但是推荐使用。因为恢复目录记载的信息大部分可以通过控制文件来记载,RMAN在恢复数据库时使用这些信息。不使用恢复目录将会对备份恢复操作有限制。

    3.3.使用恢复目录的优势

    可以存储脚本;

    记载较长时间的备份恢复操作;

    4. 启动RMAN

    RMAN为交互式命令行处理界面,也可以从企业管理器中运行。

    为了使用下面的实例,先检查环境符合:

      the target database is called "his" and has the same TNS alias
      user rman has been granted "recovery_catalog_owner "privileges
      目标数据库的连接用户为internal帐号,或者以其他SYSDBA类型帐号连接  
      the recovery catalog database is called "rman" and has the same TNS alias
      the schema containing the recovery catalog is "rman" (same password)

    在使用RMAN前,设置NLS_DATE_FORMAT 和NLS_LANG环境变量,很多RMAN LIST命令的输出结果是与日期时间相关的,这点在用户希望执行以时间为基准的恢复工作也很重要。

    下例是环境变量的示范:

    NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
    NLS_DATE_FORMAT=DD-MON-YYYY HH24:MI:SS

    为了保证RMAN使用时能连接恢复目录,恢复目录数据库必须打开,目标数据库至少要STARTED(unmount),否则RMAN会返回一个错误,目标数据库必须置于归档模式下。

    4.1.使用不带恢复目录的RMAN

    设置目标数据库的 ORACLE_SID ,执行:

    % rman nocatalog
    RMAN> connect target
    RMAN> connect target internal/<PASSWORD>@his

    4.2.使用带恢复目录的RMAN

    % rman rman_ts rman/rman@rman
    RMAN> connect target
    
    % rman rman_ts rman/rman@rman target internal/<PASSWORD>@his

    4.3.使用RMAN

    一旦连接到目标数据库,可以通过交互界面或者事先存储的脚本执行指定RMAN命令,下面是一个使用RMAN交互界面的实例:

    RMAN> resync catalog;
    RMAN-03022:正在编译命令:resync
    RMAN-03023:正在执行命令:resync
    RMAN-08002:正在启动全部恢复目录的 resync
    RMAN-08004:完成全部 resync

    使用脚本的实例:

    RMAN> execute script alloc_1_disk;

    创建或者替代存储的脚本:

    RMAN> replace script alloc_1_disk { 
       2> allocate channel d1 type disk;
       3> }

    5.注册或者注销目标数据库

    5.1.注册目标数据库

    数据库状态:

    恢复目录状态:打开

    目标数据库:加载或者打开

    目标数据库在第一次使用RMAN之前必须在恢复目录中注册:

    第一步,启动恢复管理器,并且连接目标数据库:

    C:\>rman target internal/oracle@his catalog rman/rman@rman
    恢复管理器:版本8.1.6.0.0 - Production
    RMAN-06005:连接到目标数据库:HIS (DBID=3021445076)
    RMAN-06008:连接到恢复目录数据库

    第二步,注册数据库:

    RMAN> register database;
    RMAN-03022:正在编译命令:register
    RMAN-03023:正在执行命令:register
    RMAN-08006:注册在恢复目录中的数据库
    RMAN-03023:正在执行命令:full resync
    RMAN-08002:正在启动全部恢复目录的resync
    RMAN-08004:完成全部resync
    

    5.2.注销目标数据库

    RMAN提供了一个注销工具,叫DBMS_RCVCAT工具包,请注意一旦注销了该目标数据库,就不可以使用恢复目录中含有的备份集来恢复数据库了。

    为了能注销数据库,需要获得数据库的标识码(DB_ID)和数据库键值(DB_KEY)。其中连接目标数据库时将会获得DB_ID。

    C:\>rman target internal/oracle@his catalog rman/rman@rman
    恢复管理器:版本8.1.6.0.0 - Production
    RMAN-06005:连接到目标数据库:HIS (DBID=3021445076)
    RMAN-06008:连接到恢复目录数据库
    其中DBID=3021445076,利用DBID=3021445076查询数据库键值码,连接到目标数据库,查询db表:
    SQL> select * from db;
    
      DB_KEY     DB_ID      CURR_DBINC_KEY
      ---------- ---------- --------------
      1          3021445076 2

    获得DB_KEY=1,这样,该目标数据库DB_KEY=1,DBID=3021445076,利用两个值使用DBMS_RCVCAT工具包就可以注销数据库:

    SQL> execute dbms_rcvcat.unregisterdatabase(1,3021445076);
    PL/SQL 过程已成功完成。

    至此,注销数据库操作完成。

    6.操作已有的备份

    6.1.加入目录数据库

    数据库状态:

    恢复目录:打开

    目标数据库:加载或者打开

    如果存在8.x版本以前创建的备份数据想注册到目标数据库,可以采用如下手工方式加入到恢复目录中

    RMAN> catalog datafilecopy "/oracle/ .... /system01.dbf"; 

    使用如下命令显示恢复目录中包含的文件

    RMAN> list copy of database;

    6.2.从目录数据库中删除

    第一步:查看备份信息:

    RMAN>list backup;
    RMAN-03022:正在编译命令:list

    备份集列表

    关键字  Recid      标记       LV 集合标记   集合计数   完成时间
    ------- ---------- ---------- -- ---------- ---------- ----------------------
    1104    2          501364455  0  501364446  2          06-8月 -03

    备份段列表

    关键字  Pc# Cp# 状态        完成时间               段名
    ------- --- --- ----------- ---------------------- ------------------------
    1106    1   1   AVAILABLE   06-8月 -03             D:\ORACLE\ORA81\DATABASE\02EU4DMU_1_1

    数据文件包括列表

    文件 名称                                  LV 类型 检查点SCN  检查点时间
    ---- ------------------------------------- -- ---- ---------- -------------
       3 D:\ORACLE\ORADATA\HIS\USERS01.DBF      0 Full 160052     06-8月 -03

    备份集的关键字为1104。

    第二步:定义delete通道:

    RMAN>allocate channel for delete type disk;
    RMAN-03022:正在编译命令:allocate
    RMAN-03023:正在执行命令:allocate
    RMAN-08030:分配的通道:delete
    RMAN-08500:通道 delete:sid=19 devtype=DISK

    第三步:删除backupset备份集

    RMAN>change backupset 1104 delete;
    RMAN-03022:正在编译命令:change
    RMAN-08073:已删除备份段
    RMAN-08517:备份段 handle=D:\ORACLE\ORA81\DATABASE\02EU4DMU_1_1 recid=2 stamp=50 1364447
    RMAN-03023:正在执行命令:partial resync
    RMAN-08003:启动部分恢复目录的 resync
    RMAN-08005:完成部分 resync

    注意:部分执行删除备份集、备份片或者维护恢复目录的命令,需要先指定通道,如:

    RMAN>allocate channel for delete type disk;
    
    RMAN>allocate channel for maintenance type disk;

    7.在非归档模式下备份

    数据库状态:

    恢复目录:打开

    目标数据库:例程启动或者数据库加载

    恢复目录数据库需要打开,目标数据库必须启动(或者加载)。因为目标数据库不在归档模式下,所以当进行备份恢复操作的时候数据库无法打开。不可以将表空间置于热备份模式上进行等同于文件系统级的拷贝,如果在非归档模式,数据库打开的状态下不能进行数据文件的备份。

    7.1.数据库完全备份

    RMAN> run {
       2> # backup the complete database to disk
       3> allocate channel dev1 type disk;
       4> backup
       5> full
       6> tag full_db_backup
       7> format "/oracle/backups/db_t%t_s%s_p%p"
       8> (database);
       9> release channel dev1;
      10> }

    行#
    2: 表明该行为注释行(#是注释符)
    3&9: See section 15 - Channels通道定义
    5: Full backup (default if full or incremental not specified)完全备份模式(缺省模式)
    6: Meaningful string (<=30 chars)(备份集标识,<=30个字符)
    7: Filename to use for backup pieces, including substitution variables. 备份片使用的文件名,可以包含代替变量。
    8: Indicates all files including controlfiles are to be backed up表明备份所有数据文件包括控制文件

    通过下面的命令显示恢复目录中记载的备份集信息:

    RMAN> list backupset of database;
    							
Copyright SDT, 2006-2007. All rights reserved.