生成AWR报告时出现ORA-06502

       最近在生成一套系统的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。
      根据上面的分析已经基本清楚,导致AWR报告生成失败的原因就是系统中存在一个特别长的sql。明确了这点,接下来就好办了,生成AWR报告的的sql文本是来自WRH$_SQLTEXT,那只要将这个基表中的sql文本进行截断,应该就能正确的生成AWR报告了。这里说明下,WRH$_SQLTEXT基表保存的是快照期间的sql文本信息,对该表的操作不会影响系统的sql语句运行,但是对基表的操作始终是非常危险的,建议不要直接在生成系统上进行操作,可以将生产的AWR数据导入到测试环境上生成AWR报告。AWR导入/导出具体操作,参看http://blog.itpub.net/29821678/viewspace-1377260/。
      WRH$_SQLTEXT基表的结构如下:

  1. SQL> desc WRH$_SQLTEXT
  2.  Name                     Null?             Type
  3.  ----------------------------------------- -------- ----------------------------
  4.  SNAP_ID                                    NUMBER
  5.  DBID                     NOT NULL          NUMBER
  6.  SQL_ID                   NOT NULL          VARCHAR2(13)
  7.  SQL_TEXT                                   CLOB
  8.  COMMAND_TYPE                               NUMBER
  9.  REF_COUNT                                  NUMBER
       保存sql文本的字段为CLOB字段,所以可以采用下面的方法对 WRH$_SQLTEXT.SQL_TEXT字段进行截断:
    
  1. update WRH$_SQLTEXT set sql_text = dbms_lob.substr(sql_text,3000);
  2. commit;
   执行完上述操作后,成功生成了AWR报告,但是,过长的sql是被截断的,如果要获得完整的sql,可以根据AWR报告中的sqlid到系统中进行查找。



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29821678/viewspace-1406591/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29821678/viewspace-1406591/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值