修改Oracle重做日誌檔案的大小

kingsql發表於2015-05-17

redo重做日誌檔案是Oracle資料庫的非常重要的組成部分。當日志檔案發生切換時(Log Switch),會觸發一個檢查點,那麼日誌檔案的大小就和檢查點的觸發頻率相關。更為頻繁的檢查點可以縮短資料庫的恢復時間,但是過於頻繁的檢查點卻會帶來效能負擔。所以如何合理地設定日誌檔案的大小也是資料庫最佳化的一個重要內容。而且,如果日誌檔案意外損失或丟失,那麼就會丟失資料,所以更大的日誌檔案可能意味著更多的資料損失風險。所以資料庫的任何一個調整都需要慎重。

即使是Oracle公司,在對於日誌的設定上,也是在不斷調整,在大小、切換、恢復時間、資料損失等問題上,Oracle也在試圖找到一個平衡點。一般來說,在實際生產環境中,把Log Switch的時間控制在半小時左右即可;對於通常的作業系統來說,日誌檔案的最大大小為2GB,在非常繁忙的業務系統中,由於受限於日誌大小,調整、最佳化都只是一個選擇而已。

Oracle版本 預設的redo log file大小(單位:MB)
8i 1
9iR2 100
10gR1 10
10gR2 50
11g 50








     以通用的Oracle10.2.0.4版本為例,Oracle建庫的時候自動建立3個日誌檔案組,每個日誌檔案組包含一個日誌檔案,初始大小50M,在實際執行過程中可能切換頻繁導致效能下降,這時候可以增大其大小,方法如下:加入新的大的日誌檔案,然後刪掉舊的小的日誌檔案。例如,現有三個日誌組,每個組內有一個成員,每個成員的大小為50MB,現在要把此三個日誌組的成員大小都改為100MB,下面我將演示一下操作過程。
1.檢視現有日誌組及其檔案大小;

點選(此處)摺疊或開啟

  1. SQL>
  2. SQL> select group#,sequence#,status,bytes/1024/1024 from v$log;

  3.     GROUP# SEQUENCE# STATUS BYTES/1024/1024
  4. ---------- ---------- ---------------- ---------------
  5.          1 7 INACTIVE 50
  6.          2 8 INACTIVE 50
  7.          3 9 CURRENT 50

  8. SQL>
2.建立2個新的日誌組4,5,大小設定為100M

點選(此處)摺疊或開啟

  1. SQL>
  2. SQL> alter database add logfile group 4(\'/u01/app/oracle/oradata/HOEGH/redo04.log\') size 100M;

  3. Database altered.

  4. SQL> alter database add logfile group 5(\'/u01/app/oracle/oradata/HOEGH/redo05.log\') size 100M;

  5. Database altered.

  6. SQL>
3.切換當前日誌到新的日誌組;

點選(此處)摺疊或開啟

  1. SQL>
  2. SQL> alter system checkpoint;

  3. System altered.

  4. SQL> alter system switch logfile;

  5. System altered.

  6. SQL> alter system checkpoint;

  7. System altered.

  8. SQL> alter system switch logfile;

  9. System altered.

  10. SQL>
4.刪除舊的日誌組1,2,3,並在作業系統下刪除對應的物理檔案;

點選(此處)摺疊或開啟

  1. SQL>
  2. SQL> alter database drop logfile group 1;

  3. Database altered.

  4. SQL> alter database drop logfile group 2;

  5. Database altered.

  6. SQL> alter database drop logfile group 3;

  7. Database altered.

  8. SQL>
5.重建日誌組1,2,3,大小設定為100M;

點選(此處)摺疊或開啟

  1. SQL>
  2. SQL> alter database add logfile group 1(\'/u01/app/oracle/oradata/HOEGH/redo01.log\') size 100M;

  3. Database altered.

  4. SQL> alter database add logfile group 2(\'/u01/app/oracle/oradata/HOEGH/redo02.log\') size 100M;

  5. Database altered.

  6. SQL> alter database add logfile group 3(\'/u01/app/oracle/oradata/HOEGH/redo03.log\') size 100M;

  7. Database altered.

  8. SQL>
6.切換日誌組;

點選(此處)摺疊或開啟

  1. SQL>
  2. SQL> alter system checkpoint;

  3. System altered.

  4. SQL> alter system switch logfile;

  5. System altered.

  6. SQL> alter system checkpoint;

  7. System altered.

  8. SQL> alter system switch logfile;

  9. System altered.

  10. SQL> alter system checkpoint;

  11. System altered.

  12. SQL> alter system switch logfile;

  13. System altered.

  14. SQL>
7.刪除中間過渡用的日誌組4,5,並在作業系統下刪除對應的物理檔案;

點選(此處)摺疊或開啟

  1. SQL>
  2. SQL> alter database drop logfile group 4;

  3. Database altered.

  4. SQL> alter database drop logfile group 5;

  5. Database altered.
8.備份當前的最新的控制檔案;

點選(此處)摺疊或開啟

  1. SQL> alter database backup controlfile to trace resetlogs;

  2. Database altered.

  3. SQL>
9.確認修改結果是否符合預期;

點選(此處)摺疊或開啟

  1. SQL>
  2. SQL> select group#,sequence#,status,bytes/1024/1024 from v$log;

  3.     GROUP# SEQUENCE# STATUS BYTES/1024/1024
  4. ---------- ---------- ---------------- ---------------
  5.          1 12 INACTIVE 100
  6.          2 13 INACTIVE 100
  7.          3 14 CURRENT 100

  8. SQL>

     另外,介紹一下
重做日誌的狀態,最常見的狀態有以下幾種:CURRENT,ACTIVE,INACTIVE,UNUSED

CURRENT

CURRENT指的是當前日誌,該日誌檔案是活動的,當前正在被使用的,在進行崩潰恢復時,Current的日誌檔案是必須的。

ACTIVE

ACTIVE的日誌是活動的非當前日誌,該日誌可能已經完成歸檔也可能沒有歸檔,活動的日誌檔案在Crash恢復時會被用到。

ACTIVE狀態意味著,檢查點尚未完成,如果日誌檔案迴圈使用再次到達該檔案,資料庫將處於等待的停頓狀態。

引起Checkpoint incomplete可能有以下多種原因:

l  日誌檔案過小,切換過於頻繁;

l  日誌組太少,不能滿足正常事務量的需要;

l  日誌檔案所在磁碟I/O存在瓶頸,導致寫出緩慢,阻塞資料庫正常執行;

l  由於資料檔案磁碟I/O瓶頸,DBWR寫出過於緩慢;

l  由於事務量巨大,DBWR負荷過高,不堪重負。

針對不同的原因,可以從不同角度著手解決問題:

l  適當增加日誌檔案大小;

l  適當增加日誌組數;

l  使用更快速磁碟儲存日誌檔案(如採用更高速轉速磁碟;使用RAID10而不是RAID5等方式);

l  改善磁碟I/O效能;

INACTIVE

INACTIVE的日誌是非活動日誌,該日誌在例項恢復時不再需要,但是在介質恢復時可能會用到。INACTIVE狀態的日誌可能沒有被歸檔。如果資料庫啟動在歸檔模式,在未完成歸檔之前,日誌檔案也不允許被覆蓋,這時候活動程式會處於log file switcharchiving needed)等待之中。

UNUSED

    UNUSED是指該日誌從未被寫入,這類日誌可能是剛被新增到資料庫或者在RESETLOGS之後被重置。被使用之後,該狀態會被改變。







來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28389881/viewspace-1658072/,如需轉載,請註明出處,否則將追究法律責任。

相關文章