setAutoCommit(false); 后没有手动commit. 对数据库有什么影响?

来源:互联网 发布:ubuntu查询已安装软件 编辑:程序博客网 时间:2024/06/02 13:05

http://www.iteye.com/problems/79138


connection.setAutoCommit(false);
如果因为当机,关闭服务器等原因,没有手动 commit or  rollback.
对数据库有什么影响?


因为数据库不一样,对于数据保护的机制也不都一样
对于oracle数据库来说
机器停电,那么在重起之后需要online redo logs去恢复系统到失败点
磁盘坏了,需要用archived redo logs和online redo logs区恢复数据

ORACLE在COMMIT之前已经把该写的东西写到DISK中了,COMMIT只是
  1,产生一个SCN给我们TRANSACTION,SCN简单理解就是给TRANSACTION排队,以便恢复和保持一致性。
  2,REDO写REDO到DISK中(LGWR,这就是log file sync),记录SCN在ONLINE REDO LOG,当这一步发生时,我们可以说事实上已经提交了,这个TRANSACTION已经结束(在V$TRANSACTION里消失了)
  3,SESSION所拥有的LOCK(V$LOCK)被释放。
  4,Block Cleanout ROLLBACK ROLLBACK和COMMIT正好相反,ROLLBACK的时间和TRANSACTION的大小有直接关系。因为ROLLBACK必须物理上恢复数据。 COMMIT之所以快,是因为ORACLE在COMMIT之前已经作了很多工作(产生UNDO,修改BLOCK,REDO,LATCH分配), ROLLBACK慢也是基于相同的原因。