1. 程式人生 > >setAutoCommit(false); 後沒有手動commit. 對資料庫有什麼影響?

setAutoCommit(false); 後沒有手動commit. 對資料庫有什麼影響?

因為資料庫不一樣,對於資料保護的機制也不都一樣
對於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慢也是基於相同的原因。