熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

簡析REDO LOGFILE

2013-11-13 16:01:05  來源: Oracle 

  我們知道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_orasidlog)裡會記錄著頻繁的log switchORACLE推薦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/redolog
  /ora_bak/oradata/redolog/redolog) size M reuse;
  
  SVRMGRL>ALTER DATABASE ADD LOGFILE GROUP
  (/opt/oradata/app/redolog
  /ora_bak/oradata/redolog/redolog) size M reuse;
  
  SVRMGRL>ALTER DATABASE ADD LOGFILE GROUP
  (/opt/oradata/app/redolog
  /ora_bak/oradata/redolog/redolog) 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 rbarnamerbarvaluerenamerevalue(rbarvalue*)/revalue||% radio
  from v$sysstat rbarv$sysstat re
  where rbarname=redo buffer allocation retries
  and rename=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/17680.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.