请教生产系统中出现的Batch failure问题,非常感谢!

各位老师,生产系统昨晚出现一个Batch failure问题,搞到2点多也没什么思路,今天继续过来搞,还请各位指教,非常感谢!环境:AIX P550小型机,DB2 9.7.5,Websphere 6.1.43 diaglog级别是info,里面没有error信息,只有几个无关的event 信息,systemout日志如下,搜索SQL Error: -4229和SQL Error...显示全部

各位老师,生产系统昨晚出现一个Batch failure问题,搞到2点多也没什么思路,今天继续过来搞,还请各位指教,非常感谢!

环境:AIX P550小型机,DB2 9.7.5,Websphere 6.1.43 diaglog级别是info,里面没有error信息,只有几个无关的event 信息,systemout日志如下,搜索SQL Error: -4229和SQL Error: -302, SQLState: 22001 ibm网站上显示插入时字段超过约束限制,但是奇怪的是日志中红色显示的错误。,这个操作是一个查询操作,判断是否存在相同记录,查询操作为什么会产生batch update错误?
在命令行上,向该表插入也不存在问题,是否遇到过类似的问题,怎么解决?

收起
参与12

查看其它 8 个回答hczzhong的回答

hczzhonghczzhong售前工程师CN
db2diag里面不会有这类信息,这是代码问题,不是数据库异常或者值得DBA关注的事情。
getNextException() 能获取batch中的具体Exception,如果有多个,还可以继续getNextException,但这里肯定和sequence cache无关,和并发/锁也无关
对JAVA代码来说,302最容易的原因是JAVA对象生命周期,看如下代码:
   public Integer addEmployee(String fname, String lname, int salary){
      Session session = factory.openSession();
      Transaction tx = null;
      Integer employeeID = null;
      try{
         tx = session.beginTransaction();
         Employee employee = new Employee(fname, lname, salary);
         employeeID = (Integer) session.save(employee);
         tx.commit();
      }catch (HibernateException e) {
         if (tx!=null) tx.rollback();
         e.printStackTrace();
      }finally {
         session.close();
      }
      return employeeID;
   }
这段代码是以前写的,应该有两个版本,一个出错,一个正常,现在找不到完整的了,当时是为了一个几乎一样的问题。可以在Employee ...session.save(employee)外面套循环,改变fname,lnane的内容,
比较一下在循环中增加新的Employee,每次new.然后看看在循环外面用new,而不是循环里面。
用Hibernate时,并非每个对象的保存都是立即到数据库执行的,在有transaction或者batch时,是延迟执行的。这样,如果上面的代码中,在循环外面new,而在循环中改变它的内容,一次两次可能似乎执行没错,但实际上,有些对象已经失去了外面的reference,成为垃圾,循环多几次,肯定会碰到类似的错误,因为有些对象已经超出生命周期.
IT分销/经销 · 2013-07-01
浏览6985

回答者

hczzhong
售前工程师CN

hczzhong 最近回答过的问题

回答状态

  • 发布时间:2013-07-01
  • 关注会员:2 人
  • 回答浏览:6985
  • X社区推广