??? 重做日志文件(redo log file) 對于Oracle數(shù)據(jù)庫至關重要。它們是數(shù)據(jù)庫的事務日志。通常只用于恢復,不過也可以用于以下工作:
???? 1.系統(tǒng)崩潰后的實例恢復;
???? 2.通過備份恢復數(shù)據(jù)文件之后恢復介質;
???? 3.備用(standby)數(shù)據(jù)庫處理;
?
一.簡介
?
Oracle 引入重做日志的目的:數(shù)據(jù)庫的恢復。
?
Oracle 相關進程:重做日志寫進程( LGWR )。
?
重做日志性質:聯(lián)機日志文件, oracle 服務器運行時需要管理它們。
?
相關數(shù)據(jù)字典: v$log ; v$logfile 。
?
操作者權限:具有 sys 用戶或 system 用戶權限。
?
二.獲取重做日志的信息
?
1. 獲得數(shù)據(jù)庫中有多少個重做日志組,每個組中有多少個成員、日志大小及狀態(tài)。
?
SELECT GROUP#,SEQUENCE#,MEMBERS,BYTES,STATUS,ARCHIVED
?
FROM V$LOG;
?
結果如下圖:
?
?
?
?
狀態(tài)列( status )所顯示常用狀態(tài)的含義:
?
-
inactive :表示實例恢復已不再需要這組聯(lián)機重做日志組了。
-
active :表示該組是活動的但不是當前組,實例恢復時需要這組日志。
-
current :表示該組日志是當前組,該聯(lián)機重做日志組是活動的。
-
unused :表示該日志組從未寫過,是重做日志剛剛添加到狀態(tài)。
?
2. 獲得數(shù)據(jù)庫中每個重做日志組的成員所在目錄、文件名及狀態(tài)。
?
??? SELECT GROUP#,STATUS,TYPE,MEMBER
FROM V$LOGFILE;
?
結果如下圖:
?
?
?
?
狀態(tài)列( status )所顯示常用狀態(tài)的含義:
?
-
空白:表示該文正在使用。
-
stale :表示該文件中的內容是不完全的。
-
invalid :表示該文件是不可以被訪問的。
-
deleted :表示該文件已不在有用了。
?
?
?
三.日志切換
?
聯(lián)機重做日志文件是以一種循環(huán)的方式來使用,當一組聯(lián)機重做日志文件被寫滿時, LGWR 將開始寫下一組日志文件,這被稱為日志切換。可以在任何時候強制性的進行重做日志切換操作。
?
強制重做日志切換命令: ALTER SYSTEM SWITCH LOGFILE;
?
日志切換前,正在寫的日志組是 3 :
?
?
執(zhí)行命令 ALTER SYSTEM SWITCH LOGFILE 后,在寫日志組變?yōu)? 1 :
?
?
?
四.添加和刪除聯(lián)機重做日志文件組
?
1. 添加聯(lián)機重做日志組
?
創(chuàng)建新的重做日志組 SQL 命令格式:
?
ALTER DATABASE [ 數(shù)據(jù)庫名 ]
?
ADD LOGFILE [GROUP 正整數(shù) ] 文件名
?
[, [GROUP 正整數(shù) ] 文件名 ] ……]
?
?
?
創(chuàng)建新的重做日志組例子:
?
ALTER DATABASE ADD LOGFILE ('d:\logfile\redo 04a.log','e:\logfile\redo04b.log')
?
SIZE 15M;
?
?
?
注意: 由于沒有使用 GROUP 選項,所有 oracle 系統(tǒng)會自動地在最大的組號上加 1 來產(chǎn)生新的組號。
?
顯示結果如下,創(chuàng)建一組新的日志組,組號是 4 ,有兩個成員,成員大小為 15M 。
?
SELECT GROUP#,SEQUENCE#,MEMBERS,BYTES,STATUS,ARCHIVED
?
FROM V$LOG;
?
?
?
?
下面的結果顯示了新建日志的文件路徑和文件名。
?
SELECT GROUP#,STATUS,TYPE,MEMBER
?
FROM V$LOGFILE;
?
?
?
2. 刪除聯(lián)機重做日志組
?
刪除重做日志組 SQL 命令格式:
?
ALTER DATABASE [ 數(shù)據(jù)庫名 ]
?
DROP LOGFILE {GROUP 正整數(shù) | (‘ 文件名 ’[, ‘ 文件名 ’]……)}
?
[,{GROUP 正整數(shù) | (‘ 文件名 ’[, ‘ 文件名 ’]……)}]…….
?
?
?
刪除重做日志組例子:
?
ALTER DATABASE DROP LOGFILE GROUP 4;
?
?
?
顯示結果如下,可以看出 GROUP 為 4 的日志組已經(jīng)不存在。
?
SELECT GROUP#,SEQUENCE#,MEMBERS,BYTES,STATUS,ARCHIVED
?
FROM V$LOG;
?
?
SELECT GROUP#,STATUS,TYPE,MEMBER
?
FROM V$LOGFILE;
?
?
?
?
注意:
?
當前的重做日志組不能刪除。如果要刪除,先使用日志強制切換命令 ALTER SYSTEM SWITCH LOGFILE 進行切換。當一組重做日志被刪除后,它的操作系統(tǒng)文件依然存在,只能用操作系統(tǒng)命令刪除,否則會留下一些無用的垃圾文件。
?
?
?
五.添加和刪除聯(lián)機重做日志成員(文件)
?
1. 添加聯(lián)機重做日志成員
?
創(chuàng)建新的重做日志成員(文件) SQL 格式:
?
ALTER DATABASE [ 數(shù)據(jù)庫名 ]
?
ADD LOGFILE MEMBER
?
[ ‘ 文件名 ’ [REUSE] [, ’ 文件名 ’ [REUSE]]]……
?
TO {GROUP 正整數(shù) | (‘ 文件名 ’[, ‘ 文件名 ’]……)}
?
?
?
添加重做日志成員例子:
?
ALTER DATABASE ADD LOGFILE MEMBER
?
'd:\logfile\redo01b.log' TO GROUP 1,
?
'd:\logfile\redo02b.log' TO GROUP 2,
?
'e:\logfile\redo03b.log' TO GROUP 3;
?
?
?
顯示結果如下,可以看出每個日志組增加了一個日志成員,有原來的 2 個增加到 3 個。
?
SELECT GROUP#,SEQUENCE#,MEMBERS,BYTES,STATUS,ARCHIVED
?
FROM V$LOG;
?
?
下面的結果,顯示了新增日志文件的路徑和文件名。
?
SELECT GROUP#,STATUS,TYPE,MEMBER
?
FROM V$LOGFILE;
?
?
?
?
2. 刪除聯(lián)機重做日志成員
?
刪除聯(lián)機重做日志成員(文件) SQL 命令格式:
?
ALTER DATABASE [ 數(shù)據(jù)庫 ]
?
DROP LOGFILE MEMBER ‘ 文件名 ’ [, ‘ 文件名 ’] ……
?
?
?
刪除重做日志成員例子:
?
ALTER DATABASE DROP LOGFILE MEMBER 'd:\logfile\redo02b.log';
?
?
?
結果顯示如下,可以看出刪除了組 2 一個日志成員。
?
SELECT GROUP#,SEQUENCE#,MEMBERS,BYTES,STATUS,ARCHIVED
?
FROM V$LOG;
?
?
SELECT GROUP#,STATUS,TYPE,MEMBER
?
FROM V$LOGFILE;
?
?
?
?
注意:
?
當前的重做日志組不能刪除,否則會報如下錯誤:
?
?
?
?
如果要刪除,應該先使用 ALTER SYSTEM SWITCH LOGFILE 命令進行切換。
?
如果數(shù)據(jù)庫運行在歸檔模式,而要刪除的成員還沒有被歸檔完,那也無法刪除它。
?
當一個重做日志成員被刪除后,它的操作系統(tǒng)文件依然存在,只能用操作系統(tǒng)命令刪除。
更多文章、技術交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
