Oracle 生成 AWR 报告报错:ORA-06502,怎么破?

487 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

Oracle 数据库 awr 报告是 DBA 用于分析数据库性能情况的重要工具!

最近遇到一个问题,生成AWR报告时报错:

ERROR:
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at "SYS.DBMS_WORKLOAD_REPOSITORY", line 919
ORA-06512: at line 1

然后生成AWR报告的过程就终止了,AWR报告到 Complete List of SQL Text 部分就结束了,且最后是以一个非常长的sql语句结束的,且这个sql语句还没有显示完整。

查看MOS后发现,这是 Bug 7833620 导致的(参考MOS文章Doc ID 1303342.1),但就为了生成AWR报告去打patch,有点兴师动众了,于是决定想办法绕过这个BUG。

那么,如何解决这个问题呢?

保存sql文本的字段为CLOB字段,所以可以采用下面的方法对 WRH$_SQLTEXT.SQL_TEXT 字段进行截断:

解决方案:

update WRH$_SQLTEXT set sql_text = SUBSTR(sql_text, 1, 1000);
commit;

执行完上述操作后,成功生成了AWR报告,但是,过长的sql是被截断的,如果要获得完整的sql,可以根据AWR报告中的sqlid到系统中进行查找。

重新执行sqlplus / as sysdba @?/rdmbs/admin/awrrpt.sql 脚本顺利生成 AWR 报告!


本次分享到此结束啦~

如果觉得文章对你有帮助,点赞、收藏、关注、评论,一键四连支持,你的支持就是我创作最大的动力。

❤️ 技术交流可以 关注公众号:Lucifer三思而后行 ❤️