一、若是一個事務還沒提交,那麼它中間產生的數據變化會不會在未提交以前寫入磁盤呢?
回答:
會,寫入不寫入磁盤和提交沒提交沒有關係
commit 不必定會寫磁盤哦,要等到dwr進程的時候纔會寫入磁盤吧,但commit必定會寫人redo
一個事務 commit 並非把數據寫到數據文件中,而是寫到聯機 重作日誌文件中html
二、Oracle 中存在這樣的狀況嗎?某事務沒有提交,它的改動已經寫回到數據文件,給解釋一下怎樣出現的這種狀況?謝謝!
回答:
其實你這個問題自己就有問題
由於數據提不提交和數據有沒有被寫到數據文件沒有關係。數據提交了,有可能沒有被寫到數據文件!數據沒有提交,有可能寫到數據文件!
這個就沒有什麼好解釋的。好好看看lgwr和DBWn的做用和觸發條件數據庫
應該說樓主你說的這種狀況,是ORACLE的常態,有幾個條件會觸發寫入數據文件,好比緩存使用達到了閥值(100M),或者達到必定比例,好比進行了CHECKPOINT
好比說你一個大事務未提交,這時候由於BUFFER已經超過100M,髒數據已經寫入到數據文件種,這時候數據庫發生了DOWN機,
在重啓時,數據庫首先要驗證數據文件與控制文件的的SCN號,發現這個表空間有不該該提交的數據,而後就是用回滾段進行回滾。
有時候須要REDO先產生UNDO。而後數據文件達到一致,數據庫OPEN.緩存
三、DBWR 在什麼狀況下會寫髒數據到數據文件:
1.當髒緩衝區的數量超過閾值。
2.設定的時間間隔達到。
3.檢查點發生時
4.tablespace 發生 offline 或恢復normal
5.對某個表聯機設備時
6.找不到free buffer時
7. drop 或truncate 表時
8.把表設置爲read-only時
這樣看 好像,髒數據隨時都有可能被寫入datafile中,無論是否是提交了。spa
四、其中checkpoint 發生又有多的狀況
(1) 日誌切換 (自動或人爲)
(2)Timeout
(3)alter system checkpoint
(4)alter tablespace begin backup or end backup
(5)datafile offline.net
若是 checkpoint 發生的 全部髒數據都flush 到 datafile中?此checkpoint 以前的全部redo file 對恢復再也不有用。日誌
checkpoint
DBWR
LGWRorm
三者有本身的運行機制,又有聯繫。在看看之間的關係
更新後沒有提交(COMMIT)的數據通常存放在了內存SGA數據緩衝區的髒列表中。有些更新過的數據由後臺寫數據進程DBWn被寫入數據文件中,但加上未提交標誌。等事務被COMMIT時,把未提交標誌改成已提交標誌。數據庫恢復操做中回滾就是由於沒有提交數據被寫入數據文件引發的。htm
參考連接進程
http://www.itpub.net/thread-1505747-1-1.html事務