有个情况,一个update语句可能涉及上百万条记录,但回滚段又有限,应该怎样分批提交呢?关键的地方是,这个语句之后还有其它的操作,如果后面发生异常,就都要回滚。最粗暴的方法是,在更新的时候,每次分N条,5000或50000分批提交。发生异常的时候,再同样分批把更新的数据抹掉。但这样效率很低,如果发生异常的话。

解决方案 »

  1.   

    出现异常,一定要100W条全部回滚吗?
    如果这样,那就增加undo表空间的大小吧,把它的datafile resize一下。
      

  2.   

    1:最好用增加回滚段大小满足大批量数据更新2:发生异常的回滚操作可用CHECKPOINT检查点来进行回滚,或者用FLASHBACK来进行回滚操作,
    注意根据实际情况使用,因为他们会回滚其它事务,建议用FLASHBACK TABLE回滚方式操作