線上修改redo.log檔案的大小

coolhe發表於2011-03-09
1.檢視當前日誌組成員:
SQL> select member from v$logfile;

MEMBER
------------------------------------------------------
C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO01.LOG
C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO02.LOG
C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO03.LOG
2.檢視當前日誌組狀態:
SQL> select group#,members,bytes/1024/1024,status from v$log;

    GROUP#    MEMBERS BYTES/1024/1024 STATUS
---------- ---------- --------------- ----------------
         1          1              50 INACTIVE
         2          1              50 INACTIVE
         3          1              50 CURRENT
       
現有三個日誌組,每個組內有一個成員,每個成員的大小為50MB,現在想把此三個日誌組的成員大小都改為100MB ,步驟如下:

1、建立2個新的日誌組
SQL> alter database add logfile group 4 ('C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO04.LOG') size 100M;
SQL> alter database add logfile group 5 ('C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO05.LOG') size 100M;

2、切換當前日誌到新的日誌組
SQL> alter system switch logfile;
SQL> alter system switch logfile;
SQL> select group#,members,bytes/1024/1024,status from v$log;

    GROUP#    MEMBERS BYTES/1024/1024 STATUS
---------- ---------- --------------- ----------------
         1          1              50 ACTIVE
         2          1              50 ACTIVE
         3          1              50 ACTIVE
         4          1             100 CURRENT
         5          1             100 ACTIVE

3、刪除舊的日誌組
SQL> alter database drop logfile group 1;
SQL> alter database drop logfile group 2;
SQL> alter database drop logfile group 3;

4、作業系統下刪除原日誌組1、2、3中的檔案REDO01.LOG、REDO02.LOG、REDO03.LOG。

5、重建日誌組1、2、3
SQL> alter database add logfile group 1 ('C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO01.LOG') size 100M;
SQL> alter database add logfile group 2 ('C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO02.LOG') size 100M;
SQL> alter database add logfile group 3 ('C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO03.LOG') size 100M;

6、切換日誌組
SQL> alter system switch logfile;
SQL> alter system switch logfile;

7、刪除中間過渡用的日誌組4、5
SQL> alter database drop logfile group 4;
SQL> alter database drop logfile group 5;
SQL> select group#,status from v$log;

    GROUP# STATUS
---------- ----------------
         1 UNUSED
         2 UNUSED
         3 UNUSED
         4 INACTIVE
         5 CURRENT

8、到作業系統下刪除原日誌組4、5中的檔案

9、備份當前的最新的控制檔案
SQL> conn / as sysdba
SQL> alter database backup controlfile to trace resetlogs;

(注意:如果為安全考慮每個group可以多加幾個檔案)
==============================
跟redo logfile有關的其它資料庫引數    
1、log_buffer
   log_buffer是ORACLE SGA的一部分, 所有DML命令修改的資料塊先放在log_buffer裡, 如果滿了或者到了check_point時候通過lgwr後臺程式寫
   到redo logfile裡去。它不能設得太大,這樣在意外發生時會丟失很多改變過的資料。它最好不要大於512K或者128K*CPU個數。
我們可以用下面的SQL語句檢測log_buffer使用情況:       
   SQL> select rbar.name,rbar.value,re.name,re.value,(rbar.value*100)/re.value||'%' "radio"
from v$sysstat rbar,v$sysstat re
where rbar.name='redo buffer allocation retries'
and re.name='redo entries';
       這個比率小於1%才好,否則增加log_buffer的大小
2、log_checkpoint_interval
   Oracle8.1 版本後log_checkpoint_interval指的是兩次checkpoint之間作業系統資料塊的個數。
   checkpoint時Oracle把記憶體裡修改過的資料塊用DBWR寫到物理檔案,用LGWR寫到日誌和控制檔案。
   一般UNIX作業系統的資料塊為 512 bytes。
   從效能優化來說log_checkpoint_interval = redo logfile size bytes / 512 bytes
3、log_checkpoint_timeout
   Oracle8.1 版本後log_checkpoint_timeout指的是兩次checkpoint之間時間秒數。
   Oracle建議不用這個引數來控制,因為事務(transaction)大小不是按時間等量分佈的。
log_checkpoint_timeout = 0
log_checkpoint_timeout = 900

Redo Log Buffer
redo log buffer 可以迴圈使用,存放資料庫改變牽涉的資訊,其內部放的是redo entry。
redo entry存放的是INSERT, UPDATE, DELETE, CREATE, ALTER, DROP 等操作對資料庫的改變資訊,這些資訊在recovery的時候是很重要。這些redo entry
由oracle server程式從使用者記憶體放到redo buffer。

LGWR(Log writer)
LGWR(Log writer)是oracle啟動時候必須啟動的程式,它負責把redo log buffer中的redo entry寫到redo log檔案中。
在如下情況下寫檔案:
- redo log buffer 三分之一滿了
- 達到某時間點
- 在 DBWR w把修改的資料塊寫到資料檔案之前寫redo log file
- 事務commit的時候
- 在資料庫做歸檔redo log 檔案的時候

Redo Log file
redo log就是存放redo log 資訊的檔案了,至少有兩個redo log 組,oracle迴圈使用之。當然推薦有更多的redo log 組。既然是迴圈使用redo log,
必然會有一個log switch的過程。

log switch發生在:
- log file 已經寫滿了
- 使用了ALTER SYSTEM SWITCH LOGFILE 命令

在log switch 的時候自動會做checkpoint。

只要redo log組裡面有一個redo log file可以用,就能進行log switch。當然如果redo log file壞了,LGWR肯定會記錄到 trace和alert檔案.

關於redo log的設定
一般至少兩組redo log 檔案,
每組中的redo log檔案最好在不同的磁碟上,防止一起損壞。
每組中的redo log檔案必須大小一致,它們是同時修改的。
不同組的redo log檔案大小不一定一致。
每組的redo log檔案數目必須一致。


修改redo log的位置
- 看看當前的redo log檔案是不是正在使用,如果在使用如下命令
ALTER SYSTEM SWITCH LOGFILE;
- 把該檔案copy到你想要放到位置
- ALTER DATABASE RENAME FILE ’filename’ TO filename’

增加redo log 檔案
ALTER DATABASE [database]
ADD LOGFILE MEMBER
[ ’filename’ [REUSE]
[, ’filename’ [REUSE]]...
TO {GROUP integer
|(’filename’[, ’filename’]...)
}

刪除redo log 檔案
如果redo log 檔案是invalid狀態,可以刪除之
ALTER DATABASE [database] DROP LOGFILE MEMBER ’filename’[, ’filename’]...

相關資料字典
察看
v$log
v$logfile
v$log_history

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

相關文章