墨墨导读:本文来自墨天轮用户“JiekeXu”投稿,墨天轮主页:https://www.modb.pro/u/4347。这里记录错误 ORA-00230:执行备份时,有几个数据库在备份控制文件时报错,无法备份控制文件,本文详述问题处理过程。

数据技术嘉年华,十周年盛大开启,点我立即报名!大会以“自研·智能·新基建——云和数据促创新 生态融合新十年” 为主题,相邀数据英雄,总结过往十年历程与成绩,展望未来十年趋势与目标!近60场演讲,大咖云集,李飞飞、苏光牛、林晓斌、黄东旭...,快来pick你喜欢的嘉宾主题吧!

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

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

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

首先便去查看控制文件:

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

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

JiekeXuDB1:/home/oracle$oerr ora 230
00230, 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 345
col 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 l
WHERE l.SID = s.SID
AND l.TYPE = 'CF'
AND l.ID1 = 0
AND 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 l4  WHERE l.SID = s.SID5  AND l.TYPE = 'CF'6  AND l.ID1 = 0AND 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 27394192oracle 27394192        1   0   Jul 14      -  0:05 oraclecmdb1 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
JiekeXuDB1:/home/oracle$kill -9 27394192
JiekeXuDB1:/home/oracle$
JiekeXuDB1:/home/oracle$ps -ef | grep 27394192oracle 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 l
WHERE l.SID = s.SID
AND l.TYPE = 'CF'AND l.ID1 = 0AND l.ID2 = 2;4    5    6    7
no rows selected

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

---查看被占用的进程 SID
SQL> col MODULE for a30
SQL> col BLOCK for a45
SQL>  select s.sid, username, program, module, action, logon_time, l.*2  from v$session s, v$enqueue_lock l3  where l.sid = s.sid
and 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: 2283
old   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 15007754
SQL> 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 l3   where l.sid=s.sid
and l.type='CF';4SID 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

处理完后,备份便可以正常进行了,记录至此,以备不时之需,希望可以帮助读者朋友。

墨天轮原文链接:https://www.modb.pro/db/29932(复制到浏览器中打开或者点击“阅读原文”)

推荐阅读:144页!分享珍藏已久的数据库技术年刊

数据技术嘉年华,汇聚业内多种数据库最佳实践和顶级技术专家,只为总结 2020 ,与您尽享技术前沿,领先一步卓立变革潮头!

2020 数据技术嘉年华,现在加入,尽享超低票价优惠:

数据和云

ID:OraNews

如有收获,请划至底部,点击“在看”,谢谢!

点击下图查看更多 ↓

云和恩墨大讲堂 | 一个分享交流的地方

长按,识别二维码,加入万人交流社群

请备注:云和恩墨大讲堂

  点个“在看”

你的喜欢会被看到❤

案例解读:RMAN 备份控制文件报错 ORA-00230相关推荐

  1. 玩转oracle 11g(36):rman备份-控制文件丢失恢复

    ORA-00205: error in identifying control file, check alert log for more info 检查oracle的报警日志包含类似报错: ORA ...

  2. 使用RMAN备份控制文件(control file)和系统参数文件(spfile)

    1.Use the CONFIGURE CONTROLFILE AUTOBACKUP command to eanable 设置RMAN配置文件,将CONFIGE CONTROLFILE AUTOBA ...

  3. RMAN备份数据库_使用RMAN备份数据库文件

    1.使用RMAN备份整个数据库 可以在数据库挂载或打开时执行整个数据库备份. 使用BACKUP DATABASE命令从RMAN提示符中执行整个数据库的备份. 你可能想从整个数据库备份中排除特定的表空间 ...

  4. 用备份控制文件做不完全恢复下的完全恢复(数据文件备份旧--新建表空间--控制文件备份次新--日志归档文件新)...

    为什么会使用备份的控制文件? 实际工作中主要有两种情况: 第一种:当前控制文件全部损坏,而数据文件备份,控制文件备份及当前日志处于不同SCN版本,它们之间又增加过表空间(数据文件). 第二种:当前控制 ...

  5. ieda ts文件报错_Intellij IDEA就这样配置,快到飞起!

    目录 1.设置maven 2.IDEA 设置代码行宽度 3.IDEA 提示不区分大小写 4.IntelliJ强制更新Maven Dependencies 5.idea的环境配置默认保存位置 6.隐藏不 ...

  6. Maven项目中pox.xml文件报错以及项目编译错误

    我用Eclipse开发Maven项目,本来好好的,但是后来莫名其妙的其中pom.xml文件报错,后来执行install命令时又编译不通过报错.我痛苦地摸索了一整天,最后才把问题解决了.虽然问题解决了, ...

  7. eclipse 新建 jsp文件 or servlet文件报错解决方案

    文章目录 前言 新建 JSP 报错 项目场景: 解决方案: 第一步:打开Markers 第二步:选择Build Path 第三步:添加库 第四步:应用 新建 Servlet文件报错 项目场景: 解决方 ...

  8. 使用selenium模块控制谷歌浏览器报错

    使用selenium模块控制谷歌浏览器报错: browser=selenium.webdriver.Chrome() Traceback (most recent call last):File &q ...

  9. linux下编译make文件报错“/bin/bash^M: 坏的解释器,使用grep快速定位代码位置

    一.linux下编译make文件报错"/bin/bash^M: 坏的解释器 参考文章:http://blog.csdn.net/liuqiyao_01/article/details/415 ...

最新文章

  1. 在Ubuntu中安装HBase
  2. python 指针_指针篇 | 指针的灵活让我想起了Python
  3. android studio module不识别 红色j,androidstudio 不显示 Module-- 新年第一波
  4. ubuntu下JDK的自动安装和手动安装
  5. [UOJ455][UER #8]雪灾与外卖——堆+模拟费用流
  6. 移动端页面兼容性问题解决方案整理(一)
  7. linux7.3的域名配置表,Centos7.3 安装部署Nginx并配置https的方法步骤
  8. 拒绝卡顿——在WPF中使用多线程更新UI
  9. javascript及css实现居中效果
  10. 使用Eclipse中提供的Refactor(重构)工具
  11. 创建CocoaPods的Framework Swift组件化之路(下)
  12. 硬件设计40之什么是I2S、PCM、MP3?
  13. 计算机视觉在小机器人中应用,基于计算机视觉的车身焊接机器人路径校正装置的制造方法...
  14. compute shader
  15. 剑指 Offer II 075. 数组相对排序(中等 排序 数组)
  16. 某宝用户行为数据分析
  17. Framer多车型切换实现的网络功能
  18. 【深度学习神经网络】--BatchNorm详解
  19. 如何在 Git 中保存用户名和密码?
  20. 常见浏览器及其内核(国际)

热门文章

  1. Web前端——CSS层叠样式表
  2. Unity学习笔记:unity介绍(一)
  3. iap 审核 文档_为什么必须审核文档
  4. (67)Vue-cli 项目搭建
  5. 实战 | WebMagic 爬取某保险经纪人网站经纪人列表之网站列表爬取
  6. HTML5 Canvas中 绘制圆弧
  7. 贪心算法,递归算法,动态规划算法比较与总结
  8. 查询没有走索引_关于MySQL种的in函数到底走不走索引、我和同事差点大打出手!...
  9. python3.5.2安装pygame_#Python3.6.2(32位) pip安装 和 pygame 环境配置
  10. 04号团队-团队任务3:每日立会(2018-12-04)