今天發現Oracle資料庫很慢,看到大量進程在等待log file switch (checkpoint incomplete),記錄檔的使用方式如下:
SYS@TEST15>select group#,sequence#,bytes/1024/1024 "BYTES(M)",members,archived,status from v$log;
GROUP# SEQUENCE# BYTES(M) MEMBERS ARC STATUS
---------- ---------- ---------- ---------- --- ----------------
1 205 100 2 YES ACTIVE
2 206 100 2 NO CURRENT
3 204 100 2 YES ACTIVE
SYS@TEST15>select group#,status,type,member from v$logfile where type='ONLINE' order by type,group#;
GROUP# STATUS TYPE MEMBER
---------- ------- ------- ------------------------------------------------------------
1 ONLINE /data/oradata/orcl/data/redo01a.log
1 ONLINE /home/oracle/data/orcl/redo01b.log
2 ONLINE /data/oradata/orcl/data/redo02a.log
2 ONLINE /home/oracle/data/orcl/redo02b.log
3 ONLINE /data/oradata/orcl/data/redo03a.log
3 ONLINE /home/oracle/data/orcl/redo03b.log
從上面可以看出,所有的記錄檔都是ACTIVE或CURRENT狀態,這說明記錄檔太小,需增加其大小。
但線上重做日誌不可以直接RESIZE,需要通過如下方式:
1)添加新的記錄檔組,定義它的大小
SYS@TEST15>alter database add logfile group 4 ('/data/oradata/orcl/data/redo04a.log','/home/oracle/data/orcl/redo04b.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以此類推。
最後,還要記得到作業系統上把記錄檔刪除。
推薦閱讀:
Oracle 監聽記錄檔過大,導致監聽無法啟動
Oracle當前聯機日誌組損壞的處理
Oracle日誌挖掘
Oracle 聯機重做記錄檔(online redo log file) 詳述
Oracle重做記錄檔版本不一致問題處理