1. 程式人生 > >Oracle重做日誌文件

Oracle重做日誌文件

eset div 一個 順序 新增 後臺 記錄 誤刪 lgwr

http://blog.csdn.net/leshami/article/details/5749556

一、Oracle中的幾類日誌文件

  • Redo log files -->聯機重做日誌
  • Archive log files -->歸檔日誌
  • Alert log files -->告警日誌
  • Trace files -->跟蹤日誌
  • user_dump_dest -->用戶跟蹤日誌
  • backupground_dump_dest -->進程跟蹤日誌

二、聯機重做日誌的規劃管理

1.聯機重做日誌

記錄了數據的所有變化(DML,DDL或管理員對數據所作的結構性更改等)提供恢復機制(對於意外刪除或宕機利用日誌文件實現數據恢復)可以被分組管理

2.聯機重做日誌組

由一個或多個相同的聯機日誌文件組成一個聯機重做日誌組至少兩個日誌組,每組一個成員(建議每組兩個成員,分散放開到不同的磁盤),由LGWR後臺進程同時將日誌內容寫入到一個組的所有成員

LGWR的觸發條件

  • 在事務提交的時候(COMMIT)
  • Redo Log Buffer 三分之一滿
  • Redo Log Buffer 多於一兆的變化記錄
  • 在DBWn寫入數據文件之前

3.聯機重做日誌成員

重做日誌組內的每一個聯機日誌文件稱為一個成員

一個組內的每一個成員具有相同的日誌序列號(log sequence number),且成員的大小相同

每次日誌切換時,Oracle服務器分配一個新的LSN號給即將寫入日誌的日誌文件組

LSN號用於唯一區分每一個聯機日誌組和歸檔日誌

處於歸檔模式的聯機日誌,LSN號在歸檔時也被寫入到歸檔日誌之中

4.日誌文件的工作方式

日誌文件采用按順序循環寫的方式

當一組聯機日誌組寫滿,LGWR則將日誌寫入到下一組,當最後一組寫滿則從第一組開始寫入

寫入下一組的過程稱為日誌切換

切換時發生檢查點過程

檢查點的信息同時寫入到控制文件

5.聯機日誌文件的規劃

總原則

分散放開,多路復用

日誌所在的磁盤應當具有較高的I/O

一般日誌組大小應滿足自動切換間隔至少15-20分鐘左右業務需求

建議使用rdo結尾的日誌文件名,避免誤刪日誌文件。如redo1.rdo,redo2.rdo

規劃樣例

Redo Log Group1 Redo Log Group2 Redo Log Group3

Member1 Member1 Member1 -->Physical Disk 1

Member2 Member2 Member2 -->Physical Disk 2

Member3 Member3 Member3 -->Physical Disk 3

6.日誌切換和檢查點切換

ALTER SYSTEM SWITCH LOGFILE; --強制手動切換

ALTER SYSTEM CHECKPOINT;

強制設置檢查點間隔

ALTER SYSTEM SET FAST_START_MTTR_TARGET = n

7.添加日誌文件組

ALTER DATABASE ADD LOGFILE [GROUP n]

(‘$ORACLE_BASE/oradata/u01/logn1.rdo‘,

‘$ORACLE_BASE/oradata/u01/logn2.rdo‘)

SIZE mM;

8.添加日誌成員

ALTER DATABASE ADD LOGFILE MEMBER

‘$ORACLE_BASE/oradata/u01/logn1.rdo‘ TO GROUP 1,

‘$ORACLE_BASE/oradata/u01/logn2.rdo‘ TO GROUP 2;

9.刪除日誌成員

不能刪除組內的唯一一個成員

不能刪除處於active 和current 狀態組內的成員

刪除處於active 和current 狀態組內的成員,應使用日誌切換使其處於INACTIVE狀態後再刪除

對於組內如果一個成員為NULL 值,一個為INVALID,且組處入INACTIVE,僅能刪除INVALID狀態成員

刪除日誌成員,物理文件並沒有真正刪除,需要手動刪除

刪除日誌文件後,控制文件被更新

對於處於歸檔模式下的數據庫,刪除成員時確保日誌已被歸檔,查看v$log視圖獲得歸檔信息

ALTER DATABASE DROP LOGFILE MEMBER ‘$ORACLE_BASE/oradata/u01/logn1.rdo‘

10.刪除日誌組

一個實例至少需要兩個聯機日誌文件組

活動或當前的日誌組不能被刪除

組內成員狀態有NULL 值或INVALID狀態並存,組不可刪除

日誌組被刪除後,物理文件需要手動刪除(對於非OMF)

ALTER DATABASE DROP LOGFILE GROUP n

11.日誌的重定位及重命名

所需權限

ALTER DATABASE 系統權限

復制文件到目的位置操作系統權限(寫權限)

CURRENT狀態組內的成員不能被重命名

建議該行為之前備份數據庫

重命名或重定位之後建議立即備份控制文件

重定位及重命名的兩種方法

添加一個新成員到日誌組,然後刪除一個舊的成員

使用ALTER DATABASE RENAME FILE 命令(不區分歸檔與非歸檔模式)

復制聯機日誌文件到新路徑:ho cp <oldfile> <newfile>

執行ALTER DATABASE RENAME FILE ‘<oldfile>‘ TO ‘<newfile>‘

對於處於CURRENT狀態的需要改名且不切換的情況下

辦法是切換到MOUNT狀態下再執行上述操作

12.清空日誌文件組

ALTER DATABASE CLEAR LOGIFLE GROUP n

ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP n --使用unarchived 避免歸檔

13. 查看Oracle日誌切換頻率

column h0 format 999
column h1 format 999
column h2 format 999
column h3 format 999
column h4 format 999
column h5 format 999
column h6 format 999
column h7 format 999
column h8 format 999
column h9 format 999
column h10 format 999
column h11 format 999
column h12 format 999
column h13 format 999
column h14 format 999
column h15 format 999
column h16 format 999
column h17 format 999
column h18 format 999
column h19 format 999
column h20 format 999
column h21 format 999
column h22 format 999
column h23 format 999
column avg format 999.99
column day format a6

SELECT TRUNC (first_time) "Date", TO_CHAR (first_time, Dy) "Day", COUNT (1) "Total",
SUM (DECODE (TO_CHAR (first_time, hh24), 00, 1, 0)) h0,
SUM (DECODE (TO_CHAR (first_time, hh24), 01, 1, 0)) "h1",
SUM (DECODE (TO_CHAR (first_time, hh24), 02, 1, 0)) "h2",
SUM (DECODE (TO_CHAR (first_time, hh24), 03, 1, 0)) "h3",
SUM (DECODE (TO_CHAR (first_time, hh24), 04, 1, 0)) "h4",
SUM (DECODE (TO_CHAR (first_time, hh24), 05, 1, 0)) "h5",
SUM (DECODE (TO_CHAR (first_time, hh24), 06, 1, 0)) "h6",
SUM (DECODE (TO_CHAR (first_time, hh24), 07, 1, 0)) "h7",
SUM (DECODE (TO_CHAR (first_time, hh24), 08, 1, 0)) "h8",
SUM (DECODE (TO_CHAR (first_time, hh24), 09, 1, 0)) "h9",
SUM (DECODE (TO_CHAR (first_time, hh24), 10, 1, 0)) "h10",
SUM (DECODE (TO_CHAR (first_time, hh24), 11, 1, 0)) "h11",
SUM (DECODE (TO_CHAR (first_time, hh24), 12, 1, 0)) "h12",
SUM (DECODE (TO_CHAR (first_time, hh24), 13, 1, 0)) "h13",
SUM (DECODE (TO_CHAR (first_time, hh24), 14, 1, 0)) "h14",
SUM (DECODE (TO_CHAR (first_time, hh24), 15, 1, 0)) "h15",
SUM (DECODE (TO_CHAR (first_time, hh24), 16, 1, 0)) "h16",
SUM (DECODE (TO_CHAR (first_time, hh24), 17, 1, 0)) "h17",
SUM (DECODE (TO_CHAR (first_time, hh24), 18, 1, 0)) "h18",
SUM (DECODE (TO_CHAR (first_time, hh24), 19, 1, 0)) "h19",
SUM (DECODE (TO_CHAR (first_time, hh24), 20, 1, 0)) "h20",
SUM (DECODE (TO_CHAR (first_time, hh24), 21, 1, 0)) "h21",
SUM (DECODE (TO_CHAR (first_time, hh24), 22, 1, 0)) "h22",
SUM (DECODE (TO_CHAR (first_time, hh24), 23, 1, 0)) "h23", to_char(ROUND (COUNT (1) / 24, 2),fm99999999990.00) "Avg"
FROM gv$log_history
WHERE first_time >= trunc(SYSDATE) - 30
and thread# = inst_id
GROUP BY TRUNC (first_time), TO_CHAR (first_time, Dy)
ORDER BY 1 DESC;

Date            Day     Total    H0   h1   h2   h3   h4     h5   h6   h7    h8   h9  h10  h11  h12    h13  h14  h15  h16  h17  h18  h19  h20    h21  h22  h23 Avg
------------------- ------ ---------- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---------------------------------------------
2017-09-14 00:00:00 Thu         6     6    0    0    0    0      0    0    0     0    0    0    0    0      0    0    0     0    0    0    0    0      0    0    0 0.25
2017-09-13 00:00:00 Wed         4     0    0    0    0    0      0    0    0     0    0    0    0    0      0    0    0     0    0    0    0    4      0    0    0 0.17

14. 查看與日誌有關的動態性能視圖

V$LOG

V$LOGFILE

V$LOG中STATUS的狀態值

UNUSED: 從未對該聯機日誌寫入任何內容,一般為新增加聯機日誌文件或是使用resetlog後的狀態

CURRENT:當前重做日誌文件,表示該重做日誌文件為活動狀態,能夠被打開和關閉

ACTIVE:處於活動狀態,不屬於當前日誌,崩潰恢復需要該狀態,可用於塊恢復,可能歸檔,也可能未歸檔

CLEARING:表示在執行alter database clear logfile命令後正將該日誌重建為一個空日誌,重建後狀態變為unused

CLEARING_CURRENT:當前日誌處於關閉線程的清除狀態。如日誌某些故障或寫入新日誌標頭時發生I/O錯誤

INACTIVE:實例恢復不在需要聯機重做文件日誌組,可能歸檔也可能未歸檔

V$LOGFILE中STATUS的狀態值

INVALID :表明該文件不可訪問

STALE :表明文件內容不完全

DELETED : 表明該文件不再使用

NULL :表明文件正在使用

Oracle重做日誌文件