小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
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三思而后行 ❤️