AnyBackup-备份 Linux/Unix 服务器上的 Oracle 数据库失败,任务执行输出中提示 ORA-00230 错误信息
关键字
ORA-00230
适用产品
- AnyBackup 6.0.x
- AnyBackup CDM 7.0.x
- AnyBackup Express 7.0.x
问题描述
在 AnyBckup 管理控制台发起 Oracle 数据库备份任务失败,查看执行输出中有 ORA-00230 的错误信息,如下图所示:
ORA-00230 : operation disallowed: snapshot control file enqueue unavailable

问题影响
Oracle 数据库无法成功完成备份。
问题原因
上一次备份任务异常结束,导致控制文件快照被残留备份进程占用,无法完成控制文件备份。
解决方案
对于此问题,需要结束占用控制文件快照的 session ,执行步骤如下:
1. SSH 远程登录到 Oracle 数据库服务器后台,切换到 oracle 用户下,登入 Oracle 数据库,执行命令如下:
export ORACLE_SID= orcl
sqlplus / as sysdba
说明:orcl 为需要备份的 Oracle 数据库实例名,实例名区分大小写,具体以实际环境为准。
SELECT s.SID, USERNAME AS "User", PROGRAM, MODULE,ACTION, LOGON_TIME "Logon" FROM V$SESSION s, V$ENQUEUE_LOCK l WHERE l.SID = s.SID AND l.TYPE = 'CF' AND l.ID1 = 0 AND l.ID2 = 2;
说明:上图示例中,卡住的 session 的 sid 值为1732,具体以实际环境为准。
3. 通过第2步确认的 sid 查询此 session 的 serial、spid 值,执行命令如下:
select s.sid,s.serial#,p.spid,p.pid from v$session s ,v$process p where s.paddr=p.addr and s.sid= 1732;
说明:上图示例中,serial 值为2619,spid 值为25833,具体以实际环境为准。
4. 通过第3步确认的 sid、serial 值结束掉对应 session 进程,执行命令如下:
alter system kill session '1732,2619' immediate;
5. 退出数据库,在操作系统中确认备份进程已经被结束,执行命令如下:
exit
ps -ef | grep 25833 | grep -v grep
6. 若还存在进程 pid 值为从数据库中查询到的 spid 值的进程,请手动结束此进程之后再发起备份,结束进程命令如下:
kill -9 25833