查看原文
其他

案例:RMAN 备份控制文件报错 ORA-00230

JiekeXu JiekeXu DBA之路 2024-03-03

作者 | JiekeXu

来源 | JiekeXu之路(ID: JiekeXu_IT)

转载请联系授权 | (微信ID:xxq1426321293)

大家好,我是 JiekeXu,很高兴又和大家见面了,今天分享一个上月处理的案例:RMAN 备份控制文件报错 ORA-00230本文首发于微信公众号【JiekeXu之路】,欢迎点击上方蓝字关注我吧!

抓住八月的小尾巴,抽出一点点时间记录一下这个神奇的错误 ORA-00230,前段时间备份岗在执行备份时,说有几个数据库在备份控制文件时报错,无法备份控制文件,便派了事件单过来让检查问题所在。顿时感觉很新鲜,一直没有遇到这样的问题,便去看了看。


登陆数据库查看 Alert 日志发现以下报错:

不允许操作:快照控制文件入队不可用


RMAN-03009: failure of backup command on t1 channel at 07/20/2020 11:09:25ORA-00230: operation disallowed: snapshot control file enqueue unavailable


首先便去查看控制文件:


sqlplus / as sysdbaSQL> select name from v$controlfile;NAME--------------------------------------------------------------------------------+DATA/cmdb/controlfile/current.260.912246715
rman target /RMAN> show all;using target database control file instead of recovery catalogRMAN configuration parameters for database with db_unique_name CMASDB are:CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 31 DAYS;CONFIGURE BACKUP OPTIMIZATION OFF; # defaultCONFIGURE DEFAULT DEVICE TYPE TO DISK; # defaultCONFIGURE CONTROLFILE AUTOBACKUP OFF; # defaultCONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # defaultCONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # defaultCONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # defaultCONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # defaultCONFIGURE MAXSETSIZE TO UNLIMITED; # defaultCONFIGURE ENCRYPTION FOR DATABASE OFF; # defaultCONFIGURE ENCRYPTION ALGORITHM 'AES128'; # defaultCONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # defaultCONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # defaultCONFIGURE SNAPSHOT CONTROLFILE NAME TO '+DATA/cmdb/controlfile/snapcf_cmdb.f';RMAN> exit


rman 记录控制文件位置也在共享存储中,无任何问题,便使用系统自带的 oerr 查看错误提示:


JiekeXuDB1:/home/oracle$oerr ora 23000230, 00000, "operation disallowed: snapshot control file enqueue unavailable"// *Cause: The attempted operation cannot be executed at this time because// another process currently holds the snapshot control file enqueue.// *Action: Retry the operation after the concurrent operation that is holding// the snapshot control file enqueue terminates.


翻译出来就是:

操作不允许:快照控制文件入队不可用。

此时无法执行尝试的操作,因为另一个进程当前持有快照控制文件入队。

在持有快照控制文件队列的并发操作终止后重试操作。


大概意思就是说有进程在占用,于是利用搜索引擎查查其他人是怎么说的。查阅网上介绍 rman 备份遇到 ORA-00230 有 2 个原因,一是 9.2.0.8 的数据库的 rman 配置了磁带库备份,在备份时磁带库故障响应超时导致,二是数据库在之前的 rman 备份过程中被异常中断,残留有上次 rman 的备份进程。我们的数据库是 11204 没有 9i 版本,排除第一种可能。咨询相关人员后确认是由于上次将备份任务异常终止导致的,那么接下来按 RMAN 备份异常中断导致控制文件无法备份的处理过程。



网上给出了查询异常终止的 SQL 亲测可用,但据说也有没法查看的。

set line 345col user for a20 col MODULE for a30 col ACTION for a20 SELECT s.SID, USERNAME AS "User", PROGRAM, MODULE,ACTION, LOGON_TIME "Logon"FROM V$SESSION s, V$ENQUEUE_LOCK lWHERE l.SID = s.SIDAND l.TYPE = 'CF'AND l.ID1 = 0AND l.ID2 = 2;
---下面便是实际生产环境处理过程JiekeXuDB1:/home/oracle$
SQL> col user for a20 SQL> col MODULE for a30 SQL> col ACTION for a20 SQL> SELECT s.SID, USERNAME AS "User", PROGRAM, MODULE, 2 ACTION, LOGON_TIME "Logon" 3 FROM V$SESSION s, V$ENQUEUE_LOCK l 4 WHERE l.SID = s.SID 5 AND l.TYPE = 'CF'  6  AND l.ID1 = 0 AND l.ID2 = 2; 7 SID User PROGRAM MODULE ACTION Logon---------- -------------------- ------------------------------------------------ ------------------------------ -------------------- ------------------- 101 SYS rman@JiekeXuDB1 (TNS V1-V3) backup full datafile 0000040 STARTED16 2020-07-14 22:43:54
---根据查到的 SID 查看操作系统 SPID。SQL> select spid from v$process where addr in(select paddr from v$session where sid=101);

SPID------------------------27394192
---根据 SPID 进程查看具体的进程名,判断进程的作用。LOCAL=YES 非数据库核心进程,便可以直接 kill -9 杀掉。JiekeXuDB1:/home/oracle$ps -ef | grep 27394192 oracle 27394192 1 0 Jul 14 - 0:05 oraclecmdb1 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))) JiekeXuDB1:/home/oracle$kill -9 27394192JiekeXuDB1:/home/oracle$JiekeXuDB1:/home/oracle$ps -ef | grep 27394192 oracle 19726386 38928542 0 16:10:00 pts/0 0:00 grep 27394192


数据库再次查看已经没有进程占用了,可以正常备份了。


SQL> SELECT s.SID, USERNAME AS "User", PROGRAM, MODULE, 2 ACTION, LOGON_TIME "Logon" 3 FROM V$SESSION s, V$ENQUEUE_LOCK lWHERE l.SID = s.SIDAND l.TYPE = 'CF' AND l.ID1 = 0 AND l.ID2 = 2; 4 5 6 7 no rows selected

前面说上面 SQL 不太好使,所以另一套数据库同样的问题使用另一个 SQL 查看,如下:

---查看被占用的进程 SID SQL> col MODULE for a30 SQL> col BLOCK for a45SQL> select s.sid, username, program, module, action, logon_time, l.* 2 from v$session s, v$enqueue_lock l 3 where l.sid = s.sidand l.type = 'CF'; 4 SID USERNAME PROGRAM MODULE ACTION LOGON_TIME ADDR KADDR SID TY ID1 ID2 LMODE REQUEST CTIME BLOCK---------- ------------------------------ ------------------------------------------------ ------------------------------ ------------------------------ ------------ ---------------- ---------------- ---------- -- ---------- ---------- ---------- ---------- ---------- ---------- 2281 oracle@ZB12GHCW1 (CKPT) 26-MAR-20 0700010266E4B6F0 0700010266E4B748 2281 CF 0 0 2 0 10011939 ########## 2283 SYS rman@ZB12GHCW1 (TNS V1-V3) backup incr datafile 0000040 STARTED16 14-JUL-20 0700010266E4EF50 0700010266E4EFA8 2283 CF 0 2 4 0 493750 ##########
---此处查看到有 SID 为 2281 的 CKPT 检查点进程和 SID 为 2283 的 RMAN 进程。
---下面使用拼接语句直接拼接出来,直接 kill 掉。      SQL> select 'kill -9 '||spid from v$process where addr = (select paddr from v$session where sid=&sid);Enter value for sid: 2283old 1: select 'kill -9 '||spid from v$process where addr = (select paddr from v$session where sid=&sid)new 1: select 'kill -9 '||spid from v$process where addr = (select paddr from v$session where sid=2283)
'KILL-9'||SPID--------------------------------kill -9 15007754SQL> host kill -9 15007754
---接下来查看已经没有 2283 的进程了。SQL> set line 345 SQL> set pages 345 SQL> select s.sid,username,program,module,action,logon_time,l.* 2 from v$session s,v$enqueue_lock l 3 where l.sid=s.sidand l.type='CF'; 4
SID USERNAME PROGRAM MODULE ACTION LOGON_TIME ADDR KADDR SID TY ID1 ID2 LMODE REQUEST CTIME BLOCK---------- --------------- ------------------------------ -------------------- ------------ ------------ ---------------- ---------------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------      2281                 oracle@ZB12GHCW1 (CKPT)                                          26-MAR-20    0700010266E4B6F0 0700010266E4B748       2281 CF          0          0          2          0  26-MAR-20          2


处理完后,备份便可以正常进行了,看来这个问题下次得注意一些了,故特此记录下来,以备不时之需,也希望看到的朋友们能够注意到这点,加油,让我们一起努力做更好的自己,今天就到这里了,祝小伙伴们新的一周快乐每一天!



Oracle 12c 及以上版本补丁更新说明及下载方法(收藏版)

Oracle 11.2.0.4 RAC 最新补丁下载(11.2.0.4.200714)

Oracle 19c 之多租户 PDB 连接与访问(三)

Oracle 12C 最新补丁下载与安装操作指北

DBA 常用的软件工具有哪些(分享篇)?

关于 Oracle ACFS 相关知识的简单学习

Oracle 相关认证证书查询及真伪辨别

Oracle 11g ADG 快照备库切换步骤

openGaussDB 初体验(下)


点亮在看,你最好看!

继续滑动看下一个

案例:RMAN 备份控制文件报错 ORA-00230

JiekeXu JiekeXu DBA之路
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存