网站首页 > 论文范文> 文章内容

手工生成HTML格式AWR遇到Bug 13527323解决实例

※发布时间:2016-12-12 15:41:18   ※发布作者:habao   ※出自何处: 

  Oracle中的AWR报告是目前官方提供的最好的性能分析诊断工具。借助对于一个连续snapshot的分析,我们可以快速的获取到整体性能分析指标,综合定位问题发生点。

  任何Oracle版本中,我们都可能会遇到各种类型的Bug。发现Bug之后,和官方公布内容进行匹配确认,找到解决或者规避方法,是数据库使用者应该具备的一种能力。

  1、环境介绍和故障发生

  笔者在11.2.0.3环境下,生成巡检AWR报告,想查看业务高峰期作业负载情况。

  SQLselect*fromv$version;

  BANNER

  ------------------------------------

  OracleDatabase11gEnterpriseEditionRelease11.2.0.3.0-64bitProduction

  PL/SQLRelease11.2.0.3.0-Production

  CORE11.2.0.3.0Production

  TNSforIBM/AIXRISCSystem/6000:Version11.2.0.3.0-Production

  NLSRTLVersion11.2.0.3.0Production

  使用sqlplus命令行来进行报告生成过程,调用awrrpt.sql。

  D:\sqlplus/nolog

  SQL*Plus:Release11.2.0.1.0Productionon星期四2月2709:07:022014

  SQL@?/rdbms/admin/awrrpt.sql

  CurrentInstance

  ~~~~~~~~~~~~~~~~

  DBIdDBNameInstNumInstance

  -------------------------------------------

  1083126127COGDB1cogdb

  SpecifytheReportType

  ~~~~~~~~~~~~~~~~~~~~~~~

  WouldyoulikeanHTMLreport,oraplaintextreport?

  EnterhtmlforanHTMLreport,ortextforplaintext

  AWR目前支持两个格式,html和text格式。text格式是从AWR的前身statspack中延续而来,格式简单、生成负载小,但是可读性不强。html格式是我们通常的选择。

  但是,本次报告出错。

  8/a/td

  tdclass=awrnc#160;

  /td

  stance_number,d.../td/tr

  /tablep/

  ERROR:

  ORA-06502:PL/SQL:数字或值错误:字符串缓冲区太小

  ORA-06512:在SYS.DBMS_WORKLOAD_REPOSITORY,line919

  ORA-06512:在line1

  Reportwrittentoawrrpt_1_9583_9584.html

  报告生成失败,在目录上虽然有报告文件、也可以打开,但是生成文件不完整。

  2、问题检查和确定

  一般而言,客户端脚本和服务器端程序不匹配,通常是造成脚本执行的一个很重要的原因。比如:我们使用10g客户端的旧脚本,调用11g服务器的新程序,是可能引起故障的。比较典型的就是还原数据字典的过程。

  AWR生成脚本awrrpt.sql虽然是在客户端,但是只是负责参数数据收集和传入。生成AWR报告的关键程序是dbms_workload_repository包,awrrpt.sql并不直接和AWR数据字典打交道。所以,由于版本差异引起的问题,在这个案例上可能性是很低的。

  为了预防万一,我们在服务器端进行报告生成。

  [:~]$cd/tmp

  [:/tmp]$sqlplus/nolog

  SQL*Plus:Release11.2.0.3.0ProductiononThuFeb2709:13:232014

  SQLconn/assysdba

  Connected.

  SQL@?/rdbms/admin/awrrpt.sql

  CurrentInstance

  ~~~~~~~~~~~~~~~~

  DBIdDBNameInstNumInstance

  -------------------------------------------

  1083126127COGDB1cogdb

  SpecifytheReportType

  ~~~~~~~~~~~~~~~~~~~~~~~

  WouldyoulikeanHTMLreport,oraplaintextreport?

  EnterhtmlforanHTMLreport,ortextforplaintext

  Defaultstohtml

  Entervalueforreport_type:

  要求生成html格式报告,依然报错。

  tdclass=awrnc#160;

  /td

  tdclass=awrncSELECTdbin.instance_number,d.../td/tr

  /tablep/

  ERROR:

  ORA-06502:PL/SQL:numericorvalueerror:characterstringbuffertoosmall

  ORA-06512:atSYS.DBMS_WORKLOAD_REPOSITORY,line919

  ORA-06512:atline1

  Reportwrittentoawrrpt_1_9583_9584.html

  这种场景的确是不正常的,而且由于代码加密的原因,我们也不能真的跟踪到line919行。这个时候可能就需要求助于官方经验集合MOS。

  经过查询,在MOS中有一篇对于Bug13527323的介绍,文章编号为:ORA-6502generatingHTMLAWRreportusingawrrpt.sqlinMultibytecharactersetdatabase(文档ID13527323.8)。

  文章中,Oracle说在一些时候,使用awrrpt.sql脚本生成报告是会抛出错误ora-6502的。对应的影响版本为11.2.0.3,而且Oracle认为在12.1一下都可能发生错误。这个描述与当前笔者遇到的情况相同。

  对于故障原因,Oracle解释是:IncaseofmultibytecharactersinSQLtext,sometimeAWRreportgenerationfailswitherrorORA-6502.Alsosendingmorethan4000bytesofsinglevarchardatatoJDBCapiscausestruncationofdata.

  RediscoveryNotes:

  IfhtmlAWRreportgenerationfailswithORA-6502orgenerating

  AWRreportusingJDBCapiscausestruncationofdatathenthisbug

  asprobablybeenrediscovered.

  如果在SQLtext中存在多种语言表示,那么在数据输出的时候,就会抛出异常ora-6502。

  问题基本上就可以确定是这个了。那么怎么解决呢?对于策略,Oracle没有明确说补丁集合之类,只说这种情况比较偶然。

  3、问题解决

  虽然定位了问题,但是终究还是需要解决的。html格式存在问题,那么更简单的text格式是否不会抛出异常呢?

  SQL@?/rdbms/admin/awrrpt.sql

  CurrentInstance

  ~~~~~~~~~~~~~~~~

  DBIdDBNameInstNumInstance

  -------------------------------------------

  1083126127COGDB1cogdb

  SpecifytheReportType

  ~~~~~~~~~~~~~~~~~~~~~~~

  WouldyoulikeanHTMLreport,oraplaintextreport?

  EnterhtmlforanHTMLreport,ortextforplaintext

  Defaultstohtml

  输入report_type的值:text

  TypeSpecified:text

  最后结果成功生成:

  ParameterNameBeginvalue(ifdifferent)

  ----------------------------------------------------------------------------

  control_files/home/oracle/controlfile/cogdb/co

  /oradb/app/oracle/oradata/control

  ---------------------------------------------

  DynamicRemasteringStatsDB/Inst:COGDB/cogdbSnaps:9583-9584

  Nodataexistsforthissectionofthereport.

  -----------------------------------------

  EndofReport

  Reportwrittentoawrrpt_1_9583_9584.txt

  确认报告内容也是完整的。在SQLText部分,我们也的确发现了“多种语言”的情况。

  -CapturedPL/SQLaccountfor0.0%ofTotalDBTime(s):3,165

  ElapsedElapsedTime

  Time(s)ExecutionsperExec(s)%Total%CPU%IOSQLId

  --------------------------------------------------------------------------

  298.01297.999.450.626.64wfkj936k5qhq

  insertintof_cx_cmain(selectT1.POOas单号,T1.CLDEas

  类代码,T1.RDEas代码,T1.CDEas公司,T1

  .BUODEas来源代码,T1.SEas起期,T1.EEas终期,T1.UNDDDATEas通过,T2.STATDATEa

  的确和Bug说明的情况相匹配。除了text格式,笔者认为使用OEM产品中的AWR生成模块,也可以避免这类问题的出现。

  4、结论

  任何软件的使用过程中,Bug是难以避免。当操作结果和我们预想不同、而且从经验判断不是操作失误的时候,就可以考虑是Bug的原因。

  更多Oracle相关信息见专题页面

  本文永久更新链接地址:

  Linux公社简介-广告服务-网站地图-帮助信息-联系我们

  本站(LinuxIDC)所刊载文章不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。

推荐:

相关阅读
  • 没有资料