原创 RMAN的使用收藏

新一篇: 浅谈关于redo log file的故障处理 | 旧一篇: 有儿媳妇了,真高兴

 

RMAN的使用

 

作者:张大鹏

 

 

 

 

 

RMAN ( Recovery Manager, 恢复管理器 )是从Oracle 8 开始提供的一套用于备份和恢复的有利工具,它有两种使用界面:GUI(图形用户界面)CLI(命令行界面)。使用Rman不但可以完成Oracle 数据库备份和恢复的各种任务,还具有相当全面的报表功能。

 

使用Rman的前题

?         管理本地数据库可以使用OS认证,即在初始化参数文件中设置REMOTE_LOGIN_PASSWORDFILE=NONE;但是要管理远程数据库必须使用口令文件验证即设置参数REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE

?         做备份和恢复的用户必须拥有SYSDBA权限

?         备份中使用的设备必须是RMAN用户有权使用的

?         要使用RMAN备份数据到磁带机上,则还需要安装和配置类似Legato Storage Manager的备份介质管理软件。

 

使用Rman进行Oracle数据库备份的执行过程

1.       当用户发出一条RMAN命令来备份数据库的时候,Rman首先要链接到目标数据库,即验证用户的连接权限;

2.       检查是否安装了恢复目录;

3.       验证该数据库是否已经注册到RMAN

4.       如果没有注册,则报错声明数据库没有注册,并要求用户注册该数据库;

5.       如果已经注册,则建立服务器会话连接,并且编译用户在Rman提示符下发出的备份命令。

 

OS命令备份方式相比,使用RMAN的优点

?         备份执行期间不需要人工干预,因此减少了误操作的机会;

?         可以有效的将备份和恢复结合起来;

?         支持除逻辑备份以外的所有备份类型,包括完全备份,增量备份,表空间备份,数据文件备份,控制文件备份以及归档日志文件备份;

?         可以识别corrupted block

?         方便的实现定期(定时)备份;

?         自动生成备份日志;

?         Rman的备份教本和OS无关,方便移植;

?         强大的报表功能可以方便的获悉备份的可用性

 

 

OS命令备份方式相比,使用RMAN的缺点

?         备份过程不透明;

?         Rman备份的数据只有使用Rman才能恢复;

?         如果管理网络上的多个数据库,通常会使用一个单独的数据库来作为Rman恢复目录,如果这个数据库出现故障,那么所作的所有数据库备份也都不能使用,除非恢复这个数据库。那么为了保证这个用于存放Rman恢复目录的数据库出现故障,通常还要对这个数据库使用OS命令备份。

?         如果有一个数据库需要备份,那么备份信息会纪录在控制文件中,所以控制文件不许多处备份,不能丢失。

?         Rman备份不能备份REDO LOG FILES,参数文件(init.ora),口令文件,操作系统文件,以及OFFLINE的文件。

 

Rman支持的备份类型

1.      备份集(使用backup命令创建)

·           备份集可以包括归档日志或者数据文件,但是不能同时包括两者,即归档日志和数据文件不能被合并成一个备份集,即便是在一个备份操作中同时选择了备份归档日志和数据文件,Rman也会自动生成两个备份集,分别用于归档日志和数据文件。

·           备份集可以是完全备份或者是增量备份。完全备份包含数据库使用过的数据文件的全部数据块(及没有使用过的不会被备份)。增量备份只含有在最后一次统计或更低级的备份之后备修改过的数据块。

·           增量备份使用CUMULATIVEnonCUMULATIVE两个选项

·           使用restore命令从备份集中恢复文件

 

2.      数据文件拷贝(即,印象拷贝,使用copy命令创建)

·           数据文件拷贝是使用Oracle Server Process进程创建,而不是使用OS创建。

·           拷贝之前,不需要使用类似alter tablespace ... begin backup等命令。

·           可以使用数据文件拷贝直接替换原来的文件而无需恢复,但是必须用set ewname或者switch命令使数据文件拷贝成为当前版本。必要时,可以在数据文件拷贝上进行介质恢复

 

3.      操作系统备份(如copy, cp,等OS命令)

·           对于这种备份,可以用Rmancatalog命令把他们注册到恢复目录中。

·           备份时必须使用类似alter tablespace ... begin backup等命令。

 

 

·           查看备份集:

RMAN> list backupset;

 

 

备份集列表

===================

 

BS 关键字  类型 LV 大小       设备类型经过时间 完成时间

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

128     Full    424K       DISK        00:00:02     25-1 -02

BP 关键字: 129   状态: AVAILABLE   标记:TAG20020125T105458

段名:E:\ORACLE\ORA92\DATABASE\03DF4GC3_1_1

  备份集 128 中的数据文件列表

  文件 LV 类型 Ckp SCN    Ckp 时间   名称

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

  6       Full 676301     25-1 -02 E:\ORACLE\ORA92\TEST\USERS01.DBF

 

RMAN>

 

 

·           查看archive logs的备份:

RMAN> list copy;

 

已存档的日志副本列表

关键字     Thrd Seq     S 短时间     名称

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

103     1    29      A 16-1 -02 E:\ORACLE\ORADATA\TEST\ARCHIVE\1_29.ARC

104     1    30      A 16-1 -02 E:\ORACLE\ORADATA\TEST\ARCHIVE\1_30.ARC

105     1    31      A 17-1 -02 E:\ORACLE\ORADATA\TEST\ARCHIVE\1_31.ARC

106     1    32      A 18-1 -02 E:\ORACLE\ORADATA\TEST\ARCHIVE\1_32.ARC

107     1    33      A 18-1 -02 E:\ORACLE\ORADATA\TEST\ARCHIVE\1_33.ARC

108     1    34      A 19-1 -02 E:\ORACLE\ORADATA\TEST\ARCHIVE\1_34.ARC

109     1    35      A 21-1 -02 E:\ORACLE\ORADATA\TEST\ARCHIVE\1_35.ARC

110     1    36      A 21-1 -02 E:\ORACLE\ORADATA\TEST\ARCHIVE\1_36.ARC

111     1    37      A 22-1 -02 E:\ORACLE\ORADATA\TEST\ARCHIVE\1_37.ARC

112     1    38      A 22-1 -02 E:\ORACLE\ORADATA\TEST\ARCHIVE\1_38.ARC

113     1    39      A 22-1 -02 E:\ORACLE\ORADATA\TEST\ARCHIVE\1_39.ARC

114     1    40      A 23-1 -02 E:\ORACLE\ORADATA\TEST\ARCHIVE\1_40.ARC

115     1    41      A 24-1 -02 E:\ORACLE\ORADATA\TEST\ARCHIVE\1_41.ARC

 

RMAN>

 

创建恢复目录

 

1.       建立一个用户存储恢复目录的表空间(Rman)和一个做Rman备份和恢复的用户(Rman):

SQL> CREATE TABLESPACE Rman DATAFILE 'E:\ORACLE\ORA92\TEST\rman01.dbf' SIZE 50M

  2  EXTENT MANAGEMENT LOCAL AUTOALLOCATE;

表空间已创建。

 

SQL> create user rman identified by rman

  2  default tablespace rman

  3  temporary tablespace temp

  4  quota unlimited on rman

  5  quota 0m on system;

用户已创建

 

SQL>

 

2.       Rman用户授予connectresourceRecovery_Catalog_Owner权限和角色:

 

SQL> grant connect,resource,Recovery_Catalog_Owner to rman;

 

授权成功。

 

SQL>

 

3.       连接到恢复目录数据库:

C:\>rman catalog rman/rman@test target lunar/lunar@test

 

恢复管理器: 版本9.2.0.1.0 - Production

 

Copyright (c) 1995, 2002, Oracle Corporation.  All rights reserved.

 

连接到目标数据库: TEST (DBID=1749233635)

连接到恢复目录数据库

未安装恢复目录

RMAN>

 

4.       创建恢复目录:

Oracle 8i中:

create catalog tablespace ‘RMAN’;

(注意在8i当中,表空间的名字区分大小写,并且必须被单引号括起来使用)

 

Oracle 9i中:

RMAN> create catalog

 

恢复目录已创建

 

RMAN>

 

 

注册数据库

 

RMAN> register database;

 

注册在恢复目录中的数据库

正在启动全部恢复目录的 resync

完成全部 resync

 

RMAN>

 

 

由于redo logarchive log的信息不会自动更新到恢复目录,所以需要定期的同步恢复目录。

恢复目录同步

 

RMAN> resync catalog;

 

正在启动全部恢复目录的 resync

完成全部 resync

 

RMAN>

 

 

从恢复目录中注销已注册的数据库

要点:

1.       使用DBMS_RCVCAT 包实现;

2.       一旦注销,该目标数据库保存在这个恢复目录中的备份集就不可用了;

3.       注销数据库必须知道目标数据库的标识码(DB_ID)和数据库键值(DB_KEY);

操作:

1.       目标数据库的标识码(DB_ID)需要在连接时查看:

2.       数据库键值(DB_KEY)按照如下方法查看:

SQL>  select db_key,rpad(to_char(db_id),12) "DB_ID_NUMBER"

  2   from db

  3   where db_id='1749233635'

  4  /

 

    DB_KEY DB_ID_NUMBER

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

         1 1749233635

 

SQL>

(因为db表示rman用户的对象,所以必须以rman用户连接)

3.       注销数据库:

SQL> execute dbms_rcvcat.unregisterdatabase(1,1749233635);

 

PL/SQL 过程已成功完成。

 

SQL>

 

 

改变恢复目录

如果从恢复目录中删除一个备份片、数据文件拷贝或者归档日志的引用,就需要使用change命令更新恢复目录。

例:删除一个文件的拷贝

RMAN> LIST BACKUP;

 

 

备份集列表

===================

 

BS 关键字  类型 LV 大小       设备类型经过时间 完成时间

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

117     Full    424K       DISK        00:00:03     24-1 -02

BP 关键字: 118   状态: AVAILABLE   标记:TAG20020124T194408

段名:E:\ORACLE\ORA92\DATABASE\01DF2R09_1_1

  备份集 117 中的数据文件列表

  文件 LV 类型 Ckp SCN    Ckp 时间   名称

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

  6       Full 658191     24-1 -02 E:\ORACLE\ORA92\TEST\USERS01.DBF

 

BS 关键字  类型 LV 大小       设备类型经过时间 完成时间

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

121     Full    424K       DISK        00:00:02     24-1 -02

BP 关键字: 122   状态: AVAILABLE   标记:TAG20020124T195718

段名:E:\ORACLE\ORA92\DATABASE\02DF2ROU_1_1

  备份集 121 中的数据文件列表

  文件 LV 类型 Ckp SCN    Ckp 时间   名称

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

  6       Full 658520     24-1 -02 E:\ORACLE\ORA92\TEST\USERS01.DBF

 

RMAN>

RMAN> CHANGE BACKUPSET 121 DELETE;

 

使用通道 ORA_DISK_1

 

备份段列表

BP 关键字  BS 关键字  Pc# Cp# 状态      设备类型段名称

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

122     121     1   1   AVAILABLE   DISK        E:\ORACLE\ORA92\DATABASE\02DF2RO

U_1_1

 

是否确定要删除以上对象 (输入 YES NO)? YES

已删除备份段

备份段 handle=E:\ORACLE\ORA92\DATABASE\02DF2ROU_1_1 recid=2 stamp=452030238

1 对象已删除

 

 

RMAN>

 

 

完全备份数据库的规则

·           完全数据库备份包含所有属于数据库的控制文件和数据文件,备份包括全部数据块,无论它们是否使用过。

·           当数据库打开时进行完全数据库备份,要求数据库必须在ARCHIVELOG模式;当数据库关闭时进行完全数据库备份,要求数据库必须在NOARCHIVELOG模式。

·           当数据库在ARCHIVELOG模式时,可以进行完全备份,表空间备份和数据文件备份;当数据库在NOARCHIVELOG模式时,只能进行完全备份。

 

NOARCHIVELOG模式下进行完全备份

9i中:

1)       确定数据的归档模式为NOARCHIVELOG

SQL> select log_mode from v$database;

 

LOG_MODE

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

NOARCHIVELOG

 

SQL>

 

2)       进行完全备份

C:\>rman target /

 

恢复管理器: 版本9.2.0.1.0 - Production

 

Copyright (c) 1995, 2002, Oracle Corporation.  All rights reserved.

 

已连接到目标数据库 (未启动)

 

RMAN>

RMAN> startup mount;

 

Oracle 例程已启动

数据库已加载

 

系统全局区域总计     135338868 字节

 

Fixed Size                      453492 字节

Variable Size                109051904 字节

Database Buffers              25165824 字节

Redo Buffers                    667648 字节

 

RMAN> backup database;

 

启动 backup 25-1 -02

分配的通道: ORA_DISK_1

通道 ORA_DISK_1: sid=11 devtype=DISK

通道 ORA_DISK_1: 正在启动 full 数据文件备份集

通道 ORA_DISK_1: 正在指定备份集中的数据文件

在备份集中包含当前的 SPFILE

备份集中包括当前控制文件

输入数据文件 fno=00001 name=E:\ORACLE\ORA92\TEST\SYSTEM01.DBF

输入数据文件 fno=00003 name=E:\ORACLE\ORA92\TEST\DRSYS01.DBF

输入数据文件 fno=00002 name=E:\ORACLE\ORA92\TEST\UNDOTBS01.DBF

输入数据文件 fno=00007 name=E:\ORACLE\ORA92\TEST\XDB01.DBF

输入数据文件 fno=00009 name=E:\ORACLE\ORA92\TEST\RMAN01.DBF

输入数据文件 fno=00004 name=E:\ORACLE\ORA92\TEST\INDX01.DBF

输入数据文件 fno=00005 name=E:\ORACLE\ORA92\TEST\TOOLS01.DBF

输入数据文件 fno=00006 name=E:\ORACLE\ORA92\TEST\USERS01.DBF

通道 ORA_DISK_1: 正在启动段 1 25-1 -02

通道 ORA_DISK_1: 已完成段 1 25-1 -02

handle=E:\ORACLE\ORA92\DATABASE\05DF51K1_1_1 comment=NONE

通道 ORA_DISK_1: 备份集已完成, 经过时间:00:01:27

完成 backup 25-1 -02

 

RMAN>

 

 

 

创建完全数据库备份的数据文件拷贝

(注意,先要取保已经数据库在mount状态下)

9i:

1)       首先查看需要备份的数据文件:

RMAN> report schema;

 

数据库方案报表

文件    KB      表空间               RB segs    数据文件名称

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

1        358400 SYSTEM               ***     E:\ORACLE\ORA92\TEST\SYSTEM01.DBF

2         51200 UNDOTBS1             ***     E:\ORACLE\ORA92\TEST\UNDOTBS01.DBF

3        102400 DRSYS                ***     E:\ORACLE\ORA92\TEST\DRSYS01.DBF

4         30720 INDX                 ***     E:\ORACLE\ORA92\TEST\INDX01.DBF

5         30720 TOOLS                ***     E:\ORACLE\ORA92\TEST\TOOLS01.DBF

6         30720 USERS                ***     E:\ORACLE\ORA92\TEST\USERS01.DBF

7         51200 XDB                  ***     E:\ORACLE\ORA92\TEST\XDB01.DBF

9         51200 RMAN                 ***     E:\ORACLE\ORA92\TEST\RMAN01.DBF

 

RMAN>

 

 

2)       创建完全数据库备份的数据文件拷贝

RMAN> copy

2> datafile 1 to 'e:\sys01.bak',

3> datafile 2 to 'e:\undo01.bak',

4> datafile 3 to 'e:\drsys01.bak',

5> datafile 4 to 'e:\indx01.bak',

6> datafile 5 to 'e:\tools01.bak',

7> datafile 6 to 'e:\users01.bak',

8> datafile 7 to 'e:\xdb01.bak',

9> datafile 9 to 'e:\rman01.bak',

10>  current controlfile to 'e:\control.bak';

 

启动 copy 26-1 -02

使用通道 ORA_DISK_1

通道 ORA_DISK_1: 已复制数据文件 1

输出文件名=E:\SYS01.BAK recid=2 stamp=452181102

通道 ORA_DISK_1: 已复制数据文件 2

输出文件名=E:\UNDO01.BAK recid=3 stamp=452181117