The redo log records all changes made to data, including both uncommitted and committed changes.
Oracle通過(guò)Redo來(lái)保證數據庫的事務(wù)可以被重演,從而使得在故障之后,數據可以被恢復。在數據庫中,Redo的功能主要通過(guò)3個(gè)組件來(lái)實(shí)現:Redo Log Buffer、LGWR后臺進(jìn)程和Redo Log File(在歸檔模式下,Redo Log File最終會(huì )經(jīng)由ARCn進(jìn)程寫(xiě)出為歸檔日志文件)。

Redo Log Buffer位于SGA之中,是一塊循環(huán)使用的內存區域,其保存數據庫變更的相關(guān)信息。這些信息以重做條目(Redo Entries)形式存儲(Redo Entries也經(jīng)常稱(chēng)為Redo Records)。Redo Entries包含重構、重做數據庫變更的重要信息,這些變更包括INSERT、UPDATE、DELETE、CREATE、ALTER或者DROP等。
Redo Entries的內容被Oracle數據庫進(jìn)程從用戶(hù)的內存空間(PGA)復制到SGA中的Redo Log Buffer之中。Redo Entries在內存中占用連續的順序空間,由于Redo Log Buffer是循環(huán)使用的,Oracle通過(guò)一個(gè)后臺進(jìn)程LGWR不斷把Redo Log Buffer的內容寫(xiě)出到Redo Log File中,Redo Log File同樣是循環(huán)使用的。
比如我們昨天晚上備份了數據庫,但是今天中午發(fā)現磁盤(pán)壞掉了,那么我怎樣恢復。
我們先通過(guò)備份文件恢復到昨天晚上,然后再通過(guò)歸檔Redo日志和在線(xiàn)Redo日志恢復到今天中午。
Redo Log Buffer:如果數據需要寫(xiě)到在線(xiàn)重做日志中,則在寫(xiě)至磁盤(pán)之前要在Redo Buffer中臨時(shí)緩存這些數據。由于內存到內存的傳輸比內存到磁盤(pán)的傳輸快得多,因此使用重做日志Buffer可以加快數據庫的操作。數據在重做緩沖區的提留時(shí)間不會(huì )太長(cháng)。實(shí)際上LGWR會(huì )在一下某個(gè)情況發(fā)生時(shí)啟動(dòng)對這個(gè)區的刷新輸出(flush):
* 每3秒一次
* 無(wú)論何時(shí)有人提交請求
* 要求LGWR切換日志文件
* 重做緩沖區1/3滿(mǎn),或者包含了1MB的緩存重做日志數據
LGWR:日志寫(xiě)入器,LGWR負責將SGA中重做日志緩沖區的內容刷新到磁盤(pán)上的后臺進(jìn)程。
ARCn:歸檔進(jìn)程,ARCn的任務(wù)就是,當LGWR將在線(xiàn)日志文件填滿(mǎn)時(shí),就將其復制到另外一個(gè)位置。此后這些歸檔的重做日志文件可以用于完成介質(zhì)恢復。
Redo Log Files:重做日志文件,可以查詢(xún)v$logfile找到對應的日志文件。
在數據更新操作commit前,將更改的SQL腳本寫(xiě)入重做日志。主要用于數據庫的增量備份和增量恢復。
Redo Logs分為在線(xiàn)重做日志和歸檔重做日志
每個(gè)Oracle數據庫都至少有兩個(gè)Online重做日志組,每個(gè)組中至少有一個(gè)重做日志文件,這些在線(xiàn)重做日志組以循環(huán)方式使用。(用戶(hù)可以通過(guò)視圖操作添加/修改/刪除日志組和日志文件來(lái)自定義在線(xiàn)重做日志),每組內的日志文件的內容完全相同,且保存在不同的位置,用于磁盤(pán)日志鏡像,以做多次備份提高安全性。默認情況這n組通常只有一組處于活動(dòng)狀態(tài),不斷地同步寫(xiě)入已操作的腳本,當日志文件寫(xiě)滿(mǎn)時(shí)(達到指定的空間配額),如果當前數據庫處于歸檔模式,則將在線(xiàn)日志歸檔到硬盤(pán),成為歸檔日志;若當前數據庫處于非歸檔模式,則不進(jìn)行歸檔操作,而當前在線(xiàn)日志的內容會(huì )被下一次重新寫(xiě)入覆蓋而無(wú)法保存。因此,通常對于生產(chǎn)環(huán)境的數據庫在運行時(shí),是要處于歸檔模式下的,以保存數據更新的日志。當前歸檔日志組寫(xiě)滿(mǎn)后,Oracle會(huì )切換到下一日志組,繼續寫(xiě)入,就這樣循環(huán)切換;當處于歸檔模式下,切換至原已寫(xiě)滿(mǎn)的日志組,若該日志組歸檔完畢則覆蓋寫(xiě)入,若沒(méi)有則只能使用日志緩沖區,等待歸檔完畢之后才能覆蓋寫(xiě)入。當然,處于非歸檔模式下是直接覆蓋寫(xiě)入的。
歸檔重做日志文件實(shí)際上就是已填滿(mǎn)的“舊”的在線(xiàn)重做日志文件的副本。系統將日志文件填滿(mǎn)時(shí),ARCH進(jìn)程會(huì )在另一個(gè)位置建立重做日志文件的一個(gè)副本,也可以在本地或者遠程位置上建立多個(gè)另外的副本。如果由于磁盤(pán)損壞或者其他物理故障而導致失敗,就會(huì )用這些歸檔重做日志文件來(lái)執行介質(zhì)恢復。
默認情況下,一個(gè)數據庫默認為非歸檔模式,如果是非歸檔模式的話(huà),也就說(shuō)明我們沒(méi)有辦法通過(guò)日志來(lái)對數據庫做一個(gè)恢復。
Archived redo logs should be backed up and deleted regularly.
Online redo logs should not be backed up.
LGWR重復循環(huán)的寫(xiě)重做日志文件,當一個(gè)日志文件被寫(xiě)滿(mǎn)之后,LGWR就會(huì )寫(xiě)下一個(gè)Redo Log文件,當最后一個(gè)日志文件滿(mǎn)了之后,LGWR就會(huì )返回來(lái)寫(xiě)第一個(gè)日志文件。
Reuse of Redo Log Files by LGWR


1.非歸檔模式
不適用與生產(chǎn)數據庫
創(chuàng )建數據庫時(shí),缺省的日志管理模式為非歸檔模式
當日志切換,檢查點(diǎn)產(chǎn)生后,聯(lián)機重做日志文件即可被重新使用
聯(lián)機日志被覆蓋后,介質(zhì)恢復僅僅支持到最近的完整備份
不支持聯(lián)機備份表空間,一個(gè)表空間損壞將導致整個(gè)數據庫不可用,需要刪除掉損壞的表空間或從備份恢復
對于操作系統級別的數據庫備份需要將數據庫一致性關(guān)閉
應當備份所有的數據文件、控制文件(單個(gè))、參數文件、密碼文件、聯(lián)機日志文件(可選)
2.歸檔模式
能夠對聯(lián)機日志文件進(jìn)行歸檔,生產(chǎn)數據庫強烈建議歸檔
在日志切換時(shí),下一個(gè)即將被寫(xiě)入日志組必須歸檔完成之后,日志組才可以使用
歸檔日志的Log sequence number信息會(huì )記錄到控制文件之中
必須有足夠的磁盤(pán)空間用于存放歸檔日志
Oracle 9i 需要設置參數log_archive_start=true 才能夠進(jìn)行自動(dòng)歸檔
備份與恢復
支持熱備份,且當某個(gè)非系統表空間損壞,數據庫仍然處于可用狀態(tài),且支持在線(xiàn)恢復
使用歸檔日志能夠實(shí)現聯(lián)機或脫機時(shí)點(diǎn)恢復(即可以恢復到指定的時(shí)間點(diǎn)、指定的歸檔日志或指定的SCN)
SQLs
V$LOGFILE 存儲了Redo logs所放置的位置
V$LOGFILE視圖需要關(guān)注的字段是STATUS
INVALID - File is inaccessible
STALE - File's contents are incomplete
DELETED - File is no longer used
null - File is in use
V$LOG displays log file information from the control file.
可以看到Redo Log有3個(gè)組,關(guān)于V$LOG視圖,重點(diǎn)要關(guān)注STATUS字段
UNUSED - Online redo log has never been written to. This is the state of a redo log that was just added, or just after aRESETLOGS, when it is not the current redo log.
CURRENT - Current redo log. This implies that the redo log is active. The redo log could be open or closed.
ACTIVE - Log is active but is not the current log. It is needed for crash recovery. It may be in use for block recovery. It may or may not be archived.
CLEARING - Log is being re-created as an empty log after an ALTER DATABASE CLEAR LOGFILE statement. After the log is cleared, the status changes toUNUSED.
CLEARING_CURRENT - Current log is being cleared of a closed thread. The log can stay in this status if there is some failure in the switch such as an I/O error writing the new log header.
INACTIVE - Log is no longer needed for instance recovery. It may be in use for media recovery. It may or may not be archived.
查看是否啟用了歸檔模式
或者
非歸檔到歸檔模式
a.一致性關(guān)閉數據庫(shutdown [immediate | transactional |normal])
b.啟動(dòng)到mount階段(startup mount)
c.切換到歸檔模式(alter database archivelog [manual])
d.切換到open階段(alterdatabaseopen)
e.對數據做一個(gè)完整備份(fullbackup)
--演示非歸檔到歸檔模式
SQL> ARCHIVE LOG LIST --查看數據庫是否處于歸檔模式
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 14
Current log sequence 16
SQL> SELECT log_mode FROM v$database; --查看數據庫是否處于歸檔模式
LOG_MODE
------------
NOARCHIVELOG
SQL> SHUTDOWN IMMEDIATE; --一致性關(guān)閉數據庫
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> STARTUP MOUNT; --啟動(dòng)到mount狀態(tài)
ORACLE instance started.
Total System Global Area 251658240 bytes
Fixed Size 1218796 bytes
Variable Size 75499284 bytes
Database Buffers 171966464 bytes
Redo Buffers 2973696 bytes
Database mounted.
SQL> ALTER DATABASE ARCHIVELOG; --切換到自動(dòng)歸檔模式
Database altered.
SQL> ALTER DATABASE OPEN; --切換到open狀態(tài)
Database altered.
SQL> ARCHIVE LOG LIST; --查看數據庫的歸檔狀態(tài)
Database log mode Archive Mode --已置為歸檔模式
Automatic archival Enabled --對日志進(jìn)行自動(dòng)歸檔
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 14
Next log sequence to archive 16
Current log sequence 16
查看歸檔相關(guān)的參數
參考資料:
http://blog.csdn.net/robinson_0612/article/details/5784713
//v.youku.com/v_show/id_co00XMTM2MzU0MzY=.html
Expert Oracle - Tom Kyte
轉載請注明出處:http://blog.csdn.net/pan_tian/article/details/7805077
===EOF===
版權聲明:轉載請以鏈接形式注明出處
聯(lián)系客服