ctrl+c是rman备份卡住时唯一安全的首选操作,它发送sigint触发rman主动清理通道、回滚未完成备份片并重置控制文件状态;若无响应再依次采用abort、sql强杀会话或os层kill -9(需同步清除beq子进程),事后必须执行crosscheck及备份控制文件。

Ctrl+C 是唯一安全的首选操作
RMAN 备份卡住时,只要终端还显示 RMAN> 提示符、光标可输入,就别碰 kill -9。按 Ctrl+C 不是“中断终端”,而是向 RMAN 进程发送 SIGINT,它会主动执行清理:关闭所有已分配通道、回滚未写完的备份片、重置控制文件中 backup_set 和 checkpoint_change# 状态位。成功时你会看到类似 channel ORA_DISK_1: backup cancelled 的输出。
常见错误现象:按了 Ctrl+C 后无任何响应、提示符卡死不动——说明 RMAN 已失去响应,此时才进入下一步。
- 不要用
EXIT:它只退出当前 RMAN 会话,对正在运行的备份完全无效 -
ABORT命令只对最近一次ALLOCATE CHANNEL生效,不支持“一键全停” - 若 RMAN 客户端已无响应(比如 ps 显示
rman target /但无交互提示),Ctrl+C就失效了
查不到 RMAN 提示符时,用 SQL 强杀活跃通道会话
RMAN 通道在数据库里是真实会话,但不能靠 PROGRAM 字段识别(它常显示为 oracle@host (TNS V1-V3)),必须看 MODULE 字段:
SELECT sid, serial#, program, module, action FROM v$session WHERE module LIKE 'rman%';
只对 status = 'ACTIVE' 且 state = 'EXECUTING' 的会话执行强杀,避免误杀已结束但尚未清理的 INACTIVE 或 SNIPED 会话。
ALTER SYSTEM KILL SESSION '123,45678' IMMEDIATE;
注意:ALTER SYSTEM KILL SESSION 不等于立刻消失,RMAN 客户端通常报 RMAN-03002: failure during 并退出;若客户端没反应,说明它已与数据库断连,需配合 OS 层清理。
OS 层 kill 必须同时干掉 rman 主进程和所有 beq 子进程
仅 kill -9 主 rman 进程(如 ps -ef | grep rman 找到的那个 PID)是无效的——备份仍在后台 beq 进程中运行。
先查通道进程对应 OS PID:
SELECT sid, spid, client_info FROM v$process p, v$session s WHERE p.addr = s.paddr AND client_info LIKE '%rman%';
再查具体进程:
ps -ef | grep beq | grep -E '(12345|67890)'(把上一步的 spid 值填进去)
逐个执行 kill -9 12345、kill -9 67890,最后再 kill -9 主 rman 进程 PID。
做完后立即验证:
SELECT * FROM v$session WHERE module LIKE 'rman%'; 应无返回;ps -ef | grep rman 和 grep beq 也应为空。否则说明有残留进程还在写入,控制文件风险仍在。
中止后必须立刻验证并补救控制文件状态
哪怕看起来“停了”,也不能认为任务已干净结束。直接 kill -9 导致的控制文件损坏不会立刻报错,但后续可能触发 ORA-00205(无法识别控制文件)或更隐蔽的 ORA-00600 内部错误。
必须立即做三件事:
- 执行
CROSSCHECK BACKUP和CROSSCHECK ARCHIVELOG,同步 RMAN 仓库状态 - 查询
v$backup_set,确认没有STATUS = 'ACTIVE'的残留记录 - 立即执行一次控制文件备份:
BACKUP CURRENT CONTROLFILE;
最容易被忽略的是:kill -9 后残留的 beq 进程可能仍在往磁盘写数据,此时跑 SELECT 查不到会话,但 ps 仍能看到进程——这种“半死不活”的状态最危险,必须双查(SQL + OS)确认清空。











