av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

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

導(dǎo)讀:Oracle數(shù)據(jù)庫概念問題,假如數(shù)據(jù)沒有提交,但是卻被dbwn進(jìn)程寫入了數(shù)據(jù)文件,會怎么樣呢?下文中將通過案例分析,詳細(xì)的為大家解析問題。

成都創(chuàng)新互聯(lián)是由多位在大型網(wǎng)絡(luò)公司、廣告設(shè)計(jì)公司的優(yōu)秀設(shè)計(jì)人員和策劃人員組成的一個(gè)具有豐富經(jīng)驗(yàn)的團(tuán)隊(duì),其中包括網(wǎng)站策劃、網(wǎng)頁美工、網(wǎng)站程序員、網(wǎng)頁設(shè)計(jì)師、平面廣告設(shè)計(jì)師、網(wǎng)絡(luò)營銷人員及形象策劃。承接:網(wǎng)站建設(shè)、成都做網(wǎng)站、網(wǎng)站改版、網(wǎng)頁設(shè)計(jì)制作、網(wǎng)站建設(shè)與維護(hù)、網(wǎng)絡(luò)推廣、數(shù)據(jù)庫開發(fā),以高性價(jià)比制作企業(yè)網(wǎng)站、行業(yè)門戶平臺等全方位的服務(wù)。

案例分析:

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

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

  IXDBA.NET社區(qū)論壇

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

  也沒有必要去管。

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

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

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

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

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

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

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

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

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

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

  于是,Oracle崩潰恢復(fù)步驟如下:

  首先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,此時(shí)用戶可以正常連接,可以訪問已經(jīng)recover的commited data,但是對于那些屬于unrecoverable transaction的uncommited data,會被oracle 加鎖,是不可以訪問的。

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

既然知道了Oracle數(shù)據(jù)庫中出現(xiàn)回滾與前退的原因,那么接下來我們就可以對癥下藥,有針對性的去解決問題,一保證我們的工作正常運(yùn)行。

【編輯推薦】

  1. Oracle數(shù)據(jù)庫共享連接和專用連接方式比較
  2. 入侵Oracle數(shù)據(jù)庫常用操作命令
  3. 輕松解決Oracle數(shù)據(jù)庫的服務(wù)啟動(dòng)問題

網(wǎng)站欄目:Oracle數(shù)據(jù)庫中為什么會產(chǎn)生回滾與前退
文章鏈接:http://uogjgqi.cn/article/coeseee.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們在微信上24小時(shí)期待你的聲音

解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流