我們知道Oracle裡聯機日志文件(Online redo logfile)循環記錄了數據庫所有的事務(transaction)
它的大小
個數和存儲位置對數據庫性能和恢復也是有重要影響的
本文總結一下關於redo logfile的一些 內容
一redo logfile的簡單介紹 它一般有大小相同的一組文件構成
我們可以查看數據庫視圖v$logfile知道它的個數和存儲位置
SVRMGRL> select * from v$logfile;
查看數據庫視圖v$log知道它當前的狀態
SVRMGRL> select * from v$log;
一個時間只有一組logfile group是工作狀態(current)
redo logfile滿了後會自動切換到下一個logfile group
如果數據庫是歸檔方式同時寫到歸檔日志文件
這些文件不能用常規的文本編輯器查看
它以特定的格式存放
只有數據庫或者專門的軟件可以看懂它
redo logfile的最大數目是在創建數據庫時指明的
如果你想知道當前數據庫redo logfile的最大數值是多少
重新生成控制文件
就可以知道
SVRMGRL>alter database backup controlfile to trace;
這條語句會在$ORACLE_BASE/admin/dbname/udump/路徑下生成當前時間的一個*
trc文件
也就是數據庫的控制文件
用文本編輯器
即可看到數據庫創建時用的一些參數
包括redo logfile的最大數(maxlogfiles)
二 redo logfile的大小和位置對數據庫性能的影響 如果用ORACLE的安裝向導創建的典型數據庫
它的redo logfile大小為
K
這基本上是不能滿足典型的OLTP應用的
在數據庫日志文件(alert_orasid
log)裡會記錄著頻繁的log switch
ORACLE推薦log switch時間最好在
分鐘之間
所以redo logfile的大小由數據庫DML操作數據的大小決定其最佳大小
redo logfile最好有多個存儲位置
多組成員
使數據庫恢復時有更多的選擇
典型的OLTP應用
redo logfile大小可以為
M
當然繁忙的數據庫
例如當今的門戶網站
這個值可以達到
M以上
如果你發現當前數據庫日志文件裡log switch的時間偏大或者偏小
不要緊
ORACLE提供了在數據庫聯機狀態來改變redo logfile大小的方法
三在聯機狀態改變redo logfile大小的方法 假如原來有
個小的redo log file
下面是UNIX環境下的一個例子:
第一步: 往數據庫添加三個大的redo logfile
SVRMGRL>ALTER DATABASE ADD LOGFILE GROUP
(
/opt/oradata/app/redo
log
/ora_bak/oradata
/redolog/redo
log
) size
M reuse;
SVRMGRL>ALTER DATABASE ADD LOGFILE GROUP
(
/opt/oradata/app/redo
log
/ora_bak/oradata
/redolog/redo
log
) size
M reuse;
SVRMGRL>ALTER DATABASE ADD LOGFILE GROUP
(
/opt/oradata/app/redo
log
/ora_bak/oradata
/redolog/redo
log
) size
M reuse;
第二步: 手工地做log switch
使新建的redo logfile起作用
SVRMGRL>alter system switch logfile;
此操作可以執行一到幾次
使舊的redo logfile成invalid狀態
第三步: 刪除原來舊的redo logfile
SVRMGRL>alter database drop logfile group
;
SVRMGRL>alter database drop logfile group
;
SVRMGRL>alter database drop logfile group
;
四跟redo logfile有關的其它數據庫參數 log_buffer
log_buffer是ORACLE SGA的一部分
所有DML命令修改的數據塊先放在log_buffer裡
如果滿了或者到 了check_point時候通過lgwr後台進程寫到redo logfile裡去
它不能設得太大
這樣在意外發生時會丟失很多改變過的數據
它最好不要大於
K或者
K*CPU個數
我們可以用下面的SQL語句檢測log_buffer使用情況:
SVRMGRL> select rbar
name
rbar
value
re
name
re
value
(rbar
value*
)/re
value||
%
radio
from v$sysstat rbar
v$sysstat re
where rbar
name=
redo buffer allocation retries
and re
name=
redo entries
;
這個比率小於
%才好
否則增加log_buffer的大小
log_checkpoint_interval
Oracle
版本後log_checkpoint_interval指的是兩次checkpoint之間操作系統數據塊的個數
checkpoint時Oracle把內存裡修改過的數據塊用DBWR寫到物理文件
用LGWR寫到日志和控制文件
一般UNIX操作系統的數據塊為
bytes
從性能優化來說 log_checkpoint_interval = redo logfile size bytes /
bytes
log_checkpoint_timeout
Oracle
版本後log_checkpoint_timeout指的是兩次checkpoint之間時間秒數
Oracle建議不用這個參數來控制
因為事務(transaction)大小不是按時間等量分布的
log_checkpoint_timeout =
log_checkpoint_timeout =
From:http://tw.wingwit.com/Article/program/Oracle/201311/18003.html