在客户的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