生成AWR报告时出现ORA-06502

2015-07-23 18:08:06 · 作者: · 浏览: 3

最近在生成一套系统的AWR报告时出现了如下报错:ORA-06502: PL/SQL: numeric or value error: character string buffer too small,然后生成AWR报告的过程就终止了,查看生成的AWR报告,发现报告时不完整的,AWR报告到Complete List of SQL Text部分就结束了,且最后是以一个非常长的sql语句结束的,且这个sql语句还没有显示完整。查看MOS后发现,这是Bug 7833620导致的(参考MOS文章Doc ID 1303342.1),但就为了生成AWR报告去打patch,有点兴师动众了,于是决定想办法绕过这个BUG。


WRH$_SQLTEXT基表的结构如下:


SQL> desc WRH$_SQLTEXT


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


update WRH$_SQLTEXT set sql_text = dbms_lob.substr(sql_text,3000);
commit;


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