Oracle数据库出现WARNING: too many parse errors告警的分析思路

这篇具有很好参考价值的文章主要介绍了Oracle数据库出现WARNING: too many parse errors告警的分析思路。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Oracle数据库的告警日志中出WARNING: too many parse errors这些告警信息的话,如果遇到这个问题,我们应该如何分析呢?

下面简单聊一下如何分析这个错误。该告警信息其实是12.2版本中的一个特性增强。在以前的Oracle版本中,数据库出现了解析错误时,数据库的alert日志中不会有任何相关的提示,我们一般只能通过AWR报告才能了解数据库出现了解析错误,例如,从"failed parse elapsed time" 和"parse count(failures)"指标中查看解析出错信息,如下截图所示:

Oracle数据库出现WARNING: too many parse errors告警的分析思路

Oracle数据库出现WARNING: too many parse errors告警的分析思路 ..................... Oracle数据库出现WARNING: too many parse errors告警的分析思路

如果数据库中解析错误的次数非常频繁时,可能会造成大量的Library Cache Lock等待,整个数据库可能会处于hang死的状态。要找出解析错误的root cause,则需要在数据库中设置10035 event,如果再次出现解析错误时,会向数据库的alert日志中写入解析错误的详细信息。

ALTER SYSTEM SET EVENTS '10035 trace name context forever, level 1';
ALTER SESSION SET EVENTS '10035 trace name context forever, level 1';
EVENT="10035 trace name context forever, level 1"

Levels:
level 1+ Print out failed parses of SQL statements to

Note:
The event can be turned off as follows:

ALTER SYSTEM SET EVENTS '10035 trace name context off';
ALTER SESSION SET EVENTS '10035 trace name context off';

而从12.2版本开始,即使未设置10035 event,当数据库出现解析错误的情况时,仍然会向数据库的alert日志中写入一条解析错误的告警信息。

如下所示,你可能会看到类似这样的报错信息:

2024-04-18T00:26:00.288821+08:00
*******(3):WARNING: too many parse errors, count=592 SQL hash=0xd4b65b68
*******(3):PARSE ERROR: ospid=969851, error=903 for statement: 
*******(3):Additional information: hd=0x1c6a4c5b80 phd=0x1f598d0500 flg=0x28 cisid=290 sid=290 ciuid=290 uid=290 sqlid=9mj0cyvabcqv8
*******(3):...Current username=***
*******(3):...Application: IgniteMonitor Action: 

这里比较关键的信息是第二行错误信息的错误代码:"PARSE ERROR: ospid=969851, error=903 for statement",这个例子中,它提示SQL解析出错是因为遇到了ORA-903这个错误

$ oerr ora 903
00903, 00000, "invalid table name"
// *Cause:     A table or cluster name was invalid or does not exist.
//             This message was also issued if an invalid cluster name or no
//             cluster name was specified in an ALTER CLUSTER or DROP CLUSTER
//             statement.
// *Action:    Check spelling. A valid table name or cluster name
//             must begin with a letter and may contain only alphanumeric
//             characters and the special characters $, _, and #. The name
//             must be less than or equal to 30 characters and cannot be a
//             reserved word.

我们可以尝试通过SQL_ID找到对应的SQL,但是有时候,可能通过SQL_ID可能已无法找到SQL语句,只能等到下一次出现时及时定位。

SELECT c.username,
      ,a.program
      ,b.sql_text
      ,b.command_type
      ,a.sample_time
FROM dba_hist_active_sess_history a
JOIN dba_hist_sqltext b
ON a.sql_id = b.sql_id
JOIN dba_users c
ON a.user_id = c.user_id
WHERE a.sample_time BETWEEN SYSDATE - 1 AND SYSDATE
and a.sql_id='9mj0cyvabcqv8'
ORDER BY a.sample_time DESC;

这里如果可以找出具体SQL语句,就可以找出SQL解析出错的原因,跟开发人员一起修复这个问题,像官方文档Doc ID 2649163.1[1]中提及的案例中

2020-01-07T11:35:33.918516+10:30
WARNING: too many parse errors, count=1091700 SQL hash=0xbbcb647d
PARSE ERROR: ospid=33376, error=923 for statement:
2020-01-07T11:35:33.918632+10:30
select 1
Additional information: hd=0xb336ab08 phd=0xb336af30 flg=0x28 cisid=120 sid=120 ciuid=120 uid=120
2020-01-07T11:39:04.673714+10:30
WARNING: too many parse errors, count=1091800 SQL hash=0xbbcb647d
PARSE ERROR: ospid=38578, error=923 for statement:sdkjfdsfkjsadfkjsadfkj
2020-01-07T11:39:04.673839+10:30
select 1

出现这个错误,是因为应用程序中输入的SQL不完整,没有from关键字,从错误代码error=923也能看出出错的可能性。如下所示:

$ oerr ora 923
00923, 00000, "FROM keyword not found where expected"
// *Cause:     In a SELECT or REVOKE statement, the keyword FROM was
//             either missing, misplaced, or misspelled. The keyword FROM
//             must follow the last selected item in a SELECT statement or
//             the privileges in a REVOKE statement.
// *Action:    Correct the syntax. Insert the keyword FROM where
//             appropriate. The SELECT list itself also may be in error. If
//             quotation marks were used in an alias, check that double
//             quotation marks enclose the alias. Also, check to see if a
//             reserved word was used as an alias.

还有一些bug会引起WARNING: too many parse errors,此时就必须在Oracle metalink上进行搜索,仔细匹配了。例如Doc ID 2976229.1 [2]。它的现象是Oracle DG的备库中一直出现"WARNING: too many parse errors",而且数据库版本为Oracle Database - Enterprise Edition - Version 19.3.0.0.0 to 19.21.0.0.0

2023-09-04T13:19:41.797929+00:00

WARNING: too many parse errors, count=13900 SQL hash=0x0cd5bf3b

PARSE ERROR: ospid=15822, error=1219 for statement:

2023-09-04T13:19:41.798049+00:00

select count(*) from cdb_service$

Additional information: hd=0x6cbc40d0 phd=0x6cbc4828 flg=0x20 cisid=0 sid=0

ciuid=2147483620 uid=2147483620 sqlid=<SQL ID>

...Current username=SYSRAC

...Application: oraagent.bin@<HOSTNAME> (TNS V1-V3) Action:

WARNING: too many parse errors, count=13900 SQL hash=0xeb8d02bf

PARSE ERROR: ospid=15822, error=1219 for statement

引起这个的原因是Bug,官方描述如下

The issue is analyzed and discussed in internal / unpublished Bug 34046765 - ORAAGENT DAGENT::SETCONNECTIONPOOLMAX GENERATES TOO MANY PARSE ERRORS ON STANDBY DATABASE

另外,最重要的就是监控数据库的alert日志,一旦出现这类告警就必须发出告警邮件或告警提示。以前我们监控数据库的alert日志,一般是过滤ORA-这类关键字,而这样过滤的话,是无法获取WARNING这类的告警信息的。所以监控脚本过滤关键字时,必须增加WARNING这个关键字信息。

参考资料

[1]

1: https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=510335864406137&id=2649163.1&_afrWindowMode=0&_adf.ctrl-state=im4fw4kqq_78

[2]

2: https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=510414734632502&id=2976229.1&_afrWindowMode=0&_adf.ctrl-state=im4fw4kqq_127文章来源地址https://www.toymoban.com/news/detail-856590.html

到了这里,关于Oracle数据库出现WARNING: too many parse errors告警的分析思路的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据库数据恢复-Oracle数据库文件出现坏块的数据恢复案例

    Oracle数据库故障初检分析: 打开Oracle数据库时报错,报错信息:“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。用户急需恢复zxfg用户下的数据。 出现上述报错的可能原因包括:控制文件损坏、数据文件损坏,数据文件与控制文件的SCN不一致等。 北亚企安数据

    2024年02月14日
    浏览(49)
  • MySQL出现too many connections错误

    1、现象 navicat连接MySQL时报 too many connections 错误 2、原因 my.ini 中设定的并发连接数太少或者系统繁忙导致连接数被占满。 连接数超过了 MySQL 设置的值,与 max_connections 和 wait_timeout 都有关。 wait_timeout 的值越大,连接的空闲等待就越长,这样就会造成当前连接数越大。 3、解

    2024年02月11日
    浏览(43)
  • 出现OSError: [Errno 24] Too many open files错误解决方法。

    出现了: 这是因为 1,打开文件太多 2,其实不然,是线程限制,通常我们采用更改限制即可。 输入下面的命令看一下:  输出:1024 果然如我所预想,得到的结果是1024,就是说系统限制为同时打开1024个文件。 修改方法: 1、将自己的线程数改小,使之符合这个限制(只是方

    2024年02月16日
    浏览(43)
  • 使用 python multiprocessing.Queue 出现 too many open files 错误

    问题描述 使用 python 子进程 multiprocessing.Process 执行任务,并使用 multiprocessing.Queue 回传任务执行结果。程序执行时间长以后,出现 Too many open files 错误。使用 lsof -p 进程号 能看到有很多未关闭的 pipe。后经排查发现大概率是 multiprocessing.Queue的问题,为了验证想法,写了一个测

    2024年02月09日
    浏览(37)
  • conda出现http429报错:CondaHTTPError: HTTP 429 TOO MANY REQUESTS for url <xxx>

    我的报错信息如下: 在报错的第一行我们可以看到是url:https://mirrors. ustc .edu.cn/anaconda/pkgs/main/linux-64/current_repodata.json有问题,只要 把和ustc相关的源删掉 就好了,步骤如下: 查看该环境下的所有channel (channel就是源,用来找你要安装的包的) 执行命令后,我的电脑上显示:

    2024年04月27日
    浏览(39)
  • PLS-00172 string literal too long ORA-06550 字段太长插入不进去数据库

    String literal too long 数据库报这个错,一般是由于插入的字段过长导致。我们一般可以用以下的方法解决: 将长的内容分段,即可解决,数据长将数据插入不进去的问题。

    2024年02月07日
    浏览(46)
  • 数据库数据恢复-Oracle数据库数据恢复案例

    数据库数据恢复环境: Oracle数据库ASM磁盘组有4块成员盘。 数据库故障分析: Oracle数据库ASM磁盘组掉线 ,ASM实例无法挂载,用户联系我们要求恢复oracle数据库。 数据库数据恢复工程师拿到磁盘后,先将所有磁盘以只读方式进行扇区级别的镜像备份,后续的数据分析和数据恢

    2024年02月13日
    浏览(67)
  • Oracle数据库

    ①层次型数据库 ②网状型数据库 ③关系型数据库(主要介绍) E-R图:属性(椭圆形),实体(矩形),联系(菱形-一对一、一对多、多对多) 注:有的联系也有属性 关系型数据库的设计范式: 第一范式(1NF):属性不可再分,字段保证原子性 第二范式(2NF):在满足1

    2024年02月08日
    浏览(59)
  • Oracle 数据库恢复删除的数据

    需求描述: 同事让删除脏数据,结果删错了,需要恢复数据 思路: 利用闪回恢复数据只能恢复15分钟之内的,后面undo空间会被重写,就恢复不了,所以删除数据后,要谨慎再三确认,若发现不对,则利用闪回恢复 先查询删除时的时间节点的快照 查到时间戳之后 闪回恢复数

    2024年01月24日
    浏览(71)
  • 【数据库】日常使用PL/SQL 登录ORACLE 数据库查询数据

    一、PL/SQL 登录方式 username: ##访问数据库的账号 password: ##访问数据库的密码 Databse: ##数据库IP地址/实例名 数据库集群心跳地址/实例名 Connect as : ##Normal,如果使用sysdba账户登录选择SYSDBA 二、PL/SQL使用SQL语句查询 点击上方导航栏,New,选择SQL Window,即可再次输入要查询的

    2024年02月19日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包