问题描述:现在有大量的DELETE语句和INSERT语句进行批处理(按设计要求先DELETE指定数据,再INSERT数据),之后,在commit的时候,有时会报ORA-08177的错误。查资料时看到有说在进行DELETE语句和INSERT语句批处理时会出现这类情况,请问各位高手,ORA-08177问题应该如何解决…… 谢谢各位!

解决方案 »

  1.   

    Oracle產生這個錯誤是當一個可序列化的事務試圖update或delete數據,但這個數據已經在該可序列化事務開始之後被另一個事務修改並commit。
    所以你可以在程序中捕獲該異常,然後重新開始該事務。
      

  2.   

    ORA-08177 can't serialize access for this transactionCause: Encountered data changed by an operation that occurred after the start of this serializable transaction.Action: In read/write transactions, retry the intended operation or transaction.
      

  3.   

    delete
    commitinsert
    commit肯定是会事务冲突的 
      

  4.   

    delete 完之后就commit,避免事务冲突
    delete。
    commit;insert。
    commit;
      

  5.   


    我是用
    delete
    insert
    commit
      

  6.   

    如果这样做应该是没有问题了。可是如果数据量大的话,执行一个sql就commit一下,是很可怕的啊…… 
      

  7.   


    谢谢!这份资料我在网上也查到过,大体上说是在一个序列化中,如果后一个数据库操作修改前面的数据库操作,就会出现类似的问题。我现在把批处理的隔离级别设定为read committed,不知道这样是不是可以啊?
      

  8.   

    数据量大,只要不频繁删除,插入,delete,commit,insert,commt,这种方式就应该没有问题,
    如果大数据量删除后,大数据量插入,或过于频繁的话,可以再固定时间做这些操作:
    可以先每1000条删除,commit,直到删完,
    然后每1000条插入,commit,直到完。
      

  9.   


    时间不能固定,是人为控制的;数据量也不能确定。大量的commt对数据库影响很大……