SMON遇到ORA-21779: duration not active错误
问题背景 客户一套10.2.0.4的RAC数据库,因为要进行11g升级,所以最近部署了SPA采集任务,结果该任务部署没多久,SMON就爆发了ORA-21779错误。导致数据库运行非常缓慢。作为运维厂商,我们立马对数据库出错原因进行了分析。我们首先来看一下具体的SMON报的错
问题背景
客户一套10.2.0.4的RAC数据库,因为要进行11g升级,所以最近部署了SPA采集任务,结果该任务部署没多久,SMON就爆发了ORA-21779错误。导致数据库运行非常缓慢。作为运维厂商,我们立马对数据库出错原因进行了分析。我们首先来看一下具体的SMON报的错误信息。
*** 2014-04-26 13:47:28.987 SMON: following errors trapped and ignored: ORA-21779: duration not active ORA-06512: at line 1 Sat Apr 26 13:48:06 2014 >>> WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK! pid=36 System State dumped to trace file /oracle/app/oracle/admin/wcrma/bdump/wcrma2_smon_3610.trc wcrma2_smon_3610.trc name=SPA.SYSTP9+MPUyJ8/wLgRAAUT0SBEA== Drop transient type: SYSTP9+MPUyJ8/wLgRAAUT0SBEA==m call stack:ksdxfstk()+36 0.0007 hash=f8aafde8df1d0384b3c6849b889a14c9 timestamp=04-26-2014 12:48:31 LIBRARY OBJECT HANDLE: handle=1431525e88 mtx=1431525fb8(0) cdp=0
我们仔细的来看,SMON在清理一个transient type的时候,报了这个错误,也就是清理过程中出现了问题。而transient type是一种临时的type。它是在动态执行的时候产生在内存里面的。例如应用程序在语句里面定义了自定义的Type,在运行过程中,运行到这一步它就会转化成transient type。根据文档SMON: Following Errors Trapped And Ignored ORA-21779 (文档 ID 988663.1)的描述。这个问题会引起alert日志大量的增长,产生大量的trace,但是不会影响到数据库正常使用,但是在实际情况下,我们发现并非如此,因为我们的SMON进程是非常关键的进程,它在删除某些东西的时候需要申请到锁,而我们从这一次的堆栈中可以看到下列函数。我们主要来看下kqrigt函数。该函数在谷歌上搜索可以查到下列内容,可以看到这个函数里面需要申请row cache instance lock锁,如果申请不到,就会报WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK。而这里它需要申请的是dc_rollback_segments。
* Function kqrigt May call kslfre (...) May call kqrprl (...) May call ksesec0 (0x0FB5) May call ksbasend (dword ptr ds:kqrglk_+4, offset kqrglk_, 0x10, ...) May call kslgetl (?, 1, 0, offset kqrpl10_) May call kslwait (?, ds:kqrelk_, 0, ...) May call kslgetl (?, 1, ?, offset kqrpl10_) May call ksu_dispatch_tac () May call kskchk () May call ksuitr () May call ksesec0 (...) May call kgeasnmierr (ds:ksmgpp_, ds:ksefac_, "kqrigt-1", 0) May call kqrchk () May call ksurea () May call ksdwrf ("Failed to get row cache instance lock (post=%d,res=%lx)\n") May call kqrdrs (...) May call ksesec0 (0x259) May call ksesec0 (0x2BF) May call ksbcic (0x1E, ?, ?, 1) May call kslgetl (?, 1, ?, offset kqrpl43_) May call kgeasnmierr (ds:ksmgpp_, ds:ksefac_, "kqrgplt", 2) May call kgeasnmierr (ds:ksmgpp_, ds:ksefac_, "kqrigt-2", 0) May call ksdwra (">>> WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK! pid=%d") May call ksdwrf (">>> WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK! <h4> <strong>解决办法</strong> </h4> <p><font face="幼圆" size="3">那么这个问题怎么解决了?我们可以参考文档Receiving ORA-21780 Continuously in the Alert Log and SMON Trace Reports "Drop transient type". (文档 ID 1081950.1)的解决办法。首先针对这个transient type,smon大概会12个小时去清理一次。我们可以去手动进行清理,或者设置内部事件22834去阻止smon清理这类的type。</font></p> <p><font face="幼圆" size="3">1.直接删除</font></p> <pre class="brush:php;toolbar:false">Step 1 Make sure you have a good full backup. Step 2 spool obj.lis alter session set nls_date_format='DD-MON-YYYY HH24:MI:SS'; set pagesize 1000 select o.* from obj$ o, type$ t where o.oid$ = t.tvoid and bitand(t.properties,8388608) = 8388608 and (sysdate-o.ctime) > 0.0007; spool off Step 3 Find the object owner: Step 4 Drop the objects. DROP TYPE "SYSTPf/r2wN4keX7gQKjA3AFMSw==" FORCE;
2.设置内部事件22834去阻止SMON清理这类型的Type,但是可能会消耗更多的内存。
SQL> alter system set event='22834 trace name context forever, level 1' scope=spfile; System altered. SQL> alter system set event='22834 trace name context forever, level off' scope=spfile; System altered.
当然这个事件也可以使用oradebug来进行设置。这样就不需要进行重启的操作。
参考文档:
Receiving ORA-21780 Continuously in the Alert Log and SMON Trace Reports "Drop transient type". (文档 ID 1081950.1)
SMON: Following Errors Trapped And Ignored ORA-21779 (文档 ID 988663.1)
原文地址:SMON遇到ORA-21779: duration not active错误, 感谢原作者分享。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

全表扫描在MySQL中可能比使用索引更快,具体情况包括:1)数据量较小时;2)查询返回大量数据时;3)索引列不具备高选择性时;4)复杂查询时。通过分析查询计划、优化索引、避免过度索引和定期维护表,可以在实际应用中做出最优选择。

是的,可以在 Windows 7 上安装 MySQL,虽然微软已停止支持 Windows 7,但 MySQL 仍兼容它。不过,安装过程中需要注意以下几点:下载适用于 Windows 的 MySQL 安装程序。选择合适的 MySQL 版本(社区版或企业版)。安装过程中选择适当的安装目录和字符集。设置 root 用户密码,并妥善保管。连接数据库进行测试。注意 Windows 7 上的兼容性问题和安全性问题,建议升级到受支持的操作系统。

MySQL是一个开源的关系型数据库管理系统。1)创建数据库和表:使用CREATEDATABASE和CREATETABLE命令。2)基本操作:INSERT、UPDATE、DELETE和SELECT。3)高级操作:JOIN、子查询和事务处理。4)调试技巧:检查语法、数据类型和权限。5)优化建议:使用索引、避免SELECT*和使用事务。

MySQL 和 MariaDB 可以共存,但需要谨慎配置。关键在于为每个数据库分配不同的端口号和数据目录,并调整内存分配和缓存大小等参数。连接池、应用程序配置和版本差异也需要考虑,需要仔细测试和规划以避免陷阱。在资源有限的情况下,同时运行两个数据库可能会导致性能问题。

LaravelEloquent模型检索:轻松获取数据库数据EloquentORM提供了简洁易懂的方式来操作数据库。本文将详细介绍各种Eloquent模型检索技巧,助您高效地从数据库中获取数据。1.获取所有记录使用all()方法可以获取数据库表中的所有记录:useApp\Models\Post;$posts=Post::all();这将返回一个集合(Collection)。您可以使用foreach循环或其他集合方法访问数据:foreach($postsas$post){echo$post->

数据集成简化:AmazonRDSMySQL与Redshift的零ETL集成高效的数据集成是数据驱动型组织的核心。传统的ETL(提取、转换、加载)流程复杂且耗时,尤其是在将数据库(例如AmazonRDSMySQL)与数据仓库(例如Redshift)集成时。然而,AWS提供的零ETL集成方案彻底改变了这一现状,为从RDSMySQL到Redshift的数据迁移提供了简化、近乎实时的解决方案。本文将深入探讨RDSMySQL零ETL与Redshift集成,阐述其工作原理以及为数据工程师和开发者带来的优势。

MySQL 数据库中,用户和数据库的关系通过权限和表定义。用户拥有用户名和密码,用于访问数据库。权限通过 GRANT 命令授予,而表由 CREATE TABLE 命令创建。要建立用户和数据库之间的关系,需创建数据库、创建用户,然后授予权限。

MySQL适合初学者使用,因为它安装简单、功能强大且易于管理数据。1.安装和配置简单,适用于多种操作系统。2.支持基本操作如创建数据库和表、插入、查询、更新和删除数据。3.提供高级功能如JOIN操作和子查询。4.可以通过索引、查询优化和分表分区来提升性能。5.支持备份、恢复和安全措施,确保数据的安全和一致性。
