Oracle重做日誌文件
一.簡介
Oracle引入重做日誌的目的:數據庫的恢復。
Oracle相關進程:重做日誌寫進程(LGWR)。
重做日誌性質:聯機日誌文件,oracle服務器運行時需要管理它們。
相關數據字典:v$log ; v$logfile 。
操作者權限:具有sys用戶或system用戶權限。
二.獲取重做日誌的信息
1. 獲得數據庫中有多少個重做日誌組,每個組中有多少個成員、日誌大小及狀態。
SELECT GROUP#,SEQUENCE#,MEMBERS,BYTES,STATUS,ARCHIVED FROM V$LOG;
結果如下圖:
狀態列(status)所顯示常用狀態的含義:
-
inactive:表示實例恢復已不再需要這組聯機重做日誌組了。
-
active:表示該組是活動的但不是當前組,實例恢復時需要這組日誌。
-
current:表示該組日誌是當前組,該聯機重做日誌組是活動的。
-
unused:表示該日誌組從未寫過,是重做日誌剛剛添加到狀態。
2. 獲得數據庫中每個重做日誌組的成員所在目錄、文件名及狀態。
SELECT GROUP#,STATUS,TYPE,MEMBER FROM V$LOGFILE;
結果如下圖:
狀態列(status)所顯示常用狀態的含義:
-
空白:表示該文正在使用。
-
stale:表示該文件中的內容是不完全的。
-
invalid:表示該文件是不可以被訪問的。
-
deleted:表示該文件已不在有用了。
三.日誌切換
聯機重做日誌文件是以一種循環的方式來使用,當一組聯機重做日誌文件被寫滿時,LGWR將開始寫下一組日誌文件,這被稱爲日誌切換。可以在任何時候強制性的進行重做日誌切換操作。
強制重做日誌切換命令:ALTER SYSTEM SWITCH LOGFILE;
日誌切換前,正在寫的日誌組是3:
執行命令ALTER SYSTEM SWITCH LOGFILE 後,在寫日誌組變爲1:
但在線重做日誌不可以直接RESIZE,需要通過如下方式:
1)添加新的日誌文件組,定義它的大小
SYS@TEST15>alter database add logfile group 4 ('/data/oradata/orcl/data/redo04.log') size 500M reuse;
Database altered.
2)持續切換日誌,一直到Group 1的status=inactive,且archived=yes(如果爲歸檔的話),如下所示:
SYS@TEST15>ALTER SYSTEM SWITCH LOGFILE;
SYS@TEST15>alter system checkpoint;
SYS@TEST15>select group#,sequence#,bytes/1024/1024 "BYTES(M)",members,archived,status from v$log where group#=1;
GROUP# SEQUENCE# BYTES(M) MEMBERS ARC STATUS
---------- ---------- ---------- ---------- --- ----------------
1 214 100 2 YES INACTIVE
3)刪除Group 1
SYS@TEST15>alter database drop logfile group 1;
Database altered.
這樣,我們就完成了用更大的Group 4取代原有的Group 1,至於Group 2, Group 3以此類推。
最後,還要記得到操作系統上把日誌文件刪除。