本文是Oracle support对11GR2 RMAN备份过程中的问题总结
11GR2 中的常见 RMAN 问题
11gR2 中少数几个结构更改对 RMAN 设置产生了广泛的影响
1. Snapshot/Backup(快照/备份)控制文件位置必须位于 RAC 环境中的共享位置。
在 11gR2 及更高版本中,控制文件的备份在执行时不会持有 CF enqueue。对于非 RAC 数据库,这不会造成任何影响。但是,对于 RAC数据库,由于在 11gR2 中控制文件备份机制发生了更改,集群中的任何实例都可以写入到 snapshot/backup(快照/备份)控制文件。因此,Snapshot(快照)控制文件需要对所有实例都可见。从 SQL*Plus 直接创建控制文件的备份时也存在这种情况。集群中的任何实例都可以写入到备份控制文件。控制文件备份,即使使用 SQL“alter database backup controlfile...”,也必须在共享设备上创建备份。
Snapshot(快照)控制文件必须可由 RAC 数据库的所有节点访问;如果 snapshot(快照)控制文件不在共享设备上,则在 RMAN备份获取控制文件的 snapshot(快照)时会引发错误。这适用于使用 SQL*Plus 备份控制文件和在非共享位置配置了控制文件自动备份的情况。
RMAN-00571: ========================================================
RMAN-00569: ============ ERROR MESSAGE STACK FOLLOWS =============
RMAN-00571: =========================================================
RMAN-03009: failure of resync command on default channel at 03/13/2012 10:19:41
ORA-00245: control file backup operation failed
解决方案是将 Snapshot/backup(快照/备份)控制文件位置更改到共享设备上,否则将会失败,并出现 ORA-245: control file backup operation failed。
提醒:Note 1472171.1 In RAC environment from 11.2 onwards Backup Or Snapshot controlfile needs to be in shared location 是针对此问题而发布的。
2. MMON 进程在结构发生变化之后自动进行控制文件备份
在 11GR2 之前的发行版中,更改数据库结构的每个 DDL 命令都会创建一个控制文件自动备份。在 alert.log 中可以看到,执行每个 DDL 命令之后都会有一条关于控制文件自动备份创建的消息。在同时进行多个结构更改时,这可能会导致严重的性能问题。
从 Oracle Database 11g 发行版 2 开始实施了 Controlfile Autobackup Deferral 功能。在应用的脚本中包含多个结构更改时(例如,添加表空间、变更表空间或数据文件的状态、添加新的联机重做日志、重命名文件等),RMAN 只进行一次控制文件自动备份。在 11gR2 中,控制文件自动备份由 MMON 从属进程在结构更改后的几分钟时间内创建,这可以提升性能。因此,在对数据库的结构更改数分钟之后获取控制文件自动备份是正常行为,同时在 alert.log 中不显示有关控制文件自动备份创建的消息也是正常的。
负责备份控制文件的 MMON 从属进程会产生包含了创建控制文件所需信息的跟踪文件并命名为:_m000_.trc
3. 可以在磁盘上执行恢复区备份
在 11gR2 之前,只能在磁带上执行 Flash Recovery Area(快速恢复区,简称 FRA)的备份。从 11GR2 开始,可以在磁盘上执行 FRA备份。BACKUP 命令中添加了“TO DESTINATION”子句。这个添加的选项可指定特定目录位置,以便备份到磁盘,该选项主要用于 BACKUP RECOVERY AREA 命令。如果启用了 BACKUP OPTIMIZATION,则 RMAN 仅跳过已存在于“TO DESTINATION”子句所指定目录位置中相同文件的备份。
RMAN> Backup recovery area TO DESTINATION ‘+DATA’;?
11GR2 中影响 RMAN 稳定性的常见 BUG。
1. BUG 9877980: SR11.2.0.2CSHAR_FORCE - TRC - KKSLMARKLITERALBINDS
症状:
数据库版本:11.2.0.2,CURSOR_SHARING 为 FORCE 或 SIMILAR
RMAN 备份失败,出现 ORA-01008,或者显示各种错误
?
DBGSQL: TARGET> select count(*) into :dbstate from v$parameter where lower(name) = '_dummy_instance' and upper(value) = 'TRUE'
DBGSQL: sqlcode = 1008
RMAN-00571: =========================================================
RMAN-00569: ============ ERROR MESSAGE STACK FOLLOWS ==============
RMAN-00571: =========================================================
ORA-01008: not all variables bound
或者
RMAN-00571: =====================================================
RMAN-00569: =========== ERROR MESSAGE STACK FOLLOWS ============
RMAN-00571: =====================================================
RMAN-03002: failure of allocate command at 12/07/2011 00:38:14
ORA-03114: not connected to ORACLE
并且 alert.log 中显示
ORA-07445: exception encountered: core dump [kkslMarkLiteralBinds()+240] [SIGBUS] [ADDR:0x18222D0202020D29] [PC:0x1049E96D0] [Invalid address alignment] []
或者
ORA-07445: exception encountered: core dump [kkslpli()+212] [SIGSEGV] [ADDR:0xFFFFFFFF7A973288] [PC:0x1049FEE14] [Invalid permissions for mapped object] []
根本原因是 BUG 9877980。此 Bug 的修复包括在 11.2.0.3 中。此 Bug 有one-off patch可用。
Workaround: 清空共享池
Ref:
Bug 9877980 - ORA-7445[kkslMarkLiteralBinds]