程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 我的第一貼: 小試牛刀, Oracle的Transaction

我的第一貼: 小試牛刀, Oracle的Transaction

編輯:Oracle數據庫基礎
What did oracle do when transaction happens? (from Oracle reference book,翻譯+個人理解)
1.       Transaction 發生在第一個可執行的SQL (DML or DDL).
2.       Transaction 開始後, Oracle會:分配可用的undo tablespace或 rollback segment來記錄回滾的入口 (新的transaction發生).
3.       Transaction何時結束?
a)         Commit or rollback 語句 (注意: 單字的rollback only).
b)         DDL語句結束 (如create, alter, drop etc).
c)         用戶斷開連接. Oracle會自動提交( 設置auto commit參數)
d)         用戶進程異常中止. (強制)
4.       Commit transaction,
a)         在修改的數據commit之前, Oracle會
                         i.              在SGA的存儲rollback segment數據緩沖區中 (block buffer cache)生成了rollback segment塊.rollback信息包含了transaction的SQL所改變的舊數據 (快照).
                       ii.              在SGA的redo log buffer中生成了redo log entrIEs. Redo log的記錄包含了數據塊和回滾塊的變化.
                      iii.              這些變化會被存儲到SGA的數據緩沖區 (data buffer), 在提交之前可能會寫入磁盤 (由DBWn 進程和Buffer cache設置以及LRU算法決定何時去寫).
b)         在數據commit後, Oracle會
                         i.              相關聯的rollback segment會記錄提交事件, Oracle分配SCN並記錄.
                       ii.              LGWR進程會將redo log的entrIEs (SGA redo log buffer)寫入online redo log file, 同時將SCN寫入.
                      iii.              Oracle釋放行級或者表級鎖.
                      iv.              Oracle標記該transaction結束.


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved