Oracle RMAN(Recovery Manager) – 体系结构
所有DBA都很熟悉RMAN工具,我也用过很长时间,但至今没有好好整理过。最近阅读Todd Bao的《临危不惧:Oracle 11g数据库恢复技术》,发现他写RMAN部分非常详尽,层次分明(以我的角度去分析的,并不是说绝对最详尽),我决定把它整理上来,仅仅理论部分,实验全部为我本机环境上的操作。
RMAN相关参考文档
• Database Backup and Recovery Advanced User’s Guide 10g Release 2 (10.2)
• Database Backup and Recovery User’s Guide 11g Release 2 (11.2)
• Recovery Manager in Oracle 9i
• Recovery Manager (RMAN) Enhancements In Oracle 9i
• Recovery Manager (RMAN) Enhancements in Oracle Database 10g
• Recovery Manager (RMAN) Enhancements in Oracle Database 11g Release 1
Oracle的RMAN(Recovery Manager)叫做备份与恢复管理器,它提供了一个备份资料库保存备份的详细信息,可以给出针对备份的各种报表,并且整合了相关的操作系统和SQLPlus命令为rman命令,跨平台的RMAN命令既支持交互式调用,也支持脚本式调用,其目的是保护备份并且最大限度地降低备份和恢复操作中发生人为错误的可能性,事实证明,该工具相当出色地完成了任务。RMAN是备份、恢复数据库的首选工具。
我将RMAN内容分为如下几个部分:
• Oracle RMAN(Recovery Manager) – 体系结构
• Oracle RMAN(Recovery Manager) – 通道分配
• Oracle RMAN(Recovery Manager) – 备份集备份与镜像复制备份
• Oracle RMAN(Recovery Manager) – 备份的优化
• Oracle RMAN(Recovery Manager) – 安全性与监控
• Oracle RMAN(Recovery Manager) – 备份保留策略与RMAN资料库
• Oracle RMAN(Recovery Manager) – 恢复目录(Recovery Catalog)
• Oracle RMAN(Recovery Manager) – RAC备份与恢复
RMAN体系结构
RMAN体系的主要组成部分如下:
1)目标数据库(Target)
2)RMAN命令行客户端(简称RMAN客户端)
3)通道(Channel)
4)闪回恢复区(Fast Recovery Area)
5)介质管理器
6)RMAN备份资料库(简称RMAN资料库)
目标数据库(Target)和RMAN客户端
其中,最重要的两个构成是目标数据库和RMAN客户端。目标数据库是所有备份与恢复操作的目标,是受保护的对象,同时也作为RMAN备份资料库的默认保存地点(在其控制文件中)。客户端即$ORACLE_HOME/bin目录下的rman命令,是主要用来连接目标数据库实例的工具,就像SQLPlus一样,rman命令支持本地和远程连接,可以交互式地输入命令,也可以执行批处理脚本,但只允许具有SYSDBA权限的用户使用。
我用sys用户连接实例名luocs的目标数据库C:>set ORACLE_SID=luocs
C:>rman target sys/oracle
Recovery Manager: Release 11.2.0.1.0 - Production on Sun Nov 4 18:52:13 2012
Copyright © 1982, 2009, Oracle and/or its affiliates. All rights reserved.
connected to target database: LUOCS (DBID=586444229)
RMAN>
如果当前OS用户在DBA组(Unix平台)或在ORA_DBA组(Windows平台)中,那么可以不用输入用户名和密码C:>rman target /
Recovery Manager: Release 11.2.0.1.0 - Production on Sun Nov 4 18:54:32 2012
Copyright © 1982, 2009, Oracle and/or its affiliates. All rights reserved.
connected to target database: LUOCS (DBID=586444229)
RMAN>
如果是远程登录,则需要用到"@"符号及合法的TNS连接串网络服务名TNSNAMES.ORA
luocs11g = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.193)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = luocs11g) ) )
C:>rman target sys/oracle@luocs11g
Recovery Manager: Release 11.2.0.1.0 - Production on Sun Nov 4 19:01:30 2012
Copyright © 1982, 2009, Oracle and/or its affiliates. All rights reserved.
connected to target database: LUOCS11G (DBID=1468663667)
RMAN>
– 前提条件,目标数据库一定要开启监听器,下面是TARGET DB的监听器状态:[oracle@localhost ~]$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 04-NOV-2012 19:02:30
Copyright © 1991, 2009, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost.localdomain)(PORT=1521)))STATUS of the LISTENER
------------------------Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.1.0 - ProductionStart Date 04-NOV-2012 19:00:07Uptime 0 days 0 hr. 2 min. 23 sec
Trace Level off
Security ON: Local OS AuthenticationSNMP OFF
Listener Parameter File /u01/app/oracle/product/11.2.0.1/dbhome_1/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/localhost/listener/alert/log.xml
Listening Endpoints Summary… (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost.localdomain)(PORT=1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost.localdomain)(PORT=2100))(Presentation=FTP)(Session=RAW))Services Summary…Service “luocs10g” has 1 instance(s). Instance “luocs10g”, status READY, has 1 handler(s) for this service…Service “luocs10gXDB” has 1 instance(s). Instance “luocs10g”, status READY, has 1 handler(s) for this service…Service “luocs10g_XPT” has 1 instance(s). Instance “luocs10g”, status READY, has 1 handler(s) for this service…Service “luocs11g” has 1 instance(s). Instance “luocs11g”, status READY, has 1 handler(s) for this service…Service “luocs11gXDB” has 1 instance(s). Instance “luocs11g”, status READY, has 1 handler(s) for this service…Service “luocs9i” has 1 instance(s). Instance “luocs9i”, status READY, has 1 handler(s) for this service…Service “luocs9iXDB” has 1 instance(s). Instance “luocs9i”, status READY, has 1 handler(s) for this service…Service “ocm” has 1 instance(s). Instance “ocm”, status READY, has 1 handler(s) for this service…Service “ocm_XPT” has 1 instance(s). Instance “ocm”, status READY, has 1 handler(s) for this service…The command completed successfully
– 这机器上我安装了9i、10g、11g。
然而,我们会发现无法用rman连接10g和9i的实例C:>rman target sys/oracle@luocs10g
Recovery Manager: Release 11.2.0.1.0 - Production on Sun Nov 4 19:04:20 2012
Copyright © 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Recovery Manager incompatible with TARGET database: RMAN 8.0.4.0 to 10.2.0.0 req
uired
RMAN-00571: ===========================================================RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============RMAN-00571: ===========================================================RMAN-00554: initialization of internal recovery manager package failed
RMAN-06429: TARGET database is not compatible with this version of RMAN
C:>rman target sys/oracle@luocs9i
Recovery Manager: Release 11.2.0.1.0 - Production on Sun Nov 4 19:04:54 2012
Copyright © 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Recovery Manager incompatible with TARGET database: RMAN 8.0.4.0 to 9.2.0.0 requ
ired
RMAN-00571: ===========================================================RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============RMAN-00571: ===========================================================RMAN-00554: initialization of internal recovery manager package failed
RMAN-06429: TARGET database is not compatible with this version of RMAN
而我们的TNS服务名是没有错误的,如下都能正常连接。C:>sqlplus system/oracle@luocs10g
SQL*Plus: Release 11.2.0.1.0 Production on Sun Nov 4 19:09:57 2012
Copyright © 1982, 2010, Oracle. All rights reserved.
Connected to:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - ProductionWith the Partitioning, OLAP and Data Mining options
C:>sqlplus system/oracle@luocs9i
SQL*Plus: Release 11.2.0.1.0 Production on Sun Nov 4 19:10:06 2012
Copyright © 1982, 2010, Oracle. All rights reserved.
Connected to:Oracle9i Enterprise Edition Release 9.2.0.4.0 - ProductionWith the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production
system@LUOCS9I>
其实上面问题发生原因是Target数据库和RMAN Catalog数据库版本不兼容导致的,所以要使用RMAN远程连接的时候注意下Target DB和CATALOG DB版本。
补充:客户端的一次登录会在目标数据库上创建两个连接,也就是说,有两个服务器进程为RMAN服务:一个是RMAN主会话,负责与客户端进行通信及传达指令;另一个是RMAN监控会话,负责监控通道。
下面查看下,先只建立RMAN连接,不做任何事情C:>rman target sys/oracle@luocs11g
Recovery Manager: Release 11.2.0.1.0 - Production on Sun Nov 4 19:36:43 2012
Copyright © 1982, 2009, Oracle and/or its affiliates. All rights reserved.
connected to target database: LUOCS11G (DBID=1468663667)
RMAN>
登录TARGET DB,查看sys@LUOCS11G> col MODULE for a20
sys@LUOCS11G> col ACTION for a20
sys@LUOCS11G> select sid, serial#, module, action from v$session where module like ‘%rman%’;
SID SERIAL# MODULE ACTION---------- ---------- -------------------- -------------------- 24 62891 rman.exe 0000001 FINISHED70
35 13845 rman.exe
复制
通道
所谓通道,是指RMAN体系中执行备份、还原操作时用来处理I/O流的物理结构和逻辑结构的结合体。它确定了I/O流的源头、目的及操作者,即会话,该会话是一个除了RMAN主会话和RMAN监控会话以外的会话,其中一个会话对应一个服务器进程,也就是说,如果使用一个通道备份数据库,那么RMAN在目标数据库上将占用3个会话,也就是3个服务器进程(并不是说会话与服务器进程一定是一一对应的关系,但在RMAN的情况下确实如此)。
通过下面的示例即可说明。sys@LUOCS11G> SELECT SPID FROM VSESSION WHERE MODULE LIKE ‘%rman%’) 3 /
SPID
------------------------------------------------44454447
[root@localhost ~]# ps -ef | grep 444[5,7]oracle 4445 1 0 19:36 ? 00:00:00 oracleluocs11g (LOCAL=NO)oracle 4447 1 0 19:36 ? 00:00:00 oracleluocs11g (LOCAL=NO)-- 目前只有两个进程
我执行了下备份RMAN> backup current controlfile;
Starting backup at 04-NOV-12allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=167 device type=DISK
channel ORA_DISK_1: starting full datafile backup setchannel ORA_DISK_1: specifying datafile(s) in backup setincluding current control file in backup setchannel ORA_DISK_1: starting piece 1 at 04-NOV-12channel ORA_DISK_1: finished piece 1 at 04-NOV-12piece handle=/u01/app/oracle/product/11.2.0.1/dbhome_1/dbs/02npg3me_1_1 tag=TAG2
0121104T200013 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:02Finished backup at 04-NOV-12
再查看,进程数变为3个了sys@LUOCS11G> SELECT SPID FROM VSESSION WHERE MODULE LIKE ‘%rman%’) 3 /SPID
------------------------------------------------444544478784
上面提到(并不是说会话与服务器进程一定是一一对应的关系),这里涉及到Oracle会话的概念,老白在新书《DBA的思想天空》里非常详细地讲了Oracle会话,引入其中一段:
会话建立后,就称为客户进程和数据库实例之间的沟通渠道和桥梁,执行客户端对数据库的操作,包括执行SQL。不过会话是一个逻辑结构,必须依赖于其容器 — 服务进程(也叫前台进程)。在独立服务器模式下,每个会话对应一个独立的服务进程,Oracle也提供了一种共享服务器模式,在这种模式下,一个服务器进程可以为多个会话服务,换句话说,一个服务器进程可以成为多个胡话的容器。
闪回恢复区
闪回恢复区(快速恢复区)则是RMAN备份默认的磁盘保存地点,通过它Oracle公司提倡用户采用两种策略:直观的备份策略 — 将备份先保留在磁盘上,然后再转移到磁带上;注重效率的恢复策略 — 一旦出了问题,首先考虑磁盘至磁盘的恢复而不是磁带至磁盘的恢复,其作用就像是磁带在磁盘上的缓存。
Oracle建议闪回恢复区应该和数据库(控制文件、联机重做日志文件、数据文件等)使用物理上隔离的存储设备,并且为其预留足够的磁盘空间(建议至少比整个数据库还要大)。
关于闪回恢复区,请参考我写的《 L谈闪回恢复区 – Flash Recovery Area (FRA) 》。
– Todd Bao喜欢把FRA叫做快速恢复区,其实这翻译来自 Fast Recovery Area,而FRA也可以叫为Flash Recovery Area,即闪回恢复区。我是更偏向于后者,所以在我的文章里就叫闪回恢复区。
介质管理器
介质管理器的功能则是使RMAN可以对第三存储体(最典型的就是磁带)进行(间接的)读/写操作,其接口MML(Media Management Layer,介质管理层)由Oracle指定,管理器本身一般由第三方或OSB(Oracle安全备份软件)提供,它们需要另外安装、配置方法可使用。
备份时,RMAN向介质管理器传递字节流(被备份的文件中的数据);还原时介质管理器向RMAN传递字节流(还原所需的数据)。
也有RMAN将备份和还原时的读/写操作完全托付给介质管理器去具体实现的,这种功能在MML中称为代理复制(Proxy Copy)。
上面提到了OSB(Oracle安全备份软件),这里并不是指Oracle Service Bus,而是指Oracle Secure Backup。
RMAN资料库
RMAN资料库记载了RMAN备份(不论是备份集中的备份片还是镜像复制)的位置和其他相关信息。
实际上RMAN资料库可以保存在两个不同的地点:目标数据库的控制文件和恢复编录(Recovery Catalog)。
– Todd Bao把Recovery Catalog叫作恢复编录,而其他地方也有叫恢复目录,我自己更偏向恢复目录。
声明:此文章大部分理论内容来自书籍《临危不惧:Oracle 11g数据库恢复技术》。