記錄檔又稱重做記錄檔,記錄使用者對資料庫的修改,可用於資料庫恢複。實際應用中,一般對記錄檔鏡像,其中一個記錄檔發生損壞時,其他鏡像的記錄檔還可以用。記錄檔及其鏡像稱為記錄檔組(logfile group)
建立資料庫時,預設會建立三個記錄檔組,每個組只有一個記錄檔,最少不能少於2個記錄檔組。記錄檔組是迴圈使用,當第一組的空間使用完後,系統將轉到第二組,如果所有組的空間都填滿,將轉到第一個組,如果使用歸檔模式,則在覆蓋之前會將第一個組的日誌資訊先進行歸檔。記錄檔組數量太少的話,可能造成頻繁切換日誌組,造成效能降低。
一、建立記錄檔組
ALTER DATABASE database_name
ADD LOGFILE GROUP group_number
(file_name, file_name...)
SIZE size [REUSE];
樣本:
查詢當前的日誌組:
SQL> column member format a40
SQL> select group#, member from v$logfile;
GROUP# MEMBER
---------- ----------------------------------------
2 D:\ORACLE\TEST\REDO02.LOG
1 D:\ORACLE\TEST\REDO01.LOG
3 D:\ORACLE\TEST\REDO03.LOG
建立新的日誌組4(目錄d:\oracle\logfile需要事先建立):
SQL> alter database add logfile group 4
2 ('d:\oracle\logfile\redo01.log',
3 'd:\oracle\logfile\redo02.log')
4 size 20m;
資料庫已更改。
再查詢記錄檔組,新建立了日誌組4:
SQL> select group#, member from v$logfile;
GROUP# MEMBER
---------- ----------------------------------------
2 D:\ORACLE\TEST\REDO02.LOG
1 D:\ORACLE\TEST\REDO01.LOG
3 D:\ORACLE\TEST\REDO03.LOG
4 D:\ORACLE\LOGFILE\REDO01.LOG
4 D:\ORACLE\LOGFILE\REDO02.LOG
二、往記錄檔組添加新記錄檔
樣本:
SQL> alter database add logfile member
2 'd:\oracle\logfile\redo03.log'
3 to group 4;
資料庫已更改。
不需要指定記錄檔大小,因為記錄檔大小就是其所在日誌組的大小,且同一組中的記錄檔互為鏡像,對資料庫的操作記錄將同時在多個鏡像記錄檔中寫。
再查詢日誌組,新的記錄檔已經添加:
SQL> select group#, member from v$logfile;
GROUP# MEMBER
---------- ----------------------------------------
2 D:\ORACLE\TEST\REDO02.LOG
1 D:\ORACLE\TEST\REDO01.LOG
3 D:\ORACLE\TEST\REDO03.LOG
4 D:\ORACLE\LOGFILE\REDO01.LOG
4 D:\ORACLE\LOGFILE\REDO02.LOG
4 D:\ORACLE\LOGFILE\REDO03.LOG
已選擇6行。
三、刪除日誌群組成員
樣本:
SQL> alter database drop logfile member
2 'd:\oracle\logfile\redo03.log';
資料庫已更改。
刪除日誌群組成員時不需要指定日誌組,因為一個記錄檔只能屬於一個組,如果在一個組中添加已屬於其他組的記錄檔會報錯。
四、刪除日誌組
刪除日誌組時,需要先查看日誌組的狀態,如果當前正在使用(CURRENT或ACTIVE),則不能刪除。
查詢狀態:
SQL> select group#, members, status from v$log;
GROUP# MEMBERS STATUS
---------- ---------- ----------------
1 1 INACTIVE
2 1 INACTIVE
3 1 CURRENT
4 2 UNUSED
樣本:
刪除日誌組4:
SQL> alter database drop logfile group 4;
資料庫已更改。
再查詢,日誌組4已經不存在了
SQL> select group#, members, status from v$log;
GROUP# MEMBERS STATUS
---------- ---------- ----------------
1 1 INACTIVE
2 1 INACTIVE
3 1 CURRENT
嘗試刪除日誌組3會報錯:
SQL> alter database drop logfile group 3;
alter database drop logfile group 3
*
第 1 行出現錯誤:
ORA-01623: 日誌 3 是執行個體 test (線程 1) 的當前日誌 - 無法刪除
ORA-00312: 聯機日誌 3 線程 1: 'D:\ORACLE\TEST\REDO03.LOG'
如果要刪除的話,可以手工切換記錄檔組:
SQL> alter system switch logfile;
系統已更改。
切換記錄檔會產生檢查點,主要是等待DBWR寫髒資料到資料檔案中,寫完成之前日誌仍會處於ACTIVE狀態,等待一段時間DBWR寫完成後,再查看狀態變為INACTIVE,這時就可以刪除了。
SQL> select group#, members, status from v$log;
GROUP# MEMBERS STATUS
---------- ---------- ----------------
1 1 CURRENT
2 1 INACTIVE
3 1 INACTIVE
注意:記錄檔組數量至少為2個,如果當前只有2個,刪除的話會報錯。
五、查詢記錄檔資訊
通過V$LOG和V$LOGFILE查詢,上面已經做過樣本。