欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

oracle如何回滾事務(wù) 數(shù)據(jù)庫(kù)事務(wù)回滾

如何使用Oracle回滾段

Oracle缺省用的是專(zhuān)用服務(wù)器模式,也就是說(shuō)一個(gè)用戶(hù)連接進(jìn)程對(duì)應(yīng)一個(gè)服務(wù)器的進(jìn)程.

專(zhuān)注于為中小企業(yè)提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)積石山保安族東鄉(xiāng)族免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了千余家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

記得某大醫(yī)院剛啟用的時(shí)候,我們?cè)?jīng)試過(guò)MTS.因?yàn)槁?tīng)說(shuō)MTS在不增加內(nèi)存和CPU的情況下連接更多的客戶(hù)端,結(jié)果并不是我們預(yù)期的那樣.

因?yàn)槲覀儗?duì)MTS不了解,并不是它有問(wèn)題,而是它不是用來(lái)在這種情況下做這件事的.

oracle中數(shù)據(jù)是怎樣前滾和回滾的

保持?jǐn)?shù)據(jù)一致性和完整性,是每一款成功商業(yè)數(shù)據(jù)庫(kù)軟件都必須要做到的基本要求。從故障中恢復(fù),保證ACID原則,保證事務(wù)完整性,一直是Oracle數(shù)據(jù)庫(kù)核心功能組成部分。本篇主要介紹Oracle實(shí)例意外終止(斷電或者強(qiáng)制關(guān)閉)之后,重新啟動(dòng)時(shí)發(fā)生的恢復(fù)過(guò)程,也可以稱(chēng)作“前滾和回滾”。

基礎(chǔ)知識(shí)說(shuō)明

為了更明確的說(shuō)明問(wèn)題,筆者首先介紹一下本文涉及到的一些重要知識(shí)。

數(shù)據(jù)庫(kù)實(shí)例失敗

我們經(jīng)常說(shuō)的數(shù)據(jù)庫(kù)服務(wù)器failure是有多層含義的。Oracle數(shù)據(jù)庫(kù)是一個(gè)由多進(jìn)程組件共同構(gòu)成的結(jié)構(gòu)體系。最重要的部分包括監(jiān)聽(tīng)器、Oracle數(shù)據(jù)庫(kù)實(shí)例兩個(gè)部分,當(dāng)然還包括各類(lèi)文件,更廣義的還有硬件和操作系統(tǒng)OS。不同部分的Failure現(xiàn)象和處理方法都有所不同。本文所闡述的過(guò)程是Oracle實(shí)例失敗后的自動(dòng)恢復(fù)過(guò)程。

在實(shí)例失敗的時(shí)候,往往是突然性的終止。此時(shí)Oracle數(shù)據(jù)庫(kù)可能在進(jìn)行一系列完成或者未完成的事務(wù)。實(shí)例失敗恢復(fù),就是要將這些狀態(tài)進(jìn)行還原,恢復(fù)到數(shù)據(jù)完整性的狀態(tài)。

寫(xiě)日志(RedoLog)在先機(jī)制

Oracle數(shù)據(jù)庫(kù)是采用“日志在先”機(jī)制的。當(dāng)我們對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行修改時(shí),并不是立即將修改寫(xiě)入到文件中,而是寫(xiě)入到共享內(nèi)存SGA空間中的BufferCache里。同時(shí),將修改的日志不斷的寫(xiě)入到SGA中另一塊Log Buffer緩存中。有一個(gè)后臺(tái)進(jìn)程LGWR不斷的將LogBuffer緩存中的日志內(nèi)容寫(xiě)入到online redo log文件中。

寫(xiě)入LogBuffer緩存和LGWR寫(xiě)入文件的過(guò)程是異步進(jìn)行的。那么LGWR會(huì)在哪些情況下將日志緩沖區(qū)(全部?jī)?nèi)容)轉(zhuǎn)儲(chǔ)到日志文件呢?如下:--參考OCA認(rèn)證考試指南(1Z0-052,P40)ü 用戶(hù)進(jìn)行直接的commit操作;

ü RedoBuffer數(shù)據(jù)超過(guò)1/3;

ü DBWn啟動(dòng),將BufferCache中的臟數(shù)據(jù)寫(xiě)入到文件中;ü 距離上次LGWR寫(xiě)入操作超過(guò)三秒(三秒超時(shí),DBWn每三秒鐘會(huì)對(duì)一些緩沖區(qū)清理一次,這個(gè)時(shí)候,剛好符合觸發(fā)LGWR的第三點(diǎn));而數(shù)據(jù)文件寫(xiě)入進(jìn)程DBWn工作的觸發(fā)點(diǎn)(此處注意:DBWn會(huì)將高速緩沖區(qū)的臟緩沖區(qū),即臟數(shù)據(jù)塊寫(xiě)入數(shù)據(jù)文件,而不是緩沖區(qū)里頭的全部?jī)?nèi)容---參考OCA認(rèn)證考試指南(1Z0-052,P38))。

因?yàn)榭紤]到磁盤(pán)I/O會(huì)降低性能,DBWn采用的是極懶算法執(zhí)行寫(xiě)入。如果對(duì)于經(jīng)常變臟的緩沖區(qū),即這邊緩沖區(qū)處于十分忙碌的狀態(tài),那么DBWn不會(huì)將緩沖區(qū)寫(xiě)入磁盤(pán)的。反而一段時(shí)間來(lái),任何會(huì)話都未曾關(guān)注的一些緩沖區(qū),DBWn會(huì)將其寫(xiě)入到磁盤(pán)。因此DBWn寫(xiě)臟緩沖區(qū)比較平緩和低頻率。但如果出現(xiàn)檢查點(diǎn)的情況例外:DBWn會(huì)將所有臟緩沖區(qū)全部寫(xiě)入磁盤(pán)。---參考OCA認(rèn)證考試指南(1Z0-052,P38中,P39)。

ü 當(dāng)BufferCache中沒(méi)有任何可用緩沖區(qū);ü 臟緩沖區(qū)過(guò)多;

ü 遇到三秒超時(shí)(DBWn每三秒鐘會(huì)對(duì)一些緩沖區(qū)清理一次)ü 遇到檢查點(diǎn)

綜合DBWn和LGWR工作的特點(diǎn),我們可以得到日志文件的幾個(gè)特點(diǎn):

首先,日志文件的寫(xiě)入是很頻繁的。LGWR會(huì)不斷將日志信息從LogBuffer中寫(xiě)入Online Redo Log;其次,在日志文件上,可以有三個(gè)類(lèi)型的事務(wù)事件。

1、事務(wù)結(jié)束,已經(jīng)被commit,之后打過(guò)checkpoint檢查點(diǎn)。這種事務(wù)記錄在LogFile上,但是變化信息已經(jīng)被DBWn寫(xiě)入進(jìn)數(shù)據(jù)文件;2、事務(wù)結(jié)束,已經(jīng)被commit,之后沒(méi)有打入checkpint檢查點(diǎn)。這種情況下,LogFile已經(jīng)寫(xiě)入了日志項(xiàng)目,數(shù)據(jù)文件可能包括臟數(shù)據(jù),也可能沒(méi)有寫(xiě)入臟數(shù)據(jù);3、事務(wù)未結(jié)束,沒(méi)有commit。這種時(shí)候,數(shù)據(jù)塊DirtyBlock上面是有事務(wù)槽信息,表示未結(jié)束事務(wù),是不會(huì)將數(shù)據(jù)寫(xiě)入到數(shù)據(jù)文件中。但是,日志LogBuffer可能將部分未提交的DML操作項(xiàng)目寫(xiě)入到Log File中;檢查點(diǎn)Checkpoint

檢查點(diǎn)Checkpoint是數(shù)據(jù)庫(kù)一致性檢查的一個(gè)標(biāo)記。簡(jiǎn)單的說(shuō),就是在這個(gè)點(diǎn)上,Oracle保證各個(gè)文件(數(shù)據(jù)、控制、日志等)是一致的。檢查點(diǎn)的作用就是在進(jìn)行實(shí)例恢復(fù)的時(shí)候,告訴SMON進(jìn)程,這個(gè)點(diǎn)之前的內(nèi)容不需要進(jìn)行恢復(fù)。

前滾和回滾介紹

“前滾和回滾”是Oracle數(shù)據(jù)庫(kù)實(shí)例發(fā)生意外崩潰,重新啟動(dòng)的時(shí)候,由SMON進(jìn)行的自動(dòng)恢復(fù)過(guò)程。下面通過(guò)模擬實(shí)例和講解介紹這個(gè)過(guò)程。

失敗前場(chǎng)景說(shuō)明

日志中記錄過(guò)程如下:

1、事務(wù)A進(jìn)行之后,結(jié)束commit。之后系統(tǒng)進(jìn)行了一次checkpointA;2、Checkpoint之后,進(jìn)行事務(wù)B,結(jié)束commit;3、進(jìn)行事務(wù)C,C事務(wù)量較大,其中進(jìn)行了一定量的RedoLog文件寫(xiě)入。之后系統(tǒng)斷電;--按照LGWR的工作機(jī)制,C事務(wù)量比較大,所以應(yīng)用程序?qū)⒃趲追种幻雰?nèi)的時(shí)間里生成足以填充1/3秒的重做內(nèi)容,因此這會(huì)觸發(fā)LGWR將日志緩沖區(qū)的內(nèi)容轉(zhuǎn)儲(chǔ)到日志文件,但始終得不到針對(duì)C事務(wù)的提交記錄,這是需要回滾的。

4、還有種可能,事務(wù)B和D,事務(wù)D所用的緩沖區(qū)處于高速緩沖區(qū)不活躍的位置,而且事務(wù)B已提交,但其所用的緩沖區(qū)處于高速緩沖區(qū)活躍的位置。因此DBWn會(huì)將D事務(wù)緩沖區(qū)數(shù)據(jù)寫(xiě)入數(shù)據(jù)文件,而沒(méi)將B事務(wù)的數(shù)據(jù)寫(xiě)入。此種情況需要回滾D事務(wù),保留B事務(wù)。---參考OCP認(rèn)證考試指南全冊(cè)(P358下半部分內(nèi)容).

1、系統(tǒng)啟動(dòng)過(guò)程,進(jìn)入實(shí)例恢復(fù)階段

當(dāng)實(shí)例意外中斷的時(shí)候,各類(lèi)型文件,包括控制文件、數(shù)據(jù)文件和日志文件上,會(huì)存在不一致的問(wèn)題。這種不一致主要體現(xiàn)在SCN值的差異上。

實(shí)例在啟動(dòng)的時(shí)候,經(jīng)過(guò)三階段(nomount、mount和open)。在open之前,會(huì)進(jìn)行這種不一致現(xiàn)象的檢查,如果出現(xiàn)不一致,要啟動(dòng)SMON進(jìn)程的恢復(fù)流程。

SMON是Oracle實(shí)例的一個(gè)后臺(tái)進(jìn)程,主要負(fù)責(zé)進(jìn)行系統(tǒng)監(jiān)控恢復(fù)。進(jìn)行恢復(fù)的依據(jù)主要是RedoLog記錄。

2、前滾進(jìn)程

SMON首先找到最后SCN記錄的Redo LogFile。尋找最后一個(gè)打入的Checkpoint。

順序找到CheckPointA之后,表示A之前的所有事務(wù)都是完全寫(xiě)入到數(shù)據(jù)文件中,不存在不一致性問(wèn)題。恢復(fù)過(guò)程從CheckpointA開(kāi)始,Oracle開(kāi)始依據(jù)重做日志Redo Log的系列條目,進(jìn)行推進(jìn)。

首先遇到了事務(wù)B信息,由于事務(wù)B已經(jīng)commit,所以事務(wù)B所有相關(guān)的Redo Log條目已經(jīng)全都寫(xiě)入到Redo LogFile中。所以,按照日志繼續(xù)條目推進(jìn),完全可以重演replay,并且應(yīng)用apply事務(wù)B的全部過(guò)程。

這樣,事務(wù)B全部實(shí)現(xiàn),最終將通過(guò)DBWn完全寫(xiě)入到數(shù)據(jù)文件中。所以,實(shí)例失敗之前提交commit的事務(wù)B,完全恢復(fù)。

進(jìn)入事務(wù)C的范疇,由于一部分事務(wù)C的RedoLog條目已經(jīng)進(jìn)入Redo LogFile中(根據(jù)LGWR和DBWn的工作機(jī)制,事務(wù)C有可能將部分?jǐn)?shù)據(jù)塊寫(xiě)入日志文件和數(shù)據(jù)文件,但這時(shí)候C事務(wù)始終沒(méi)提交,這是比較嚴(yán)重的訛誤,所以需要回滾),所以在進(jìn)行前滾的時(shí)候,一定會(huì)replay到這部分的內(nèi)容。不過(guò),這部分內(nèi)容中不可能出現(xiàn)commit的標(biāo)記。所以,前滾的結(jié)果一定是遇到實(shí)例突然中斷的那個(gè)時(shí)點(diǎn)。此時(shí)replay的結(jié)果是,事務(wù)C沒(méi)有提交。這樣結(jié)束了前滾過(guò)程,進(jìn)入回滾階段。

3、回滾過(guò)程(與普通的回滾一樣(當(dāng)事務(wù)執(zhí)行失敗后自動(dòng)回滾或者命令:ROLLBACK.)---參考OCP認(rèn)證考試指南全冊(cè))對(duì)事務(wù)C(針對(duì)DML的update,當(dāng)然其他同理),要進(jìn)行回滾過(guò)程,釋放所有相關(guān)資源。在前滾中,利用日志填充了的撤銷(xiāo)塊和表數(shù)據(jù)塊的值,然后在回滾的時(shí)候,會(huì)將撤銷(xiāo)塊的值復(fù)制回表數(shù)據(jù)塊中(因?yàn)榇耸聞?wù)沒(méi)提交記錄),以此來(lái)進(jìn)行SGA中BufferCache數(shù)據(jù)塊恢復(fù)。

4、說(shuō)說(shuō)恢復(fù)過(guò)程的損耗

很多時(shí)候,由于我們事務(wù)規(guī)模較大,當(dāng)出現(xiàn)實(shí)例崩潰的時(shí)候,重啟所需要的時(shí)間很多。有一種經(jīng)驗(yàn)說(shuō)法是,事務(wù)有多長(zhǎng),前滾和回滾所消耗的時(shí)間有多長(zhǎng)×2。而且,如果不能完成SMON恢復(fù)過(guò)程,數(shù)據(jù)庫(kù)是不能算作正常的Open的。

SMON的恢復(fù)過(guò)程是Oracle強(qiáng)制進(jìn)行的一個(gè)過(guò)程,即使恢復(fù)中發(fā)生斷電或者其他中斷失敗事件。Oracle在下一次啟動(dòng)的時(shí)候,還是會(huì)繼續(xù)這個(gè)過(guò)程,只有耐心等待。

通過(guò)檢查一些內(nèi)部視圖(X$視圖),可以觀察到恢復(fù)進(jìn)程和速度,但是絲毫不能影響到最終恢復(fù)的過(guò)程。

這個(gè)過(guò)程雖然可以保證數(shù)據(jù)一致性,但是也帶來(lái)了系統(tǒng)不能啟動(dòng),影響生產(chǎn)環(huán)境的問(wèn)題。我們可以通過(guò)兩個(gè)方式進(jìn)行緩解:

首先,我們?cè)谠O(shè)計(jì)開(kāi)發(fā)系統(tǒng)時(shí),要保證事務(wù)規(guī)模的可控性,不要讓事務(wù)規(guī)模在技術(shù)層面上過(guò)大。避免一旦發(fā)生崩潰,大規(guī)模強(qiáng)制回滾的發(fā)生;其次,一旦出現(xiàn)了這個(gè)強(qiáng)制回滾,要注意對(duì)生產(chǎn)環(huán)境的影響。可以采用備庫(kù)standby進(jìn)行頂替,讓主庫(kù)安靜的慢慢恢復(fù);

oracle 如何通過(guò)事務(wù)回滾。

如果你的數(shù)據(jù)是相互不影響,就是沒(méi)有業(yè)務(wù)關(guān)聯(lián)的話,就回滾一條

如果相互有關(guān)系的話

那估計(jì)就回滾所有了

個(gè)人意見(jiàn)

希望對(duì)你有幫助

分享名稱(chēng):oracle如何回滾事務(wù) 數(shù)據(jù)庫(kù)事務(wù)回滾
本文來(lái)源:http://chinadenli.net/article6/hijhig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄網(wǎng)站內(nèi)鏈微信小程序網(wǎng)站設(shè)計(jì)公司關(guān)鍵詞優(yōu)化網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)