自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Oracle數(shù)據(jù)庫的相關(guān)事務(wù)的描述

數(shù)據(jù)庫 Oracle
以下的文章主要是描述在Oracle數(shù)據(jù)庫中的Redo功能通過3個(gè)組件是怎樣來實(shí)現(xiàn),其中包括Redo Log Buffer,以及LGWR后臺(tái)進(jìn)程等相關(guān)組件的相關(guān)內(nèi)容的介紹。

我們都知道Oracle是通過Redo來確保Oracle數(shù)據(jù)庫的相關(guān)事務(wù)能被重演,只有這樣才使出現(xiàn)故障之后,相關(guān)數(shù)據(jù)才可以被恢復(fù)。Redo對(duì)于Oracle數(shù)據(jù)庫來說至關(guān)重要。在數(shù)據(jù)庫中,Redo的功能主要通過3個(gè)組件來實(shí)現(xiàn):

Redo Log Buffer、LGWR后臺(tái)進(jìn)程和Redo Log File(在歸檔模式下,Redo Log File最終會(huì)寫出為歸檔日志文件)。在Oracle的SGA中,存在一塊共享內(nèi)存,稱為Redo Log Buffer,

Redo Log Buffer位于SGA之中,是一塊循環(huán)使用的內(nèi)存區(qū)域,其中保存Oracle數(shù)據(jù)庫變更的相關(guān)信息。這些信息以重做條目(Redo Entries)形式存儲(chǔ)(Redo Entries也經(jīng)常被稱為Redo Records)。Redo Entries包含重構(gòu)、重做數(shù)據(jù)庫變更的重要信息,這些變更包括INSERT、UPDATE、DELETE、CREATE、ALTER或者DROP等。在必要的時(shí)候Redo Entries被用于數(shù)據(jù)庫恢復(fù)。

Redo Entries的內(nèi)容被Oracle數(shù)據(jù)庫進(jìn)程從用戶的內(nèi)存空間復(fù)制到SGA中的Redo Log Buffer之中。Redo Entries在內(nèi)存中占用連續(xù)的順序空間,由于Redo Log Buffer是循環(huán)使用的,Oracle通過一個(gè)后臺(tái)進(jìn)程LGWR不斷地把Redo Log Buffer的內(nèi)容寫出到Redo Log File中。

當(dāng)用戶在Buffer Cache中修改數(shù)據(jù)時(shí),Oracle并不會(huì)立即將修改數(shù)據(jù)寫出到數(shù)據(jù)文件上,因?yàn)槟菢幼鲂蕰?huì)很低,到目前為止,計(jì)算機(jī)系統(tǒng)中最繁忙的部分是磁盤的I/O操作,Oracle這樣做的目的是為了減少IO的次數(shù),當(dāng)修改過的數(shù)據(jù)達(dá)到一定數(shù)量之后,可以進(jìn)行高效地批量寫出。

大部分傳統(tǒng)數(shù)據(jù)庫(當(dāng)然包括Oracle)在處理數(shù)據(jù)修改時(shí)都遵循no-force-at-commit策略。也就是說,在提交時(shí)并不強(qiáng)制寫。那么為了保證數(shù)據(jù)在數(shù)據(jù)庫發(fā)生故障時(shí)(例如斷電)可以恢復(fù),Oracle引入了Redo機(jī)制,通過連續(xù)的、順序的日志條目的寫出將隨機(jī)的、分散的數(shù)據(jù)塊的寫出推延。

這個(gè)推延使得數(shù)據(jù)的寫出可以獲得批量效應(yīng)的性能提升。同Redo Log Buffer類似,Redo Log File也是循環(huán)使用的,Oracle允許使用最少兩個(gè)日志組。缺省情況下,Oracle數(shù)據(jù)庫創(chuàng)建時(shí)會(huì)建立3個(gè)日志組。

  1. SQL> select group#,members,status from v$log;  
  2. GROUP# MEMBERS STATUS  
  3. INACTIVE  
  4. CURRENT  
  5. INACTIVE  

當(dāng)一個(gè)日志文件寫滿之后,會(huì)切換到另外一個(gè)日志文件,這個(gè)切換過程稱為Log Switch。Log Switch會(huì)觸發(fā)一個(gè)檢查點(diǎn),促使DBWR進(jìn)程將寫滿的日志文件保護(hù)的變更數(shù)據(jù)寫回到數(shù)據(jù)庫。在檢查點(diǎn)完成之前,日志文件是不能夠被重用的。

由于Redo機(jī)制對(duì)于數(shù)據(jù)的保護(hù),當(dāng)數(shù)據(jù)庫發(fā)生故障時(shí),Oracle就可以通過Redo重演進(jìn)行數(shù)據(jù)恢復(fù)。那么一個(gè)非常重要的問題是,恢復(fù)應(yīng)該從何處開始呢?

如果讀取的Redo過多,那么必然導(dǎo)致恢復(fù)的時(shí)間過長,在生產(chǎn)環(huán)境中,我們必需保證恢復(fù)時(shí)間要盡量得短。Oracle通過檢查點(diǎn)(Checkpoint)來縮減恢復(fù)時(shí)間。回顧一下第1章中所提到的內(nèi)容:檢查點(diǎn)只是一個(gè)數(shù)據(jù)庫事件,它存在的根本意義在于減少恢復(fù)時(shí)間。

當(dāng)檢查點(diǎn)發(fā)生時(shí)(此時(shí)的SCN被稱為Checkpoint SCN)Oracle會(huì)通知DBWR進(jìn)程,把修改過的數(shù)據(jù),也就是此Checkpoint SCN之前的臟數(shù)據(jù)(Dirty Buffer)從Buffer Cache寫入磁盤,在檢查點(diǎn)完成后CKPT進(jìn)程會(huì)相應(yīng)地更新控制文件和數(shù)據(jù)文件頭,記錄檢查點(diǎn)信息,標(biāo)識(shí)變更。

在檢查點(diǎn)完成之后,此檢查點(diǎn)之前修改過的數(shù)據(jù)都已經(jīng)寫回磁盤,重做日志文件中的相應(yīng)重做記錄對(duì)于崩潰/實(shí)例恢復(fù)不再有用。如果此后數(shù)據(jù)庫崩潰,那么恢復(fù)只需要從***一次完成的檢查點(diǎn)開始恢復(fù)即可。如果Oracle數(shù)據(jù)庫運(yùn)行在歸檔模式(所有生產(chǎn)數(shù)據(jù)庫,都建議運(yùn)行在歸檔模式),日志文件在重用之前必須寫出到歸檔日志文件,歸檔日志在介質(zhì)恢復(fù)時(shí)可以用來恢復(fù)數(shù)據(jù)庫故障。

【編輯推薦】

  1. Oracle數(shù)據(jù)庫運(yùn)行在archivelog狀態(tài)描述
  2. 三種Oracle備份方其特點(diǎn)介紹
  3. Oracle數(shù)據(jù)庫的實(shí)用型的表現(xiàn)
  4. Oracle數(shù)據(jù)安全性的介紹
  5. 手動(dòng)設(shè)置Oracle管理控制和日志文件
責(zé)任編輯:佚名 來源: 博客園
相關(guān)推薦

2010-04-15 09:27:37

Oracle數(shù)據(jù)庫

2010-04-09 10:32:03

Oracle 數(shù)據(jù)庫

2010-04-14 15:45:49

Oracle 數(shù)據(jù)庫

2010-04-26 09:10:09

Oracle數(shù)據(jù)庫

2010-04-16 15:57:54

Oracle 10g

2010-04-22 16:16:35

Oracle數(shù)據(jù)庫

2010-04-14 10:56:07

Oracle數(shù)據(jù)庫

2010-04-16 16:09:41

Oracle數(shù)據(jù)庫

2010-04-09 13:59:48

Oracle數(shù)據(jù)庫索引

2010-04-19 11:30:34

Oracle數(shù)據(jù)庫

2010-04-08 18:54:32

Oracle數(shù)據(jù)庫

2010-04-15 10:51:52

2011-03-07 17:51:00

Oracle數(shù)據(jù)庫優(yōu)缺點(diǎn)

2010-04-07 09:31:02

Oracle數(shù)據(jù)庫

2011-08-18 17:05:16

Oracle數(shù)據(jù)庫的服

2010-04-13 10:55:35

Oracle數(shù)據(jù)庫

2010-05-31 15:12:44

MySQL數(shù)據(jù)庫

2011-03-25 11:13:15

Oracle數(shù)據(jù)庫進(jìn)程

2011-09-02 10:37:15

Oraclesqlload用法

2025-04-08 06:00:00

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)