RMAN 故障排除与调优指南
1. 备份存储选择
相较于磁盘,磁带的速度较慢。因此,建议配置快速恢复区(FRA),最好将其配置在 ASM 磁盘组上,并将其作为备份的首选目标。
2. 监控 RMAN 会话和操作
RMAN 通过通道执行任务,这些通道在数据库中维护会话,就像其他普通用户会话一样。可以使用标准数据库视图
V$SESSION
和
V$PROCESS
来跟踪 RMAN 的工作。
- 查找通道的系统 ID(SID) :最简单的方法是查看 RMAN 提示。例如,备份命令的部分输出如下:
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=55 device type=DISK
可以看到,通道的 SID 以及它将使用的设备类型都包含在输出中。
- 单会话 RMAN 通道跟踪 :如果使用单个 RMAN 会话,可以使用以下查询跟踪其使用的通道详细信息:
SQL> SELECT s.sid,p.spid,s.client_info
2 FROM V$process p, V$session s
3 WHERE p.addr=s.paddr AND client_info like '%rman%';
输出示例:
SID SPID CLIENT_INFO
---------- ------------------------ --------------------------
55 3580 rman channel=ORA_DISK_1
这里的 SID 是数据库内服务器进程的会话 ID,SPID 是操作系统的进程 ID。
-
多会话 RMAN 通道跟踪
:对于同时运行的多个 RMAN 会话,最好使用
SET COMMAND ID,并在RUN块中执行命令时使用它。例如,使用 “session” 后跟不同数字来表示不同会话,如 “session1” 和 “session2”,查询将变为:
SQL> SELECT s.sid,p.spid,s.client_info
2 FROM V$process p, V$session s
3 WHERE p.addr=s.paddr AND client_info like '%sess%'
输出示例:
SID SPID CLIENT_INFO
---- -------- ------------------------
45 3563 id=session1
55 3580 id=session1,rman channel=ORA_DISK_1
在 RMAN 中,两个会话的
RUN
块如下:
RMAN> run{
2> set command id to 'session1';
3> backup tablespace users;}
RMAN> run{
2> set command id to 'session2';
3> backup tablespace users;}
3. 跟踪备份作业
可以使用
V$RMAN_BACKUP_JOB_DETAILS
视图(也可以使用
RC_RMAN_BACKUP_JOB_DETAILS
)来列出和比较在一个 RMAN 会话中创建的备份作业。例如:
SQL> SELECT session_key S_KEY,session_recid S_RECID,start_time,
2 end_time, round(output_bytes/1048576) as OUTPUT_MB,
elapsed_seconds
3 FROM V$RMAN_BACKUP_JOB_DETAILS
4 WHERE start_time >= sysdate-180 and status='COMPLETED'
5 AND input_type='DB FULL';
输出示例:
S_KEY S_RECID START_TIM END_TIME OUTPUT_MB ELAPSED_SECONDS
----- ------- --------- --------- ---------- ---------------
7 7 26-JAN-13 26-JAN-13 1143 125
13 13 26-JAN-13 27-JAN-13 4321 8757
需要注意的是,此视图不会随数据库关闭而重置,有时访问该视图也会变慢。通过查看
ELAPSED_SECONDS
列,可以推断哪个备份作业花费的时间更长。
4. 监控恢复作业
可以使用
V$RECOVERY_PROGRESS
视图来监控恢复操作的进度。查询如下:
SQL>SELECT type, item, units, sofar, total
2 FROM V$RECOVERY_PROGRESS;
该视图的输出将显示每个项目(如日志文件、已应用的重做日志等)的总工作量(TOTAL)中已完成的工作量(SOFAR)。通过此视图,可以判断恢复操作是否正在进行或是否卡住,并估计完成所需的时间。
5. 使用
V$SESSION_LONGOPS
视图
该视图用于跟踪数据库中的任何长时间运行的操作,对于 RMAN 来说,可以是长时间运行的备份或恢复操作。使用该视图需要从
V$SESSION
视图中找到进程 ID:
SQL> COLUMN program FORMAT a30
SQL> SELECT sid, serial#, program,status
2 FROM v$session WHERE lower(program) LIKE '%rman%';
输出示例:
SID SERIAL# PROGRAM STATUS
---------- ---------- ------------------------------ --------
20 35 rman@machine2 (TNS V1-V3) INACTIVE
44 97 rman@machine2 (TNS V1-V3) INACTIVE
在启动 RMAN 时,会分配两个会话。配置执行实际 I/O 的通道时,会再分配一个会话,查询输出会增加一行:
SID SERIAL# PROGRAM STATUS
---------- ---------- ------------------------------ --------
20 35 rman@machine2 (TNS V1-V3) INACTIVE
39 149 rman@machine2 (TNS V1-V3) ACTIVE
44 97 rman@machine2 (TNS V1-V3) INACTIVE
如果要确认某个会话是否为通道,可以将
V$SESSION
视图与
V$PROGRAM
视图进行映射:
SQL> SELECT s.sid,p.spid,s.client_info
2 FROM V$process p, V$session s
3 WHERE p.addr=s.paddr and client_info like '%rman%';
输出示例:
SID SPID CLIENT_INFO
---------- ------------------------ --------------------------
39 9567 rman channel=ORA_DISK_1
启动数据库备份作业后,可以查看
V$SESSION_LONGOPS
视图的输出:
SQL> SELECT sid, serial#, opname, time_remaining
2 FROM v$session_longops Where sid||serial# in (39149)
3 AND time_remaining > 0;
输出示例:
SID SERIAL# OPNAME TIME_REMAINING
---------- ---------- ----------------------------- --------------
39 149 RMAN: full datafile backup 155
还可以自定义
V$SESSION_LONGOPS
视图的输出,以显示备份作业完成的百分比:
SQL> SELECT SID, SERIAL#, CONTEXT, SOFAR, TOTALWORK,
2 ROUND(SOFAR/TOTALWORK*100,2) "%COMPLETE"
3 FROM V$SESSION_LONGOPS WHERE OPNAME LIKE 'RMAN%'
4 AND OPNAME NOT LIKE '%aggregate%'
5 AND TOTALWORK != 0 AND SOFAR <> TOTALWORK
6 /
输出示例:
SID SERIAL# CONTEXT SOFAR TOTALWORK %COMPLETE
---- ---------- ---------- ---------- ---------- ----------
39 149 1 46648 491600 9.49
持续执行该查询,可以查看工作完成情况。如果作业似乎停滞不前,
%COMPLETE
列没有进展,可以查询
V$SESSION_WAIT
视图来找出 RMAN 正在等待的等待事件:
SQL> SELECT sid, event, seconds_in_wait AS sec_wait
2 FROM V$session_wait WHERE wait_time= 0
3 AND sid in(SELECT sid FROM V$session
4 WHERE lower(program) like '%rman%')
5 /
输出示例:
SID EVENT SEC_WAIT
---------- ---------------------------------------- ----------
34 RMAN backup & recovery I/O 0
40 SQL*Net message from client 3
47 SQL*Net message from client 58
6. 控制 RMAN 性能
为了确保 RMAN 不会消耗过多的 I/O 带宽,并且在备份过程中不会对数据库的整体性能产生太大影响,可以使用以下选项:
-
RATE 参数
:为通道配置该参数,设置 RMAN 可以执行的 I/O 上限,控制一个通道可以读取的数据量。没有定义的最佳设置,应设置为使磁盘在分配带宽后仍有剩余带宽的值。对于磁带备份,如果磁带不流式传输,最好从
CONFIGURE
或
ALLOCATE
命令中删除该参数。
-
MAXPIECE 参数
:限制 RMAN 允许的最大备份片大小,避免创建大尺寸的备份片并花费过多时间。
-
DURATION 参数
:控制 RMAN 完成作业所需的时间,格式为
HH:MM
。例如:
RMAN> BACKUP DURATION 2:00 TABLESPACE users;
还可以结合以下两种配置使用:
-
MINIMIZE TIME
:使 RMAN 发挥最大性能,但会消耗大量系统资源,影响数据库性能。
-
MINIMIZE LOAD
:使 RMAN 在给定时间内平衡作业性能,避免过度消耗系统资源。但对于磁带备份,使用该选项可能不是最优选择,因为可能会限制磁带的数据流式传输速率,使备份变慢,并且在作业完成前磁带不会释放。
如果作业在分配的时间内未完成,RMAN 将中止备份并报告。可以使用
PARTIAL
选项使 RMAN 完成命令而不是中断它。
7. 使用增量、多部分、多路复用和并行性
为了减少 RMAN 备份作业的时间,可以使用以下 RMAN 内置功能:
-
增量备份
:与完整备份相比,增量备份只考虑修改过的块,完成时间远低于正常备份。使用块更改跟踪文件可以使增量备份更高效、更节省时间。
-
多部分备份
:对于大尺寸文件,可以使用多个通道并行备份单个文件,实现文件内并行性。在 Oracle Database 12c 中,增量备份和镜像副本备份都可以使用多部分备份。
-
多路复用
:允许单个通道同时读取多个数据文件或归档重做日志。默认情况下,
FILESPERCET
设置为 64,多路复用值为 8,表示单个通道一次可以读取 8 个文件。在设置该值之前,需要进行全面的基准测试。
-
并行性
:串行过程总是比并行过程慢,RMAN 备份也是如此。为了提高备份性能,可以调整通道数量。但每个通道都是一个单独的进程,会作为一个单独的会话进入数据库,分配过多通道会耗尽系统资源。对于使用相同概念配置的磁盘或磁盘组中的磁盘进行备份,通道数量应设置为磁盘数量;对于使用磁带驱动器进行备份,通道数量应与使用的磁带驱动器数量相等。
此外,如果配置了物理备用数据库,可以将备份任务卸载到其上,还可以受益于增量备份,减轻主服务器的负担,因为物理备用数据库通常不如主数据库繁忙,有更多系统资源可供 RMAN 使用以优化性能。
8. 使用跟踪功能排除 RMAN 性能问题
启用 RMAN 跟踪有以下三种方法,但由于收集的信息量大且格式不佳,应仅在极端情况下使用,例如 RMAN 完全无响应时,并让 Oracle 支持人员分析跟踪文件以找出瓶颈原因:
-
使用 DEBUG 选项
:
$ rman target / log=/tmp/rman.log trace=/tmp/rmantrc.trc debug=IO
生成的跟踪文件包含大量内部信息,超出了本文的范围,最好在 Oracle 支持人员的要求下生成并让他们分析。
-
使用 10046 跟踪事件
:
$ rman target / catalog <connection> debug trace=/tmp/rmantrc.trc log=/tmp/rmanlog.txt
RMAN> sql "alter session set tracefile_identifier='rman_10046'";
RMAN> sql "alter session set events '10046 trace name context forever,level 12'";
RMAN> BACKUP DATABASE;
RMAN> exit;
生成的跟踪文件可以使用
Trace Kernel Profiler (TKPROF)
等工具进行格式化分析,也可以使用
Trace Analyzer (TRCA)
。建议将文件发送给 Oracle 支持人员进行分析。
-
使用 SQLNET 跟踪
:通过设置
TRACE_LEVEL_SERVER
或
TRACE_LEVEL_CLIENT
参数在服务器端或客户端的
SQLNET.ora
文件中启用 SQLNET 跟踪,以排除网络相关的瓶颈。此操作应在 Oracle 支持人员的要求下进行,并将生成的跟踪文件发送给他们进行正确分析。
通过以上方法,可以有效地监控、调优和排除 RMAN 备份和恢复过程中的各种问题,提高数据库的可用性和性能。
RMAN 故障排除与调优指南(续)
9. RMAN 操作流程总结
为了更清晰地展示 RMAN 的操作流程,下面通过一个 mermaid 流程图来呈现主要的操作步骤和决策点。
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;
A([开始]):::startend --> B(选择备份存储):::process
B --> C{是否监控会话和操作}:::decision
C -- 是 --> D(使用 V$SESSION 和 V$PROCESS 跟踪):::process
C -- 否 --> E{是否跟踪备份作业}:::decision
D --> E
E -- 是 --> F(使用 V$RMAN_BACKUP_JOB_DETAILS 视图):::process
E -- 否 --> G{是否监控恢复作业}:::decision
F --> G
G -- 是 --> H(使用 V$RECOVERY_PROGRESS 视图):::process
G -- 否 --> I{是否使用 V$SESSION_LONGOPS 视图}:::decision
H --> I
I -- 是 --> J(从 V$SESSION 找进程 ID 并查询):::process
I -- 否 --> K{是否控制 RMAN 性能}:::decision
J --> K
K -- 是 --> L(使用 RATE、MAXPIECE、DURATION 参数):::process
K -- 否 --> M{是否使用增量等功能}:::decision
L --> M
M -- 是 --> N(使用增量、多部分、多路复用和并行性):::process
M -- 否 --> O{是否使用跟踪功能}:::decision
N --> O
O -- 是 --> P(使用 DEBUG、10046 事件、SQLNET 跟踪):::process
O -- 否 --> Q([结束]):::startend
P --> Q
这个流程图展示了从开始选择备份存储,到后续的监控、性能控制、功能使用以及故障排除等一系列操作的逻辑顺序。在实际使用 RMAN 时,可以根据具体需求和场景,按照这个流程进行操作和决策。
10. 常见问题及解决方案汇总
在使用 RMAN 过程中,可能会遇到一些常见问题,下面将这些问题及对应的解决方案进行汇总:
| 问题描述 | 可能原因 | 解决方案 |
| — | — | — |
| 备份作业长时间未完成 | 1. I/O 瓶颈
2. 系统资源不足
3. 备份片过大 | 1. 检查磁盘 I/O 情况,调整 RATE 参数
2. 检查系统资源使用情况,优化数据库配置或增加硬件资源
3. 设置 MAXPIECE 参数限制备份片大小 |
| RMAN 无响应 | 1. 严重的 I/O 问题
2. 内部逻辑错误 | 1. 启用 RMAN 跟踪(如 DEBUG 选项、10046 跟踪事件),让 Oracle 支持人员分析跟踪文件
2. 检查数据库日志,查找可能的错误信息 |
| 磁带备份速度慢 | 1. RATE 参数限制
2. MINIMIZE LOAD 选项影响 | 1. 从 CONFIGURE 或 ALLOCATE 命令中删除 RATE 参数
2. 避免使用 MINIMIZE LOAD 选项 |
| 作业在分配时间内未完成被中止 | 未考虑作业的实际复杂度和数据量 | 使用 PARTIAL 选项让 RMAN 完成命令,或重新评估并调整 DURATION 参数 |
11. 最佳实践建议
为了更好地使用 RMAN 进行数据库备份和恢复,以下是一些最佳实践建议:
-
备份存储选择
:优先选择 ASM 磁盘组配置 FRA 作为备份目标,确保备份的高效性。
-
监控与调优
:
- 定期监控 RMAN 会话和作业,使用相应的视图(如
V$RMAN_BACKUP_JOB_DETAILS
、
V$RECOVERY_PROGRESS
等)及时发现问题。
- 根据实际情况调整 RATE、MAXPIECE、DURATION 等参数,平衡 RMAN 性能和数据库整体性能。
-
功能使用
:
- 对于大尺寸文件和频繁数据变更的情况,优先使用增量备份和多部分备份,提高备份效率。
- 合理配置多路复用和并行性,避免过度分配通道导致系统资源耗尽。
- 如果有物理备用数据库,将备份任务卸载到其上,减轻主服务器负担。
-
故障排除
:
- 仅在极端情况下启用 RMAN 跟踪,将跟踪文件交给 Oracle 支持人员分析。
- 当作业出现异常时,及时查询相关视图(如
V$SESSION_WAIT
)找出等待事件,定位问题。
12. 总结
RMAN 是 Oracle 数据库中强大的备份和恢复工具,但在使用过程中需要注意性能控制、功能使用和故障排除等方面。通过选择合适的备份存储,利用各种监控视图实时了解作业情况,合理配置参数和使用内置功能,可以有效提高备份和恢复的效率,减少对数据库正常运行的影响。同时,在遇到问题时,能够准确地定位和解决,确保数据库的可用性和数据的安全性。希望本文提供的信息和建议能够帮助 DBA 们更好地管理和维护 Oracle 数据库的备份和恢复工作。
超级会员免费看
106

被折叠的 条评论
为什么被折叠?



