亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

Oracle數(shù)據(jù)庫中為什么會產(chǎn)生回滾與前退

瀏覽:91日期:2023-11-27 17:13:33
Oracle概念問題,假如數(shù)據(jù)沒有提交,但是卻被dbwn進程寫入了數(shù)據(jù)文件,會怎么樣呢?

案例分析:

首先說明的是dbwn寫臟數(shù)據(jù)跟commit提交沒有關系!

在一個transaction發(fā)生的過程中,online redo log首先記錄transaction中修改的數(shù)據(jù)塊相關信息,修改的數(shù)據(jù)塊會被緩存在database buffer cache中。由于database buffer cache寫滿或者checkpoint等等條件觸發(fā)dbwn進程,會導致這些緩存的數(shù)據(jù)塊寫入數(shù)據(jù)文件,但此時可能該transaction仍然還沒有提交。所以在數(shù)據(jù)文件中,可能會有commited 和 uncommited 的數(shù)據(jù)塊。而原有的數(shù)據(jù)塊鏡像會存放在undo segment。

IXDBA.NET社區(qū)論壇

然而,dbwn寫臟數(shù)據(jù)時不管這個要寫的transaction是否提交,

也沒有必要去管。

這樣就發(fā)生了所謂的已經(jīng)提交的數(shù)據(jù),但是還沒有寫入數(shù)據(jù)文件的現(xiàn)象。

還有一種情況,數(shù)據(jù)沒有提交,但是已經(jīng)被寫入數(shù)據(jù)文件,此時發(fā)生回退,撤銷沒有提交的數(shù)據(jù)。

那么,引發(fā)Oracle前滾與回退的根本原因就是什么呢?

根本原因是commit后寫redo buffer和觸發(fā)lgwr寫 redo buffer的區(qū)別。

事務在執(zhí)行完畢后,隨即會被寫入redo buffer和undo中,同時在redo buffer和undo中對該事務都有一個是否提交的標記。兩者的默認狀態(tài)都是active的,即沒有提交時刻處于激活狀態(tài)。

commit操作執(zhí)行時刻把此前的所有事務操作全部寫入redo log file,commit成功后,redo buffer信息全部寫入redo file,同時修改兩者中的事務提交標識為inactive,表示此前事務已經(jīng)遞交。

oracle的前滾和回退根據(jù)就是依據(jù)事務是否提交而進行的。

在觸發(fā)lgwr進程后,oracle同樣把此前的redo buffer信息寫入redo file,但是與commit觸發(fā)寫日志不同的是,redo file本身對lgwr寫日志操作不記錄任何信息標識,lgwr寫到那里就是那里,就算此時掉電也無妨,redo file就記錄到掉電時刻的信息。

lgwr是一個Oracle后臺執(zhí)行的進程,具體的日志寫操作都有oracle去控制,這對于oracle來說是透明的,因此不用在redo file中寫入任何標記信息,這也是正常的。

commit操作是唯一一個可以前臺操作與oracle后臺通信的指令,因此當加入這個操作以后,oracle本身必須要了解各個事務的讀寫狀況,那么怎么了解整個狀況:在redo以及undo中加入是否遞交的標識,對于已經(jīng)提交的操作,但是還沒有寫入數(shù)據(jù)文件,那么就要前滾,相反,對于沒有提交,執(zhí)行回退!

于是,Oracle崩潰恢復步驟如下:

首先rolling forward 前滾:由于oracle failure,sga中的內(nèi)存信息丟失了,但是online redo log中還是存儲了transaction信息,包括commited or uncommited data。可能這些修改信息并沒有被oracle正確的來處理,包含兩種情況:已經(jīng)提交的還沒有寫入數(shù)據(jù)文件,或者沒有提交的卻被寫入了數(shù)據(jù)文件。針對已經(jīng)提交的還沒有寫入數(shù)據(jù)文件就要發(fā)生前滾,在前滾過程中,smon會根據(jù)online redo log中的記錄來完成對datafile的修改。保證已經(jīng)提交的數(shù)據(jù)已經(jīng)寫入數(shù)據(jù)文件。

接下來,前滾結(jié)束后,數(shù)據(jù)庫正常open,此時用戶可以正常連接,可以訪問已經(jīng)recover的commited data,但是對于那些屬于unrecoverable transaction的uncommited data,會被oracle 加鎖,是不可以訪問的。

rolling back:假如有進程訪問這些加鎖的data,此時smon會對這些數(shù)據(jù)塊做rollback回滾,從數(shù)據(jù)文件中撤銷沒有提交卻被寫入數(shù)據(jù)文件的數(shù)據(jù)。

主站蜘蛛池模板: 黑人狂躁日本妞中文字幕 | 亚洲欧美在线观看91偷拍 | 国产在线观看午夜不卡 | 欧美一级毛片在线播放 | 2020国产微拍精品一区二区 | 最新在线鲁丝片eeuss第1页 | 欧美一级高清毛片aaa | 成年人黄色在线观看 | 特级欧美 | 91av成年影院在线播放 | 91蝌蚪视频在线观看 | 一级看片男女性高爱潮 | 亚洲综合一区二区不卡 | 国产美女精品三级在线观看 | www.欧美在线观看 | 久久精品中文字幕有码日本 | 欧美亚洲日本国产 | 黄色片免费在线观看视频 | 亚洲人成在线免费观看 | 视频二区在线 | 亚洲an天堂an在线观看 | 成人在线免费观看视频 | 大陆精品自在线拍国语 | 亚洲国产精品久久网午夜 | 欧美精品一区二区三区在线播放 | 小明永久免费视频 | 麻豆影视视频高清在线观看 | 亚洲无限乱码一二三四区 | 久久在线视频免费观看 | 国产精品原创永久在线观看 | 亚洲嗯啊 | a毛片免费全部在线播放毛 a毛片免费全部播放毛 | 草草视频免费观看 | 黄色一级在线观看 | 久久亚洲伊人成综合人影院 | 亚洲视频在线精品 | 九九99九九在线精品视频 | 婷婷久久激情啪啪 | 一级特级欧美a毛片免费 | 亚洲欧美日韩另类精品一区二区三区 | 久久精品视频在线观看榴莲视频 |