Oracle BAM发送报警信息超长的解决方法

在客户的Oracle BAM监控项目中,通过SOA和ODI方式将业务接口运行时间,状态和相关信息写入数据对象DOInstanceInfo,并根据条件发送警报,而每发送一次警报,BAM都会往系统表History写入一条记录,其中数据对象DOInstanceInfo的Message字段存储的数据长度可能超出2000,但是History表的MessageText字段长度只有1000,因此每次业务系统发生异常发送警报后,往往由于历史记录无法插入而报错:

<Aug 8, 2012 9:38:40 AM CST> <Error> <oracle.bam.adc> <BEA-000000> <ActiveDataCache: Exception occurred in method <unspecified>()
Exception: oracle.bam.adc.common.exceptions.CacheException: BAM-01265: An error (ORA-12899: value too large for column "DEV_ORABAM"."_History"."_MessageText" (actual: 2004, maximum: 1000)
) has occurred in the Active Data Cache storage system.
  at oracle.bam.adc.dse.oracle.OracleExceptionHelpers.getStorageException(OracleExceptionHelpers.java:169)
  at oracle.bam.adc.dse.oracle.OracleStorageEngine.insertDataSetRow(OracleStorageEngine.java:1216)
  at oracle.bam.adc.kernel.datasets.DatasetBase.insertRowInternal(DatasetBase.java:630)
  at oracle.bam.adc.kernel.datasets.DatasetBase.insertRow(DatasetBase.java:592)
  at oracle.bam.adc.kernel.datasets.Dataset.insertRow(Dataset.java:1683)
  at oracle.bam.adc.kernel.server.DataStoreServer.insert(DataStoreServer.java:1606)
  at oracle.bam.adc.kernel.server.DataStoreServer.insert(DataStoreServer.java:1574)
  at oracle.bam.adc.ejb.BamAdcServerBean.insert(BamAdcServerBean.java:630)
  at sun.reflect.GeneratedMethodAccessor763.invoke(Unknown Source)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  at java.lang.reflect.Method.invoke(Method.java:597)

 

History表是BAM的系统表,因此比较顾虑系统表能否修改和如何修改。

修改表的信息有两种方式:一,直接修改DO的layout,但是这个方式在修改History表时不起作用,保存时总是报错:empty string,莫名其妙的。

二:直接修改底层数据库。

登陆DEV_ORABAM数据库,执行以下sql

    1) ALTER table "_History" modify "_MessageText"  VARCHAR2(5000 CHAR); //用于修改字段实际存储长度
    2) UPDATE "SysIterColumn" t SET "MaxSize"=5000 WHERE t."SysIterName" = 'MessageText' AND "SysIterTrID"=1111;
其中表"_History"为存放历史的真实表,SysIterColumn表记录了所有DO的column字段的属性,如长度、类型等信息。用于修改layout上显示的长度。
 
按照以上修改后,系统不再报关于字段超长的错误,且目前系统运行状况良好,这个修改不影响系统。

 

你可能感兴趣的:(Oracle BAM发送报警信息超长的解决方法)