oracle中的redo概念


 
oracle世界有3種數據:undo,redo和data
 
redo日志的作用:
1.記錄oracle數據庫的變化
2.可以避免數據提交后直接寫入數據文件
3.實例恢復和介質恢復       --這里是兩種恢復,要搞清楚
 
redo是按照線程來組織的
redo機制是私有的
rac中,redo是共享的
借助redo,進行數據前滾
不管怎么回復,首先是redo,redo完了才是undo
 
redo記錄了數據庫的  所有歷史變更,不包含參數文件和控制文件的變更
因為參數文件是啟動數據庫,先是nomount啟動參數文件,參數文件定位控制文件,控制文件才open數據庫
控制文件以后才是redo,所以說redo是在他們之后
 
dataguard是容災,就是通過redo來實現的
也可以通過redo歸檔以后產生的日志做dg
所以oracle的 方方面面都用到了redo
 
redo 日志文件的工作方式:
1.按順序循環寫的方式
2.寫入下一組的過程稱為  日志切換
3.切換時發生 檢查點過程,檢查點就是把信息同時寫入到控制文件
 
日志切換的觸發條件,即 LGWR進程 觸發條件   
1.用戶提交
2.有1/3 重做日志緩沖區 未被寫入磁盤
3.有大於1M的 重做日志緩沖區 未被寫入磁盤
4.3秒超時
5.dbwr需要寫入的數據的scn大於lgwr記錄的scn,dbwr觸發lgwr寫入
 
oracle中為什么引入了  log buffer
解決  I/O開支大  和  redo爭用  問題
LGWR:     log buffer ——>redo file
二者的由來,有二:
1.redo records 的產生十分頻繁
2.server process 每次產生的量卻不大
 
倘若每次產生的redo就須由大量高並發sp寫入redo log file,則存在兩個問題:(sp,就是服務器進程)
1) I/O 開支大
2) redo file 爭用
由此,oracle在redo機制中引入了log buffer和LGWR
redo log buffer緩存了sp產生的redo records,提高了oracle高並發的性能
LGWR則將log buffer中的records 批量flush 到redo file,對於oracle 而言,只要對數據的改變寫入到 redo log file,那么相關的事務絕不丟失
 
日志及日志組的刪除:
刪除日志組的時候,要保證組成員只有一個,才可以刪除
並且狀態如果是【ACTIVE】不能刪除,要變成【INACTIVE】s才能刪除,就需要多切換幾次
 
1.先刪日志成員:
alter database drop logfile member 'D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO042.LOG'
2.再刪除日志組:
alter database drop logfile group 4;
 
附:
 
日志切換的場景:
1.當前日志文件滿了之后
2.alter system switch logfile; 當前實例
3.alter system archive log current; --切換多個節點(日志)的命令
 
日志切換的過程:較難理解
a.讀控制文件,選擇下一個日志文件,並清除控制文件中的相關記錄。如果DBWR進程正在進行日志切換檢查點,或者ARCHn進程正在歸檔日志內容,那么LGWR會等待這些操作完成才進行日志切換工作
 
b.把當前沒有存盤的所有LOG BUFFER都寫入磁盤,然后把最后一個REDO記錄的SCN寫入LOG文件的頭塊中,完成這些操作后,LGWR關閉當前日志文件
 
c.進行第二次讀控制文件,把下一個日志文件的狀態設置為CURRENT,老的日志文件修改為ACTIVE,當DBWR完成日志切換檢查點和歸檔操作后,這個日志文件的狀態被改為 INACTIVE
 
d.打新日志文件的所有成員(如果組中有超過1個成員),並在文件頭寫入一個新的日志序列號和low SCN,然后修改 SGA控制變量,允許生產REDO印象。要注意的是,因為寫入文件頭的信息包括文件編號,因此寫文件頭的操作不是並行操作,對於同組的不同成員,寫入的數據不是完全一致的。
 
 
 
重做日志組,生產環境的話,要多加幾組,文件大小 最少200M一個,200M到2G都不過分
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM