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也会自动生成两个备份集,分别用于归档日志和数据文件。
· 备份集可以是完全备份或者是增量备份。完全备份包含数据库使用过的数据文件的全部数据块(及没有使用过的不会被备份)。增量备份只含有在最后一次统计或更低级的备份之后备修改过的数据块。
· 增量备份使用CUMULATIVE和nonCUMULATIVE两个选项
· 使用restore命令从备份集中恢复文件
2. 数据文件拷贝(即,印象拷贝,使用copy命令创建)
· 数据文件拷贝是使用Oracle Server Process进程创建,而不是使用OS创建。
· 拷贝之前,不需要使用类似alter tablespace ... begin backup等命令。
· 可以使用数据文件拷贝直接替换原来的文件而无需恢复,但是必须用set ewname或者switch命令使数据文件拷贝成为当前版本。必要时,可以在数据文件拷贝上进行介质恢复
3. 操作系统备份(如copy, cp,等OS命令)
· 对于这种备份,可以用Rman的catalog命令把他们注册到恢复目录中。
· 备份时必须使用类似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用户授予connect,resource,Recovery_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 log和archive 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
通道 ORA_DISK_1: 已复制数据文件 3
输出文件名=E:/DRSYS01.BAK recid=4 stamp=452181142
通道 ORA_DISK_1: 已复制数据文件 4
输出文件名=E:/INDX01.BAK recid=5 stamp=452181153
通道 ORA_DISK_1: 已复制数据文件 5
输出文件名=E:/TOOLS01.BAK recid=6 stamp=452181160
通道 ORA_DISK_1: 已复制数据文件 6
输出文件名=E:/USERS01.BAK recid=7 stamp=452181167
通道 ORA_DISK_1: 已复制数据文件 7
输出文件名=E:/XDB01.BAK recid=8 stamp=452181179
通道 ORA_DISK_1: 已复制数据文件 9
输出文件名=E:/RMAN01.BAK recid=9 stamp=452181193
通道 ORA_DISK_1: 已复制当前的控制文件
输出文件名=E:/CONTROL.BAK
完成 copy 于 26-1月 -02
RMAN>
在9i中,Rman有三种命令方式
1) 单一命令(Standalone Commands)
· Standalone Commands命令不能出现在Run子命令中,只能运行在RMAN命令提示符下。
· 下列命令属于Standalone Commands:
n CONNECT
n CONFIGURE
n CREATE CATALOG, DROP CATALOG, UPGRADE CATALOG
n CREATE SCRIPT, DELETE SCRIPT, REPLACE SCRIPT
n LIST
n REPORT
2) 作业命令(Job Commands)
· Job Commands命令必须出现在使用Run命令的备份集中。Run命令定义了一个命令执行单元。当最后一条命令执行完毕,Oracle会释放掉所有服务器端的资源。
· 下列命令属于Job Commands:
n ALLOCATE CHANNEL
n SWITCH
3) 特殊命令(Command Exceptions)
· 这些命令既可以作为Standalone Commands,也可以作为Job Commands。放在Run命令中。这些命令通常会自动分配chanel,不管怎样,如果要手工分配chanel,则只能在Run命令中使用。
n BACKUP
n BLOCKRECOVER
n COPY
n RESTORE
n RECOVER
n VALIDATE
Rman命令的执行方式
1) 交互模式(Interactive Mode):
在Rman提示符下交互的执行Rman备份命令的方式。如:
RMAN> backup database;
2) 批模式(Batch Mode)
将要用的Rman备份命令写到一个脚本中,在命令行中执行这个脚本的方式。,如;
C:/>rman TARGET / CATALOG rman/tman@test CMDFILE e:/test_b1.rcv LOG e:/testb1_log.f
3) 使用存储脚本(Stored Scripts)
存储脚本是存储在恢复目录中的,我们可以使用存储脚本进行备份,恢复测试等工作。