RMAN备份 oracle
一、为什么要用RMAN RMAN是Recovery Manager的简称,也就是恢复管理器,是ORACLE的备份恢复工具。我们上几章所讲的备份恢复,是用户管理的备份恢复。用户管理的备份恢复已经可以完成各种备份恢复操作,为什么还要用RMAN呢?最重要的一点是,当数据文件比较多,而且有时新增数据文件、有时减少数据文件。备份的时间一长,有时候我们自己都容易忘记谁被备份了,而谁还没有备份。如果我想让每个数据文件都有两份备份,那么哪个数据文件的备份数量还达不到要求。等等,这些问题,在用户管理的备份恢复下,因为你备份了谁,在ORACLE中并没有记录,你必须去操作系统中查阅磁盘文件,如果数据文件比较多,这将是一个非常繁锁的过程。而且,也很容易出现遗漏。我见过一家企业,因为备份策略是以前就建好的,没有使用RMAN,运行了很久,没有出过什么问题,因此也没有人敢提出升级到RMAN。数据库管理就是这样,如果它运行的好好的,性能、安全性上都能满足需要,就没有必要动它。谁知道改变它会有什么后果呢。这家企业的备份策略使用了大量的操作系统Shell脚本、ORACLE中SQL*Plus脚本,自己建立了很多表,每备份一次,都把备份的数据件名记进表中,需要知道数据文件、控制文件的备份情况时,就去统计表。其实这基本上实现了简单的RMAN的功能。但是方便用户管理备份,这只是RMAN诸多优点中的一项,RMAN的备份性能要高于用户管理的备份,RMAN可以实现块级恢复等等,这些功能就不要利用脚本自己就可以实现的了。总之,经过8i、9i、10G几代的发展,RMAN已经成为了ORACLE中的最要的备份恢复工具,我们有什么备份恢复操作,要尽量使用RMAN来完成。好,下面,我们就开始介绍RMAN的使用。
二、如何进入RMAN 使用RMAN和使用SQL*Plus一样。只是在连接SYS用户时,不需要AS SYSDBA。 D:\\Documents and Settings\\JJBOBO1>set oracle_sid=uplooking D:\\Documents and Settings\\JJBOBO1>rman target /
恢复管理器: Release 10.2.0.1.0 - Production on 星期三 5月 28 14:07:20 2008 Copyright (c) 1982, 2005, Oracle. All rights reserved. 连接到目标数据库: FOUR10G (DBID=2924364082) Target的作用,是报诉ORACLE,我们所连接的是目标数据库。我们也可以在进行RMAN之后再连接: RMAN> connect target / 已连接到目标数据库 当然,也可以把“ / ”换为SYS/密码。但是不能像SQL*Plus那样,把CONNECT省略为CONN。 其实在RMAN中,无论用什么用户连接,RMAN都将自动的加上去AS SYSDBA。所有,我们就不必再加AS SYSDBA了。 我们可以在RMAN中执行一些与备份恢复密切相关的数据库操作。如关闭数据库或打开数据库: RMAN> shutdown immediate;
使用目标数据库控制文件替代恢复目录 数据库已关闭 数据库已卸载
Oracle 实例已关闭 这也证明了虽然没有加上AS SYSDBA,但是仍然以管理用户连接到了RMAN。因为只有管理用户,才能执行关闭、打开数据库的操作。 但是,与备份恢复没有任何关系的操作,是不能在RMAN中执行的。比如说,创建一个表: RMAN> create table aaa(id number);
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-00558: 分析输入命令时出错
RMAN-01009: 语法错误: 找到 \"identifier\": 应为: \"catalog, global, script\" 中的一个 RMAN-01008: 错误标识符: table
RMAN-01007: 在第 1 行第 8 列, 文件: standard input 如果你想创建表,最好还是到SQL*Plus中吧。哪里才是执行数据库操作的地方,RMAN是用来备份恢复的。 如果没有设置ORACLE_SID环境变量,我们也可以在RMAN中通过监听器连接:
RMAN TARGET 用户名/密码@连接描述符 或在RMAN中:
CONNECT TARGET 用户名/密码@连接描述符 无论通过不通过监听器连接,RMAN都会自动的为用户加上AS SYSDBA。也就是说,只要用RMAN成功的连接,都具有管理权限。
三、目标数据库控制文件与恢复目录 目标数据库,我们使用RMAN要对哪个数据库进行备份,哪个数据库就是目标数据库。 RMAN有一项重要功能,就是记录各种文件的备份信息,以便用户随时了解各个文件的备份情况。备份信息会被RMAN自动的记入目标数据库的控制文件中。控制文件中存储RMAN备份信息的区域是循环使用的,以初始化参数control_file_record_keep_time的值为准。这个参数的值默认是7天,也就是说控制文件中的RMAN信息,最多保留7天就会被新的信息覆盖。这个参数的设置,也是影响控制文件大小的重要因素之一。 但是,将RMAN的备份信息保留在目标数据库中,是非常不安全的。如果目标数据库的控制文件损坏了,RMAN将因为读不出来备份信息,而无法进行恢复。通常建议将信息再存储到另外一个数据库中,这个数据库一般被称为恢复目录。 作为恢复目录的数据库,其实恢复目录在它里面只建一个表空间,这个数据库还可以像正常数据库一样另外存放其他信息。并不是只能用来存放另一个数据库RMAN的备份信息。 好了,我们讲了两个概念,目标数据库和恢复目录。目标数据库就是我们要备份的数据库,而恢复目录是存放目标数据库备份信息的数据库。下面,我们说一下恢复目录的配置。
四、配置恢复目录 第一步当然先要有一个数据库了,我额外创建了一个RCAT数据库,下面我们用它来作恢复目录。在实际的情况下,恢复目录数据库最好是和目标数据库分别存在在不同的存储设备中。 下面,启动RCAT数据库。
步1:创建存储目标数据库备份信息的表空间
sid=25 pid=20> create tablespace cattbs datafile 'f:\\oracle\\oradata\\rcat\\cattbs_1.dbf' size 20m; Tablespace created. 这个表空间并不是专用的,它的名字你可随便定。它也可以存储其他信息。但是建议只用它存储目标数据库的备份信息。
步2:创建RCAT1用户
sid=22 pid=15> create user rcat1 identified by abcde default tablespace cattbs quota unlimited on cattbs; 用户已创建。 用户名当然也是随变定的。它的缺省表空间一定要是刚才创建的CATTBS。
步3:授予权限:
sid=22 pid=15> grant connect,recovery_catalog_owner to rcat1; 授权成功。 恢复目录用户,一定要有recovery_catalog_owner角色。此角色是专门针对恢复目录的,它向用户授予了很多特权。
步4:在RMAN中创建恢复目录 在RMAN中,连接到恢复目录数据库: RMAN> connect catalog rcat1/abcde@rcat; 连接到恢复目录数据库 注意,刚才我们讲的连接,都是CONNECT TARGET,Target是目标的意思,就是连接目标数据库。如果要连接恢复目录数据库,将Target换成Catalog即可。 在RMAN中,创建恢复目录: RMAN> create catalog tablespace cattbs;
- 2 -
恢复目录已创建 注意这里的表空间名必须和在恢复目录数据库中创建的,用于存放备份信息的表空间一样。其实这一步就是通知RMAN,将备份信息除了存到目标数据库控制文件外,还要送往恢复目录数据库的CATTBS表空间。
步5:向恢复目录中注册目标数据库 在注册前,注意用RMAN同时连接两个数据库: connect target sys/ifclwx
connect catalog rcat1/abcde@rcat; 注册命令很简单: RMAN> register database; 注册在恢复目录中的数据库
正在启动全部恢复目录的 resync 完成全部 resync 到此为止,恢复目录的配置就算完成了。以后,每次进入RMAN时,在登录到目标数据库后,再登录到恢复目录数据库,RMAN就会将备份信息写恢复目录中,也就是写进RCAT数据库RCAT1用户的缺省表空间CATTBS中。
五、incarnation 这个单词的中文的意思是化身,它是针对恢复目录而言的。一个恢复目录数据库,可以注册进多个目标数据库。每一个目标数据库都是一个incarnation,也就是化身。另外,同一目标库在恢复目录中也可以多个化身。只要目标库进行了不完全恢复,并以Resetlogs打开了数据库,哪么在恢复目录中,就必须重新注册目标库。重新注册后,目标库就又有了一个incarnation。 一个incarnation,就是一个目标数据库在恢复目录中的代表。Resetlogs后,日志序列号从1开始重新计算,日志流被打断、重置。对于备份恢复体系来说,Reseglogs后的数据库,相当于一个全新的数据库。因此,在恢复目录中,要重新注册一次这个对于备份恢复来说全新的数据库。 使用list incarnation命令,可以查看恢复目录中的化身: RMAN> list incarnation; 数据库原型列表
DB 关键字 Inc 关键字 DB 名 DB ID STATUS 重置 SCN 重置时间 ------- ------- -------- ---------------- --- ---------- ----------
1 2 FOUR10G 2924364082 CURRENT 1 28-5月 -08 关键字列,就是目标数据库的化身号。而DB ID列,则是它的数据库ID。我们可以在SQL*Plus中,查询V$DATABASE的DBID列,也可以得到数据库的ID编号。这个编号是在创建数据库时由ORACLE指定的。 sid=25 pid=20> select dbid, name from v$database; DBID NAME ---------- ------------------ 2924364082 FOUR10G
六、同步
在RMAN中的备份信息,会被默认送往目标数据库的控制文件中。尽管RMAN也会把信息自动的写入恢复目录中,但我们还要应该每隔N天,将目标数据库控制文件中的信息,手动的同步到恢复目录中。
同步的命令非常简单,只需要在RMAN中,同时连接目标库和恢复目录库,再使用resync catalog命令即可: RMAN> resync catalog;
正在启动全部恢复目录的 resync 完成全部 resync 每隔N天同步,这个N天通常应该设置为control_file_record_keep_time参数的值。如果此参数设为7,也就是我们应该至少每7天同步一次目标库控制文件和恢复目录中的信息。因为控制文件中的信息在7天后有可能被覆盖,因此,我们应该至少每7天同步一次。否则恢复目录中的信息将有可能不完整。
- 3 -
七、恢复目录库中的视图 其实ORACLE是把备份信息写进了目录库中的一些表内,我们可以通过“RC_”系列视图来查询这些表例如,我们连接到目录库RCAT1: idle> conn rcat1/abcde@rcat 已连接。
idle> select * from rc_database;
DB_KEY DBINC_KEY DBID NAME RESETLOGS_CHANGE# RESETLOGS_TIME ---------- ---------- ---------- -------- ----------------- -------------------
1 2 2924364082 FOUR10G 1 2008-05-28 09:59:14 RC_DATABASE显示了注册到恢复目录中的目标库。这个视图显示的信息和list incarnation几乎一样。其实list incarnation命令就是读取的RC_DATABASE视图。
第 二 节 RMAN备份
一、 RMAN的备份及备份管理,是有点复杂的。这也是我们的重点内容。而RMAN的恢复,就极简单了。其实只要备份做的好,恢复本就是一件非常简单的事。只有那些处处漏洞、满目苍夷的数据库,一旦出现问题,才需要高深的恢复技巧。比如,绕过ORACLE读已经无法正常打开数据库的数据文件。而对于有着良好的备份策略的数据库,恢复操作,从来都是很简单的事。
二、RMAN相关的名词
1.通道 : 它是目标库到存储存设备的连接途径。RMAN的备份恢复都是由服务器进程完成的,通道就是服务器进程和存储设备间建立的连接。
2.备份片 : RMAN备份时所产生的备份文件。每一个备份文件,就叫一个备份片。备份片中的数据,可以来自数据文件、控制文件、归档日志文件。一个备份片有可能是多个文件备份数据的组合,或者一个数据文件可以跨越多个备份片,也就是一个数据文件可以被分割成多个备份片。
3.备份集 :一个通道将对应一个备份集,一个备集中,包含多个备份片。备份集是一个逻辑概念,在操作系统中,你是找不到备份集相关的信息的。在操作系统中,你可以找到备份片,一个备份片就是一个操作系统文件。在ORACLE中,又把多个备份片对应的文件组合起来,比如说1、3、5号文件组合起来,构成备份集1,等等。备份集只存在在概念上。因此,它是备份片的逻辑组合。
上图的备份过程中,建立了两个通道,因此在存储设备中,就有两个备份集。备份集1包含了数据文件1、4、5的备份。它里面有两个备份片,分别是片1和片2,其中片1包含数据文件1的备份,和数据文件4的一部分备份。而片2包含数据文件4的另一半备份,和数据文件5的备份。备份集2只有一个备份片,其中包含了三个数据文件的备份。
4.备份类型:RMAN共有两大类备份类型,一类被称为映像拷贝,另一类是增量备份。
- 4 -
下面,我们先从映像拷贝开始。
三、映像拷贝 1.映像拷贝 也叫映像副本。它其实和直接的用操作系统拷贝命令复制文件差不多。使用它可以备份数据文件、控制文件和归档日志文件。不能备份重做日志文件。下面我们来看一下映像拷贝的使用。 一个标准的映像拷贝应该如下完成:(放PPT)
上面这段脚本包含两个命令,第2行的命令是分配通道,通道名是D1,这个通道名是随变起的。类型是DISK,磁盘。类型还可以是磁带:???。这是第一条命令,结束处以“;”分号标记。 接着,从第3行到第8行是一条命令,这就是我们的映像拷贝命令。也就是说,RMAN的命令都以分号结束。一个分号就是一条命令。 在映像拷贝命令中,我们以第4行为例,它的意思是将1号文件映像拷贝到E:\\ORACLE\\BACKUP处,映像备份的文件名是SYSTEM01.DBF。1号文件本来就是SYSTEM01.DBF,这个我们在DBA_DATA_FILES中的FILE_ID列,或V$DATAFILE的FILE#列都有记录。映像拷贝后,备份文件的名字并不一定要和原文件一样。这个名字也是随变起的。我在这里是为了方便记忆,才和原文件名相同的。另外,DATAFILE后的文件号也可以换成文件名:
Datafile ‘F:\\oracle\\oradata\\four10g\\system01.dbf’ to to 'e:\\oracle\\backup\\SYSTEM01.DBF' ,
在RMAN中,有一条简单的命令可以列出目标库中的所有数据文件和它的文件编号: RMAN> report schema; 数据库方案报表 永久数据文件列表
===========================
文件大小 (MB) 表空间 回退段数据文件名称 ---- -------- -------------------- ------- ------------------------
1 240 SYSTEM YES F:\\ORACLE\\ORADATA\\FOUR10G\\SYSTEM01.DBF 2 80 UNDOTBS1 YES F:\\ORACLE\\ORADATA\\FOUR10G\\UNDOTBS01.DBF 3 60 SYSAUX NO F:\\ORACLE\\ORADATA\\FOUR10G\\SYSAUX01.DBF 4 10 USERS NO F:\\ORACLE\\ORADATA\\FOUR10G\\USERS01.DBF 临时文件列表
=======================
文件大小 (MB) 表空间 最大大小 (MB) 临时文件名称 ---- -------- -------------------- ----------- --------------------
1 16 TEMP 32767 F:\\ORACLE\\ORADATA\\FOUR10G\\TEMP01.DBF 第一列就是文件编号。注意,我们只用备份永久数据文件就行,不用备份临时文件。 脚本中的第8行是备份控制文件。 因为这个脚本包含了两条命令,所有这两条命令要用“RUN { }”括起来。如果只有一条命令,是不秘加“RUN{ }”的 上面这段脚本可以在目标库打开、或关闭时执行。如果备份时,目标库未打开,这就相当于冷备。而如果是在数据库打开时进行的备份,就相当于热备了。用RMAN热备不再需要将表空间设为热备状态。这比手动管理中的热备,将表空间置为热备状态,在总体性能上要好一些。
- 5 -
如果要备份归档日志,将上面的DATAFILE换成ARCHIVELOG :
Copy archivelog 归档日志文件名 to 备份归档日志文件名
下面我们执行一下上面的脚本: RMAN> run{
2> allocate channel d1 type disk; 3> copy
4> datafile 1 to 'e:\\oracle\\backup\\SYSTEM01.DBF', 5> datafile 2 to 'e:\\oracle\\backup\\UNDOTBS01.DBF', 6> datafile 3 to 'e:\\oracle\\backup\\SYSAUX01.DBF', 7> datafile 4 to 'e:\\oracle\\backup\\USERS01.DBF',
8> current controlfile to 'e:\\oracle\\backup\\controlbak.ctl'; 9> }
分配的通道: d1
通道 d1: sid=31 devtype=DISK 启动 backup 于 28-5月 -08 通道 d1: 启动数据文件副本
输入数据文件 fno=00001 name=F:\\ORACLE\\ORADATA\\FOUR10G\\SYSTEM01.DBF
输出文件名 = E:\\ORACLE\\BACKUP\\SYSTEM01.DBF 标记 = TAG20080528T211003 recid = 1 时间戳 = 655938622
通道 d1: 数据文件复制完毕, 经过时间: 00:00:25 通道 d1: 启动数据文件副本
输入数据文件 fno=00002 name=F:\\ORACLE\\ORADATA\\FOUR10G\\UNDOTBS01.DBF
输出文件名 = E:\\ORACLE\\BACKUP\\UNDOTBS01.DBF 标记 = TAG20080528T211003 recid = 2 时间戳 = 655938637
通道 d1: 数据文件复制完毕, 经过时间: 00:00:07 通道 d1: 启动数据文件副本
输入数据文件 fno=00003 name=F:\\ORACLE\\ORADATA\\FOUR10G\\SYSAUX01.DBF
输出文件名 = E:\\ORACLE\\BACKUP\\SYSAUX01.DBF 标记 = TAG20080528T211003 recid = 3 时间戳 = 655938643
通道 d1: 数据文件复制完毕, 经过时间: 00:00:07 通道 d1: 启动数据文件副本
输入数据文件 fno=00004 name=F:\\ORACLE\\ORADATA\\FOUR10G\\USERS01.DBF
输出文件名 = E:\\ORACLE\\BACKUP\\USERS01.DBF 标记 = TAG20080528T211003 recid = 4 时间戳 = 655938648
通道 d1: 数据文件复制完毕, 经过时间: 00:00:03 通道 d1: 启动数据文件副本 复制当前控制文件
输出文件名 = E:\\ORACLE\\BACKUP\\CONTROLBAK.CTL 标记 = TAG20080528T211003 recid = 5 时间戳 = 655938651
通道 d1: 数据文件复制完毕, 经过时间: 00:00:04 完成 backup 于 28-5月 -08 释放的通道: d1 备份完毕后,检查E:\\ORACLE\\BACKUP目录,多了5个文件。映像拷贝不创建备份集,每一个文件的备份都是一个备份片。其实这和用操作系统拷贝命令差不多。不过在热备时,不需要将表空间置于热备状态。 可以使用LIST COPY命令查看备份结果: RMAN> list copy ;
- 6 -
数据文件副本列表
关键字 文件 S 完成时间 Ckp SCN Ckp 时间 名称 ------- ---- - ---------- ---------- ---------- ----
111 1 A 28-5月 -08 162186 28-5月 -08 E:\\ORACLE\\BACKUP\\SYSTEM01.DBF 112 2 A 28-5月 -08 162195 28-5月 -08 E:\\ORACLE\\BACKUP\\UNDOTBS01.DBF 113 3 A 28-5月 -08 162199 28-5月 -08 E:\\ORACLE\\BACKUP\\SYSAUX01.DBF 114 4 A 28-5月 -08 162202 28-5月 -08 E:\\ORACLE\\BACKUP\\USERS01.DBF
控制文件副本列表
关键字 S 完成时间 Ckp SCN Ckp 时间 名称 ------- - ---------- ---------- ---------- ----
115 A 28-5月 -08 162204 28-5月 -08 E:\\ORACLE\\BACKUP\\CONTROLBAK.CTL 每个备份文件都有一个唯一的标识,就是最前面的关键字列。这一列对于RMAN很重要,但对于我们没有什么意义。我们说一下重要的列。第三列有一个S列,它是备份片的状态,A表示Available,也就是可用的,有效的。除了A外,还有值U,Unavailable,不可用的。E,Expired,过期的。其意义,我们后面再讲。
2.手动分配通道 上面的脚本中,allocate channel d1 type disk是手动分配通道。我们前面讲过,通道是服务器进程和存储设备的连接途径。我们可以在备份时分配多个通道,启用多个服务器程,并行的进行备份操作。通道的数量,就决定了备份的并行度。我们可以在COPY命令前,多执行allocate channel 命令,每次通道名不能相同,这样就可以开启多个通道了。
上图中的脚本开启了四个通道,也就是备份操作的并行度将是4。RAMN将启用4个服务器进程,同时的完成备份操作。 注意在使用并行备份的时候,要考虑主机的硬件环境,如果备份用的存储设备只有一块硬盘,我们将并行度定为4不但不会提高性能,反而会降低性能。 ORACLE中所有的并行操作,都要考虑主机的CPU个数、存储设备的能力,如果只有一颗单核心CPU,一块硬盘,但是并行度却开为4。这就好像只有一个人,却同时有4个人不停的向你问题。你是希望A、B、C、D排好队一个一个的来,还是先回答A一句,再回答B、C、D,然后再转回来回答A。 关于通道,在ORACLE内部,代表的服务器进程和存储设备的连接途径,这是内部的事情,我们其实不需要管。对于我们DBA来说,通道的数量意味着并行度。 除了手动的分配通道外,我们还可以自动的分配通道:
3.自动分配通道
- 7 -
如上脚本,就是使用了自动分配的通道,其中命令:“configure device type disk parallelism 2”, 就是配置自动通道的命令。这条命令将并行度定为2,也就要是启用两条通道。 下面执行上面的脚本: RMAN> run{
2> configure device type disk parallelism 2; 3> copy
4> datafile 1 to 'e:\\oracle\\backup\\SYSTEM01.DBF', 5> datafile 2 to 'e:\\oracle\\backup\\UNDOTBS01.DBF', 6> datafile 3 to 'e:\\oracle\\backup\\SYSAUX01.DBF', 7> datafile 4 to 'e:\\oracle\\backup\\USERS01.DBF',
8> current controlfile to 'e:\\oracle\\backup\\controlbak.ctl'; 9> }
新的 RMAN 配置参数:
CONFIGURE DEVICE TYPE DISK PARALLELISM 2 BACKUP TYPE TO BACKUPSET; 已成功存储新的 RMAN 配置参数 释放的通道: ORA_DISK_1
正在启动全部恢复目录的 resync 完成全部 resync
启动 backup 于 29-5月 -08 分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=31 devtype=DISK 分配的通道: ORA_DISK_2
通道 ORA_DISK_2: sid=18 devtype=DISK 通道 ORA_DISK_1: 启动数据文件副本
输入数据文件 fno=00001 name=F:\\ORACLE\\ORADATA\\FOUR10G\\SYSTEM01.DBF 通道 ORA_DISK_2: 启动数据文件副本
输入数据文件 fno=00002 name=F:\\ORACLE\\ORADATA\\FOUR10G\\UNDOTBS01.DBF
输出文件名 = E:\\ORACLE\\BACKUP\\SYSTEM01.DBF 标记 = TAG20080529T082519 recid = 12 时间戳 = 655979144
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:28 通道 ORA_DISK_1: 启动数据文件副本
输入数据文件 fno=00003 name=F:\\ORACLE\\ORADATA\\FOUR10G\\SYSAUX01.DBF
输出文件名 = E:\\ORACLE\\BACKUP\\UNDOTBS01.DBF 标记 = TAG20080529T082519 recid = 11 时间戳 = 655979144
通道 ORA_DISK_2: 数据文件复制完毕, 经过时间: 00:00:28 通道 ORA_DISK_2: 启动数据文件副本
输入数据文件 fno=00004 name=F:\\ORACLE\\ORADATA\\FOUR10G\\USERS01.DBF
输出文件名 = E:\\ORACLE\\BACKUP\\SYSAUX01.DBF 标记 = TAG20080529T082519 recid = 13 时间戳 = 655979155
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:10
- 8 -
通道 ORA_DISK_1: 启动数据文件副本 复制当前控制文件
输出文件名 = E:\\ORACLE\\BACKUP\\USERS01.DBF 标记 = TAG20080529T082519 recid = 14 时间戳 = 655979156
通道 ORA_DISK_2: 数据文件复制完毕, 经过时间: 00:00:09
输出文件名 = E:\\ORACLE\\BACKUP\\CONTROLBAK.CTL 标记 = TAG20080529T082519 recid = 15 时间戳 = 655979160
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:03 完成 backup 于 29-5月 -08 我们可以看到,RMAN自动启动了两条通道。自动配置通道中,我们无法再为通道命名,RMAN将自动将通道名定为ORA_DISK_n。 RMAN的备份顺序是,启动通道1,备份1号文件,同时启动通道2,备份2号文件。1号通道工作完毕后备份3号文件,2号通道复制完毕备份4号文件。1号通道备份完3号文件后,备份控制文件。 手动分配通道命令必须放在RUN{ }中,它只对{ }大括号中的命令起作用,在{}大括号中的命令执行完毕后,手动分配的通道会自动释放。看一下我们第一段脚本的执行后的显示信息,在执行开始你可以看到:“分配通道 D1”,在执行的最后,可以看到“释放通道D1”。 而在使用CONFIGURE DEVICE,自动分配通道时,在脚本执行完毕,并没有释放分配的通道。CONFIGURE DEVICE命令分配的通道,将一直保留到再次使用configure device 命令改变并行度。像这样其效果可以长久保持的命令,也可以不必放在RUN{ }中,可以单独放在RMAN命令行上执行:
而且,下一次再进入RMAN进行备份时,如果并不改变并行度,我们可以不必使用CONFIGURE DEVICE重新配置通道,直接使用COPY进行映像拷贝就行了。RMAN将保存CONFIGURE DEVICE的配置结果,直到你再次使用CONFIGURE DEVICE改变它。 使用CONFIGURE DEVICE命令,我们不但可以设置默认的并行度。还可以设置默认的存储设备类型:
configure device type sbt parallelism 2 ;
如上命令将设备类型定为SBT,也就是磁带,同时将并行度定为2。
4.通道配置 我们可以使用CONFIGURE CHANNEL命令,配置通道的默认参数: DEVICE TYPE DISK|SBT :设备类型,磁盘或磁带
RATE n :限制通道每秒读数据的速度。N的单位可以是字节、K、M或G,注意,不能是KB、MB或GB。如果n的值为1000K,也就是每秒最多从磁盘读取1000K字节。这样做的目的是为了避免RMAN占用过多的磁盘资源,而影响目标库正常的使用。
MAXOPENFILE n :限制同是打开的文件数
MAXPIECESIZE n :最大的备份片大小。如果备份片太大,超过了操作系统的限制,使用此限制,可以将备份片切割开,分成多个备份片,也就是分成多个操作系统文件。比如,此限制定为“MAXPIECESIZE 2G”,也就是一个备份片最大2G。现在有一个备份共有6G,RMAN将自动把它切开,分为三个备份片,每个都是2G。 比如,下面的命令将通道类型设置为写磁盘,速度限制为每秒1500K,最大备份片为2G:
CONFIGURE CHANNEL DEVICE TYPE DISK RATE 1500K MAXPIECESIZE 2G;
四、增量备份:0级增量备份 备份命令非常简单,总的来说,有两种形式:
backup incremental level 0 database :差异型增量备份
- 9 -
backup incremental level 0 cumulative database :累积型增量备份
待会再说这两种增量备份的区别。我们可以看到,在这两条备份命令中,我们并没有找到备份的目的地和备份相关文件的名字。名字和位置我们可以在通道中利用FORMAT选项指定。在指定名字时,我们必须使用一些格式字符,来保证备份片文件名的唯一性。如果我们将名字指定为AAA。将设备份要生成四个备份片,每一个备份片都是一个操作系统文件。那么,第一个备份片名字是AAA,第二个备份片也叫AAA,这样,第二个备份片的文件将覆盖第一个备份片的文件。这就是保证备份片字名唯一性的重要性。有如下的格式字符可以使用: %d :数据库名称
%s :备份集编号。这是由RMAN自动生成,第一个备份集是1,第二个备份集是2,这样依次递增。重建控制文件后此编号从1重新开始。 %p :备份片编号
%u :由备份时间和备份集编号生成 %c :备份片复本数
%U :生成一个唯一的由%u_%p_%c组成的唯一的文件名,如果你没有指定文件名,这个将是默认值。
下面我们来制作一个0级差异型增量备份: (1)、差异型增量备份:
RMAN> configure device type disk parallelism 2;
RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT = 'e:\\oracle\\backup\\bak\\one_%U'; RMAN> backup incremental level 0 database; („„„„ 显示信息略 „„„„)
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:39 通道 ORA_DISK_1: 启动增量级别 0 数据文件备份集 通道 ORA_DISK_1: 正在指定备份集中的数据文件 备份集中包括当前控制文件
通道 ORA_DISK_1: 正在启动段 1 于 29-5月 -08 通道 ORA_DISK_2: 已完成段 1 于 29-5月 -08 („„„„ 显示信息略 „„„„) 在备份集中包含当前的 SPFILE
通道 ORA_DISK_2: 正在启动段 1 于 29-5月 -08 通道 ORA_DISK_2: 已完成段 1 于 29-5月 -08
段句柄=E:\\ORACLE\\BACKUP\\BAK\\ONE_0LJHJ66H_1_1 标记=TAG20080529T110822 注释=NONE 通道 ORA_DISK_2: 备份集已完成, 经过时间:00:00:03 完成 backup 于 29-5月 -08 我们可以在显示的信息中看到“备份集包括当前控制文件”,一般情况下,只要备份集中包括SYSTEM表空间的数据文件,将随之自动备份控制文件。另外,0级备份还会自动包含参数文件SPFILE的备份。 List backup 命令可以显示备份结果,显示结果如下:
- 10 -
因为RMAN在备份时,各种类型的文件一般会分开存放在不同的备份片中。数据文件只能和数据文件在一个备份片中,归档日志也只能和归档日志在一起,控制文件和参数文件可以合并到一个备份片中。因此,我们的备份共成生了四个备份片,也就是有四个操作系统文件。上面的显示的结果共有四部分,分别对应了四个备份片。 第一个备份片,也就是图上圈1部分,操作系统文件名是E:\\ORACLE\\BACKUP\\BAK\\ONE_0IJHJ657_1_1,也就是段名。它在备份集240中。我们上面的备份使用了两个通道,备份集240是对应1号通道。 2号通道和1号通道并行启动,但我的主机是单CPU,因此2号通道实际比1号通道稍晚一些启动。它所创建的备份集是241。它里面的第一个备份片是E:\\ORACLE\\BACKUP\\BAK\\ONE_0JJHJ658_1_1。 1号通道备份完数据文件后,和它关联的服务器进程又开始备份控制文件,它又生成了一个新的备份片:E:\\ORACLE\\BACKUP\\BAK\\ONE_0KJHJ66E_1_1。在逻辑上,由于同属1号通道,它和上面的E:\\ORACLE\\BACKUP\\BAK\\ONE_0IJHJ657_1_1同属一个备份集。 最后,2号通道备份完它的数据文件后,它的服务器进程开始备份参数文件,参数文件的备份片属于241号备份集。 在你启动多个通道时,ORACLE会把要备份的数据文件,自动的协调分配给每个通道,尽量使每个通道完成的工作量差不多。比如上面我们两条通道,四个数据文件。其中SYSTEM01.DBF有240M左右,UNDOTBS01.DBF有80M,SYSAUX01.DBF:60M,USER01.DBF:16M。在备份时RMAN会将最大SYSTEM01.DBF和最小的USER01.DBF分在一个通道中,而让UNDOTBS01.DBF和SYSAUX01.DBF用另一个通道。这样,两个通道即使没有完全的平摊工作量,它们的工作量也相差不多了。 我们可以到备份目的地E:\\ORACLE\\BACKUP\\BAK目录中,看一下这两个备份集四个备份片文件合计的总大小,共占250M磁盘空间。而在目标数据库中,这四个文件合计有390M。也就是在备份后,数据文件总的所需磁盘空间变小了。原因是什么呢?这就是RMAN备份的另一优势,RMAN只会复制曾经使用过的数据块,而跳过于磁盘中数据文件从未使用过的数据块。什么是磁盘中从不使用过的数据块?就是这个块从未分配给任何表、索引等段。如果一个块本来属于一个表,但后来使用TRUNCATE TABLE,截断了表,或使用DROP TABLE删除了表,块被释放了,那么这个块不能算是“从未使用过”,RMAN会备份它。从未使用过指的就是从来都没有分配给任何段的块。正是这一优势,使得备份后总的体积可以比原来小一些。 映像拷贝并没有使用RMAN的这一特性。映像拷贝可以看作是将操作系统的拷贝命令封装进RMAN。除了在热备数据库时,不需要将表空间置于热备状态外,它没有再提供任何RMAN独有的特性,它只是利用RMAN来拷贝文件。而增量备份则是RMAN所独有的特性, 另外,RMAN的每次备份,都会有一个TAG,就是标记。每次备份,所有备份片的标记是一样的。TAG是分配给每次备份的,上次备份的标记是:TAG20080529T110822 。这个标记太长而且无意义,很不容易识别。以后的备份中,我将会使用TAG选项自定标记。
- 11 -
(2)、累积型增量备份: 这一次,使用手动的通道分配,只分配一个通道,将备份片的名字定位:TWO_%U。 RMAN> run{
2> allocate channel d1 type disk format 'e:\\oracle\\backup\\bak\wo_%U'; 3> backup incremental level 0 cumulative database; 4> } 手动分配通道必须在RUN{ }中才有效。脚本执行后显示的信息如下: 释放的通道: ORA_DISK_1 释放的通道: ORA_DISK_2 分配的通道: d1
通道 d1: sid=17 devtype=DISK 先释放我们用configure device分配的两个通道,分配D1通道。然后开始备份: 启动 backup 于 29-5月 -08
(„„„„ 显示信息略 „„„„) 完成 backup 于 29-5月 -08 释放的通道: d1 这次的备份速度要比上次快一些,这并不是累积型要比增量型快。对0级备份而言,两种备份的速度是一样的,它们的备份操作也是完全相同的。这一次备份我们只使用了一个通道,只开启了一个服务器程。而上一次备份则有两个通道。我的主机上本来就只有一颗CPU、一块硬盘,因此并行度为2,那么这两个服务器进程只会互相影响,无法提高速度,反而拖慢了整体的速度。
五、非0级增量备份 (1)、差异型 差异型的级别共有4级。每次进行N级差异型备份时,它只备份最近的N级或低于N级备份以来,所修改过的块。
例如上图,在是期日时进行了0级备份,星期一的2级备份将只复制周日备份以来,修改过的数据块。周二的2级备份,只备份周一以来修改过的块。因为只备份最近的同级、或同级以下的备份以来,所修改过的块。在周三时,进行了一次1级备份,那么最近的同级、或低于同级的备份,就是周日的0级备份了。因此,看上图的箭头,周三的备份,备份从周日以来,所有修改过的数据块。周四、周五等等后面的我就不再说了,道理是一样的。
(2)、累积型 它也是共有4级。每次进行N级累积型增量备份时,只备份最近的低于N级的备份以来,所有修改过的块。注意它和差异型的区别。它是 如上图,在一周的每一天,备份级别是一样的,只不过采用的是累积型备份。周一的2级,复制周日备份以来所有修改过的数据块。周二的2级备份,也是复制周日备份以来所有修改过的数据块。这是和差异型不同的地方,因为累积型是备份低于同级的备份以来,所有修改过的块。周一的2级,并不低于周二的2级,所以周二的2级,是准备周日的0级备份以来,所有修改过的块。 也就是说,如果数据库在周二2级备份结束后,储存设备出现了损坏,需要恢复,需要应用周日的0级备份集,和周二的2级备份集。 而上面的差异型的例子中,如果周二的2级备份结束后,储存设备出现了损坏,需要恢复。则需要应用周日的0级备份集,周一的2级备份集和周二的2级备份集。 相比较而言,在级别相同的情况下,累积型备份,备份的重复数据更多,但恢复时需要的备份集更少,它的恢复速度要比差异型快一些。而差异型的备份速度则要比累积型快。 (3)、注意事项 第一点,无论是差异型还是累积型,每次的0级备份总备份数据库中所有已使用过的块。 第二点,0级备份是增量备份的基础,如果在进行非零级增量备份前,还没有0级备份。比如进行了一个2级备份,但还没有0级备份。此2级备份中,将包含所有的已使用的数据块。也就是这个2级备份的内容和0级备份一样,但它不是0级备份。如果在2级备份后进行1级备份,此1级备份也将包括所有已使用的块,就是也和0级备份一样。这样不但浪费空间,备份速度也慢。因此,在进行非0级备份前,一定要先建立0级备份。 第三点,其实0级备份不分差异型或累积型,只要是0级备份,它们都是一样的。你用backup incremental level 0 cumulative database,生成的累积型0级备份,可以做为差异型的基础。反之也一样。但其他级别的备份是不能通用的。 (4)、增量备份策略的建立 我们要根据数据库的大小、基于现有硬件下0级备份的时间,如果出现介质故障后所允许的恢复时间,等等这些因素来综合考虑。 如果允许的故障恢复时间比较长,则两次0级备份的间隔时间也可以相对的定的比较长一些。如果出现故障后,允许的恢复时间很短,那么0级备份应该根据主机的硬件能力,尽可能频繁的多做一些。另外,为了节省空间,0级备份可以只保留一份。 像图例中以一周为间隔,每周日做一次0级备份。以周三为中点,做一次一级备份,其他时间都是二级备份。这样的增量备份策略,很适合一般的24*7系统。0级备份也不必一定要安排在周日,可以选择在系统最不繁忙的某天的晚上去完成。 对于非24*7的系统,因为有许可的关机时间,可以更频繁的做0级备份,这样出问题后可以尽量的减少恢复时间。 (5)、针对表空间或数据文件的备份 备份指定表空间 backup incremental level 级别 (tablespace 表空间名,表空间名,„„); 备份指定表空间所属的所有数据文件。 backup incremental level 2 tag='whole_inc2' (datafile 文件编号,文件编号,„„) ; 备份指定的数据文件。也可以将文件编号换为文件名。 - 13 - 六、完全备份 完全备份和0级备份一样。备份数据文件、控制文件、参数文件。且只备份数据文件中已使用过的块,跳过所有未用块。虽然它和0级备份一样,都它却不能做为增量备份的0级备份来用。完全备份和增量备份是RMAN提供的两种完全不同的备份体系,它们之间互不影响。 run{ allocate channel d1 type disk ; backup database format 'e:\\oracle\\backup\\bak\est_%U' tag='test'; } 上面的脚本就是创建一个完全备份。说明一下,备份片命名格式选项:FORMAT,它不但可以在通道中指定,也可以放到Backup命令中指定。另外,这一次我指定了TAG,标记。我将本次备份的所有备份片的标记定为TEST。 使用List backup显示一下备份信息,可以找到我刚刚进行的完全备份,就是标记为TEST的: RMAN> list backup; 备份集列表 =================== BS 关键字 类型 LV 大小 设备类型 经过时间 完成时间 ------- ---- -- ---------- ----------- ------------ ---------- 642 Full 240.78M DISK 00:00:38 29-5月 -08 BP 关键字: 644 状态: AVAILABLE 已压缩: NO 标记: TEST 段名:E:\\ORACLE\\BACKUP\\BAK\\TEST_0SJHK60L_1_1 备份集 642 中的数据文件列表 文件 LV 类型 Ckp SCN Ckp 时间 名称 ---- -- ---- ---------- ---------- ---- 1 Full 183091 29-5月 -08 F:\\ORACLE\\ORADATA\\FOUR10G\\SYSTEM01.DBF 2 Full 183091 29-5月 -08 F:\\ORACLE\\ORADATA\\FOUR10G\\UNDOTBS01.DBF 3 Full 183091 29-5月 -08 F:\\ORACLE\\ORADATA\\FOUR10G\\SYSAUX01.DBF 4 Full 183091 29-5月 -08 F:\\ORACLE\\ORADATA\\FOUR10G\\USERS01.DBF BS 关键字 类型 LV 大小 设备类型 经过时间 完成时间 ------- ---- -- ---------- ----------- ------------ ---------- 643 Full 6.17M DISK 00:00:04 29-5月 -08 BP 关键字: 645 状态: AVAILABLE 已压缩: NO 标记: TEST 段名:E:\\ORACLE\\BACKUP\\BAK\\TEST_0TJHK624_1_1 包括的控制文件: Ckp SCN: 183106 Ckp 时间: 29-5月 -08 包含的 SPFILE: 修改时间: 29-5月 -08 它有两个备份片,对应的操作系统文件名分别是:E:\\ORACLE\\BACKUP\\BAK\\TEST_0SJHK60L_1_1,也就是段名。这个备份片中包含4个数据文件。另一个备份片的段名(也就是操作系统文件名)是E:\\ORACLE\\BACKUP\\BAK\\TEST_0TJHK624_1_1 。它里面包括控制文件和参数文件。 和增量备份一样,数据文件和控制文件、参数文件是分开存放的。 七、多元备份 Backup 命令有一个多元备份选项:filesperset 。也可以在通道中,使用MAXOPENFILES选项进行设定。比如下面的命令将多元备份定为3元: backup incremental level 0 database filesperset 3; 或: run{ allocate channel d1 type disk MAXOPENFILES 3; - 14 - backup incremental level 0 database ; } 多元备份主要用于高速磁带,例如,我将元数定为3。服务器进程依次从1号文件、2号文件、3号文件各读出N块,然后写往磁带。然后再依次从1、2、3号读N块送往磁带。 注意,多元备份并不是完全的并行。它可以并行从多块磁盘读,但是串行的写到磁带中的。如果磁带是高速磁带,这个功能就比较有用,它可以提高整体的速度。 增量备份和完全备份都可以使用此多元备份选项,只要在Backup命令,无论是创建什么样的备份,都可以使用此选项。 八、多重备份集 下面的命令是双重备份: backup copies 2 incremental level 0 database filesperset 3; Copies 2,就是双重备份。最高可以四重备份。如果是双重备份,原来的每个备份片都将生成两个完全相同的备份片,也就是每个备份都将有一个一模一样的副本。 这个选项也是属于Backup命令的一个选项,并不针对某一种备份方式。 九、备份归档日志 命令如下: backup archivelog [from time 日期1 [until time 日期2]] | [sequence between 日志序列号1 and 日志序列号2] [DELETE INPUT] ; 最简单的备份归档日志的命令是backup archivelog,它将备份到目前为止,所有的归档日志文件。归档日志文件的位置,RMAN可以自动到Log_archive_dest_n参数中寻找。 我们可以使用From time 日期1 until time 日期2选项,指定只备份某一日期间的归档日志。如果只指定From time 日期1,而没有指定until time,RMAN将备份从日期1到当前的所有归档日志文件。 也可以使用sequence between 指定备份两个序列号间的所有归档日志。 Delete input的作用是备份完毕删除归档日志。 归档日志的备份没有完全、增量之分,都是完全备份。 下面是一个此命令的使用实例: RMAN> run{ 2> allocate channel d1 type disk; 3> backup archivelog sequence between 1 and 45 format 'e:\\oracle\\backup\\bak\\log1_%U' tag=’LOG1’; 4> } 如果你指定的序列号的归档日志并不存在,将会报出如下错误: RMAN> backup archivelog sequence between 50 and 60 format 'e:\\oracle\\backup\\bak\\log1_%U'; 启动 backup 于 2008-05-29 22:42:07; 分配的通道: ORA_DISK_1 通道 ORA_DISK_1: sid=18 devtype=DISK RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: backup 命令 (在 05/29/2008 22:42:07 上) 失败 - 15 - RMAN-06004: 恢复目录数据库发生 ORACLE 错误: RMAN-20242: 说明与恢复目录中的任何存档日志均不匹配 命令中,我指定备份50到60号归档日志,但现在最大的归档中日志序列号才到45,因此,就报出了上面的错误。 在备份前我们可以使用如下命令显示一下目标库中归档文件的信息: RMAN> list archivelog all; 正在启动全部恢复目录的 resync 完成全部 resync 已存档的日志副本列表 关键字 Thrd Seq S 短时间 名称 ------- ---- ------- - -------------------- ---- 128 1 43 A 2008-05-28 13:49:50; F:\\ORACLE\\ARC\\ARC00043_0655898354.001 129 1 44 A 2008-05-28 22:01:17; F:\\ORACLE\\ARC\\ARC00044_0655898354.001 783 1 45 A 2008-05-29 08:08:44; F:\\ORACLE\\ARC\\ARC00045_0655898354.001 可以看到目前有三个归档日志文件,序列号从43到45。 如果日志比较多,也可以通过指定序列号或时间,显示目标数据库中指定阶段的归档日志: 如:list archivelog sequence between 40 and 65 ; 如果要在RMAN中指定日期、时间,我们要注意日期的格式问题。我们可以操作系统中通过设置环境变量NLS_DATE_FORMAT的值,来设置在RMAN中日期的格式。注意在Windows下和在Linux关于此变量的设置,是有所有同的: WINDOWS:set nls_date_format=yyyy-mm-dd hh24:mi:ss; LINUX:export nls_date_format=’yyyy-mm-dd hh24:mi:ss’; 区别在于Windows下日期格式字符串外不需加引号,而Linux下是需要加引号的。如果在Windows下加了引号,在用RMAN连接数据库时,会报出一个ORA-01012错误。 list archivelog from time '2008-05-27' until time '2008-05-29'; 上面的命令显示从27号到29所有的归档日志。 如果要备份从27号到29所有的归档日志,命令如下: RMAN> backup archivelog from time '2008-05-27' until time '2008-05-29' format 'e:\\oracle\\backup\\bak\\log2_%U' tag='LOG2'; 归档日志备份的结果,也是备份集、备份片,我们可以仍然可以使用List backup命令查看备份结果。不过List backup显示的是所有类型的备份。如果只想显示有关归档日志的备份,使用命令:list backup of archivelog all;这个比较简单,我就不再试了。 十、备份控制文件: 命令如下: copy current controlfile to 'd:\\bk\\c1.ctl'; :创建控制文件的映像拷贝。 backup current controlfile format 'd:\\bk\\c1.%s'; :创建控制文件的完全备份。 下面的命令显示有关控制文件的备份信息: list copy of controlfile; :显示以映像拷贝备份的控制文件 list backup of controlfile; :显示以完全备份方式备份的控制文件 在10G中,0级增量备份和完全备份都将自动备份控制文件和参数文件。 十一、备份参数文件: 命令:backup spfile format 'd:\\bk\\spfile.%s'; 显示参数文件的备份:list backup of spfile; 十二、控制文件和参数文件自动备份 将CONFIGURE CONTROLFILE AUTOBACKUP设置为ON后,将开启控制文件和参数文件的自动备份。默认值是OFF,就是关闭控制文件的自动备份。什么是自动备份呢?就是当执行BACKUP或COPY备份数据文 - 16 - 件时,自动备份控制文件和参数文件。在10G的RMAN中,就算你将此设置定为了OFF,RMAN仍会自动备份控制文件。 十三、非归档下的备份 我们前面的练习,都是在归档方式下作的。备份非归档的数据库的命令,和归档是一样,只不过非归档的数据库,只能在MOUNT阶段进行备份,也就是只能对数据库进行冷备份。 第 三 节 RMAN的管理与维护 一、RMAN配置设置 1.自动通道有关的配置 CONFIGURE CHANNEL :配置自动通道 show channel :显示通道配置 例如: RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT 'e:\\oracle\\backup\\bak\\four10g_%U'; 旧的 RMAN 配置参数: CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT 'e:\\oracle\\backup\\bak\\one_%U'; 新的 RMAN 配置参数: CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT 'e:\\oracle\\backup\\bak\\four10g_%U'; 已成功存储新的 RMAN 配置参数 正在启动全部恢复目录的 resync 完成全部 resync 我将通道的类型定为了磁盘,备份片文件名为:'e:\\oracle\\backup\\bak\\four10g_%U' 。注意,我们在Backup命令中,也可以用FORMAT为指定备份片文件名。如果你即在通道中又在Backup中指定了备份片文件名,RMAN将以Backup中的文件名为准。 我们看提示信息的最后两行,只要你在RMAN中登录了恢复目录,几乎在所有的RMAN操作之后,RMAN都会自动为你执行resync catalog,同步目标库控制文件和恢复目录。即使这样,为了以免恢复目录中的信息有所遗漏,我们仍应该每隔N天,手动使用resync catalog命令,同步目标库控制文件与恢复目录。N的取值就是初始化参数control_file_record_keep_time 的值。 2.CONFIGURE DEVICE 这个命令也是针对通道的,如果要配置多个通道,使用它非常简单: CONFIGURE DEVICE TYPE DISK PARALLELISM n “n”的值代表了默认开启通道的数量。 下面的命令,显示此项目的配置: RMAN> show device type; RMAN 配置参数为: CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; 3.备份副本数 RMAN> show datafile backup copies; RMAN 配置参数为: CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default 当前的配置值为1,也就是备份集中,每个备份片只有一份。如果值为2,再用Backup命令进行备份时,RMAN将为每个备份片创建一个一模一样的复本。我们也可以在Backup命令中,使用Copies选项指定这项配置。 4.show all 此命令显示RMAN所有的配置。其时其中大部分配置我们不需要改,也没什么用。 - 17 - RMAN> show all; RMAN 配置参数为: CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default CONFIGURE BACKUP OPTIMIZATION OFF; # default ( „„„„„„ 省略 „„„„„„ ) 二、List命令 这个命令我们已经用过很多次了,在这里全当是总结一下: list copy of controlfile :显示以映像拷贝备份的控制文件 list backup of controlfile :显示以完全备份方式备份的控制文件 list backup of spfile :显示参数文件的备份 list backup of datafile '数据文件名' 或list backup of datafile '数据文件编号' 或:列出包含指定数据文件的备份集 list backup of tablespace \"表空间名\" :列出包含指定表空间的备份集。注意,在此命令中,表空间名都是大小。 list archivelog all :列出所有归档日志的备份 list archivelog sequence between 40 and 65 ; list archivelog from time '2008-05-27' until time '2008-05-29'; list backup tag='TWO'; 三、保留策略 什么是保留策略,如果你想让任一数据文件只能有两个一模一样的备份,超过三个的就被标记出来。这就是保留策略。RMAN可以凭借你所制定的保留策略,定义一份备份应该在什么时候失效。RMAN中有两种保留策略: REDUNDANCY n ,冗余值:如果同样的备份数量超过n,就是超出了保留策略。 RECOVERY WINDOW OF n DAYS,恢复期 : n为恢复期,如果将n定为7,意思是RMAN中现有备份要 能使数据库恢复到7天前的状态。而超过此范围的备份,将被视为超出保留策略。如有一个备份集,对于将数据库恢复到第9天前是有用的,哪么此备份集就是超出了保留策略。 超出保留策略的备份集将被设置为OBSOLETE(中文为荒废)状态。我们可以用Report obsolete查看所有超出保留策略的备份,也可以使用DELETE OBSOLETE来删除它们。 配置保留策略的命令如下: CONFIGURE RETENTION POLICY TO [REDUNDANCY n] | [RECOVERY WINDOW OF n DAYS] 我们可以使用SHOW命令显示当前的保留策略: RMAN> show RETENTION POLICY; RMAN 配置参数为: CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default 当前的保留策略是将冗余定为1。也就是同样的备份集,只要一份。多出的就是超出保留策略。 下面的命令,将保留策略的恢复期定为7: RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS; 新的 RMAN 配置参数: CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS; 已成功存储新的 RMAN 配置参数 正在启动全部恢复目录的 resync 完成全部 resync 四、REPORT List显示当前有什么备份,而Reort则显示当前哪些文件还需要备份。 1. report NEED BACKUP days N database : 统计N天内没有备份过的文件。 我们刚刚在练习时做过备份,现在使用上面的命令显示,一般不会有什么结果: - 18 - RMAN> report NEED BACKUP days 1 database; 文件报表的恢复需要超过 1 天的归档日志 文件天数据 名称 ---- ----- ----------------------------------------------------- (空的) 我们把系统的日期向后改几天再试: RMAN> report NEED BACKUP days 1 database; 文件报表的恢复需要超过 1 天的归档日志 文件天数据 名称 ---- ----- ----------------------------------------------------- 1 2 F:\\ORACLE\\ORADATA\\FOUR10G\\SYSTEM01.DBF 2 2 F:\\ORACLE\\ORADATA\\FOUR10G\\UNDOTBS01.DBF 3 2 F:\\ORACLE\\ORADATA\\FOUR10G\\SYSAUX01.DBF 4 2 F:\\ORACLE\\ORADATA\\FOUR10G\\USERS01.DBF 我显示1天没有备份的文件。一共有四个,这四个文件如果要恢复的话,需要应用1天的日志文件 2.report NEED BACKUP incremental N database :显示需要应用N份以上增量备份才能恢复的文件 3.report UNRECOVERABLE : 检验由于使用了NOLOGGING,而使哪些数据文件无法恢复 4.Report obsolete : 显示超出保留策略的备份集。 5.report schema :这个命令和备份关系不大,它可以用来显示目标库所有的数据文件。 五、交叉检查 命令:CROSSCHECK。它的作用是检查有哪些备份片其对应的文件已经被删除了。如果RMAN在指定的位置找不到备份片对应的操作系统文件,它将把此备份片标记为EXPIRED,汉语意思是过期。下面我们试一下: RMAN> CROSSCHECK backup; 分配的通道: ORA_DISK_1 ( „„„„ 省略信息 „„„„ ) 显示过期的备份: RMAN> list expired backup; 如果有过期的备份,我们可以使用delete expired backup 删除RMAN中所记载的备份。 CROSSCHECK copy可以交叉检查映像拷贝。list expired copy显示过期的映像拷贝。delete expired copy删除过期的映像拷贝。 六、删除备份 Delete backupset 备份集号 :删除指定备份集。RMAN会将操作系统中于此备份集相关的文件一起删除。 delete backup :删除所有备份集 delete expired backup|copy :删除过期的备份集或映像拷贝 delete obsolete :删除超过保留策略的已荒废的备份集 七、CHANGE命令 CHANGE命令可以更改备份集或映像拷贝的状态。 1.Change … Unavailable|available :将备份的状态改为可用或不可用。 RMAN> change backupset 807 unavailable; 不能使用更改的备份段 备份段 handle=E:\\ORACLE\\BACKUP\\BAK\\LOG2_14JHKF92_1_1 recid=19 stamp=656031011 1 对象已更改为 UNAVAILABLE 状态 - 19 - 更改后,使用List backupset命令可以查看所有到状态的变化。下面是List backupset的结果: BP 关键字: 810 状态: UNAVAILABLE 已压缩: NO 标记: LOG2 段名:E:\\ORACLE\\BACKUP\\BAK\\LOG2_14JHKF92_1_1 备份集 807 中的已存档日志列表 Thrd Seq 低 SCN 短时间 下一个 SCN 下一次 ---- ------- ---------- -------------------- ---------- --------- 1 44 165038 2008-05-28 22:01:17; 171107 2008-05-29 08:08:44; 1 45 171107 2008-05-29 08:08:44; 186719 2008-05-29 22:00:44; 状态为UNAVAILABLE(不可用)的备份,在恢复时不会被RMAN使用,RMAN全当它不存在。我再把它的状态改回可用: RMAN> change backupset 807 available; 使用通道 ORA_DISK_1 可以使用更改的备份段 备份段 handle=E:\\ORACLE\\BACKUP\\BAK\\LOG2_14JHKF92_1_1 recid=19 stamp=656031011 已将 1 对象更改为 AVAILABLE 状态 2.使备份或副本脱离保留策略 命令:Change backupset 备份集编号 KEEP FOREVER NOLOGS|LOGS 使某一个备份集永久的保存,不会超出保留。LOGS的作用是为了恢复此备份集,相应的归档日志的备份集也要一直保留,不会被设置为obsolete。 NOLOGS是只考虑指定备份集,而不管恢复时所应使用的归档日志。 八、CATALOG命令 它的作用有: 1.将使用操作系统的拷贝命令制作的冷备份与热备份,纳入到RMAN中作为映像拷贝。 Catalog datafilecopy 冷热备份名 将映像拷贝的信息从RMAN中删掉: Change datafilecopy 冷热备份名 uncatalog; 2.将归档日志纳入到RMAN中 Catalog archivelog ‘归档日志名’ 将归档备份的信息从RMAN中删掉: Change archivelog 归档日志名 uncatalog; 九、调用SQL*Plus命令 SQL ‘命令’ 十、RMAN脚本 1.创建脚本 RMAN> create script 脚本名{ 2> allocate channel d1 type disk format 'e:\\oracle\\backup\\bak\\whole_%U'; 3> backup incremental level 0 database tag='whole_inc0'; 4> } 已创建脚本 **** 2.运行脚本 run { execute script 脚本名; } 脚本必须放在Run{ }中运行。 3.删除脚本 delete script 脚本名 4.查找脚本 脚本必须在有恢复目录库的情况下使用。因为脚本的源码就是存放在恢复目录库中。我们通过恢复目录库的rc_stored_script视图,查看所有脚本 - 20 - 因篇幅问题不能全部显示,请点此查看更多更全内容