必须用RMAN自身命令(如Ctrl+C或ABORT)中止备份,禁用kill -9;否则易致控制文件损坏,引发ORA-00205或ORA-00600错误,后续须执行CROSSCHECK、验证v$backup_set并备份控制文件。
不能直接 kill -9 rman 进程,否则极大概率损坏控制文件,引发 ora-00205 或 ora-00600 错误。真正安全的终止方式必须由 rman 自身触发清理逻辑,或通过数据库会话层精准强杀。
只要 RMAN 客户端还能响应输入(即提示符仍是 RMAN> 且未卡死在 I/O),就该优先按 Ctrl+C。这不是“中断终端”,而是向 RMAN 进程发送 SIGINT,它会主动:
ALLOCATE CHANNEL)backup_set、checkpoint_change#)channel ORA_DISK_1: backup cancelled 的确认信息若按了 Ctrl+C 后无任何输出、提示符卡住不动,说明 RMAN 已失去响应,此时才考虑其他手段。
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' 的会话执行 ALTER SYSTEM KILL SESSION '<sid>,<serial>' IMMEDIATE;
INACTIVE 或 SNIPED)注意:ALTER SYSTEM KILL SESSION 不等于立刻消失,RMAN 客户端通常会报 RMAN-03002: failure 并退出;若客户端没反应,说明它已与数据库断连,需配合 OS 层清理。
仅 kill -9 rman 主进程(如 ps -ef | grep rman 找到的那个 PID)是无效的——备份仍在后台 channel 进程中运行。必须连带杀死所有关联的 beq 进程:
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 '(spid1|spid2)'(替换为上一步的 spid 值)kill -9 <spid>,最后再 kill -9 主 rman 进程 PID做完后立即验证:SELECT * FROM v$session WHERE module LIKE 'rman%'; 应无返回;ps -ef | grep rman 和 grep beq 也应为空。否则说明有残留进程还在写入,控制文件风险仍在。
哪怕看起来“停了”,也不能认为万事大吉:
CROSSCHECK BACKUP; 和 CROSSCHECK ARCHIVELOG ALL;,标记可能损坏或不一致的备份片为 EXPIRED
v$backup_set 和 v$backup_piece,确认是否有 STATUS = 'A'(Active)但实际已中断的记录BACKUP CURRENT CONTROLFILE;,强制生成一份干净的控制文件备份,防止后续启动时报 ORA-00205
最容易被忽略的是第三点:很多人以为“备份停了=控制文件没事”,但 RMAN 中断时对控制文件的更新是异步且未提交的,不手动备份一次,下次数据库异常重启就可能直接挂起。