oracle11g 聯機重做日誌、歸檔日誌、日誌檔案組以及日誌檔案操作
文章目錄
一.歸檔方式
1.1 聯機重做日誌、歸檔日誌概念
oracle資料庫有聯機重做日誌,用於記錄對資料庫所做的修改,包括對錶進行的DML(INSERT、UPDATE、DELETE)操作以及DDL操作、對系統所做的改變等。
資料庫通過LGWR程序把日誌緩衝區中的重做條目寫入聯機日誌檔案(redo01.log等)中。使用者修改記錄並commit後,資料庫宕機,重新啟動資料庫,需要用到redo01.log等。對於DML操作, 通過前滾、後滾,只要使用者提交了資料記錄,就不會丟失,只要沒有提交,就不會儲存。
由於聯機重做日誌檔案的重要性,因此以組的方式管理日誌檔案,資料庫中至少有2個日誌檔案組,每個日誌組中所有日誌成員的內容完全相同,如果一個日誌檔案損壞,只要組內的其他日誌檔案仍然可用,該組依然對外提供日誌操作,不會宕機。
oracle中日誌檔案分為線上日誌檔案(即聯機重做日誌)和歸檔日誌兩類。歸檔日誌是對線上日誌檔案的歷史備份
線上日誌檢視:
select * from V$LOGFILE;
- 1
1.2 工作模式
線上日誌按照組來工作,每一個組有多個檔案。日誌組按照迴圈方式進行工作,在oracle中至少有2個日誌組。當一個聯機重做日誌組1被寫滿時,就會發生日誌切換,這時聯機重做日誌組2成為當前使用的日誌,當聯機重做日誌組2寫滿的時候,又發生日誌切換,去寫聯機重做日誌組1,迴圈往復。
如果資料庫處於非歸檔模式,聯機重做日誌在切換時就會丟棄。 而在歸檔模式下,當發生日誌切換的時候, arch程序會把被切換的日誌進行歸檔。例如,當前使用聯機重做日誌1被寫滿時,發生日誌切換,開始寫聯機重做日誌2,歸檔模式下,聯機重做日誌1的內容會被拷貝到另一個指定目錄下。這個目錄被稱為歸檔目錄,拷貝的檔案被稱為歸檔重做檔案。
資料庫在歸檔模式下執行時才可以進行災難性恢復。(在生產環境中建議啟用歸檔模式,若實際環境中
執行穩定、沒有太多日誌產生且對實時性要求不高,可採用邏輯備份方式,保證資料庫安全)
注: Oracle提供的邏輯備份與恢復的命令有exp/imp,expdp/impdp,表級複製(create table
目標表 as select * from 源表)。Oracle邏輯備份沒有支援增量備份;對資料恢復也是非一致性的。
所以一般都是用於資料遷移的工作。
檢視歸檔模式:
方式一:
SELECT log_mode from v$database;
- 1
方式二:
在sqlplus中執行
archive log list
- 1
1.3 資料庫恢復
非歸檔日誌方式可避免例項故障,但無法避免介質故障,在此方式下,資料庫只能實施冷備份;
歸檔日誌方式產生歸檔日誌,使用者可以使用歸檔日誌完全恢復資料庫。
1.4 歸檔模式
(1)啟用
關閉資料庫:
shutdown immediate;
- 1
啟動資料庫到mount狀態(控制檔案已經開啟,使用者資訊仍然不能檢視):
startup mount;
- 1
配置歸檔模式並開啟資料庫:
alter database archivelog;
alter database open;
- 1
- 2
檢視歸檔狀態
archive log list
- 1
注: 存檔終點,即聯機日誌切換時,被拷貝到此目錄下
(2)檢視歸檔檔案被存放的路徑以及存放檔案的容量:
(3)手動進行日誌切換:
alter system switch logfile;
- 1
(4)log_archive_dest引數,檢視歸檔目錄路徑和狀態:
(5)修改歸檔目錄路徑 log_archive_dest_n
alter system set log_archive_dest_1='location=D:\software\arch1\';
- 1
修改歸檔目錄後,手動歸檔,原來的歸檔路徑不再儲存歸檔日誌:
(6)設定多個歸檔目錄,每個歸檔目錄儲存的內容是一樣的
alter system set log_archive_dest_2='location=D:\software\arch2\';
- 1
alter system set log_archive_dest_3='location=D:\software\arch3\';
- 1
(7)修改歸檔目錄狀態 defer (表示不可用) enable(表示可用)
alter system set log_archive_dest_state_1='defer';
- 1
(8)從10g開始 log_archive_dest被廢棄,只能使用log_archive_dest_n
1.5 關閉歸檔模式
調整資料庫從歸檔模式到非歸檔模式,按照上訴步驟再執行一遍:
shutdown immediate;
startup mount;
alter database noarchivelog;
alter database open;
- 1
- 2
- 3
- 4
二.日誌檔案組
2.1聯機日誌檔案組四種常見狀態:
current:表示當前使用的聯機日誌檔案組;
active:表示這個日誌檔案組中,所記錄的重做記錄所對應的記憶體中的髒資料塊還沒有被完全寫入資料檔案中,例項恢復時需要這組日誌;(database buffer cache做了修改但還沒有寫到datafile的資料,只要沒有寫入資料檔案,不管是否提交,都可以稱為髒資料)
inactive:表示這個日誌檔案組中,所記錄的重做記錄所對應的記憶體中的髒資料塊已經被寫入到資料檔案中,例項恢復時不需要這組日誌;
unused:表示還沒有被使用過
2.1聯機日誌檔案組操作
(1)給日誌檔案組增加檔案
alter database add logfile member 'D:\software\oracle\oradata\orcl\redo02a.log' to group 2;
- 1
對於日誌檔案組2,D:\SOFTWARE\ORACLE\ORADATA\ORCL\REDO02A.LOG和D:\SOFTWARE\ORACLE\ORADATA\ORCL\REDO02.LOG 檔案大小和內容將會完全相同
(2)建立日誌檔案組
不同日誌組的大小可以不同,但同一個日誌組內所有日誌檔案大小必須相同
alter database add logfile group 4 'D:\software\oracle\oradata\orcl\redo04.log' size 10m;
- 1
(3)清除聯機日誌檔案組
alter database clear logfile group 1;
- 1
清除聯機日誌組內所有成員,適用於日誌檔案組損壞了部分成員的情況,注意被清除的日誌檔案組必須視inactive狀態,清除後的日誌組狀態變為unused