oracle redo相關知識

2021-06-19 05:52:53 字數 1892 閱讀 3207

來自辛明老師:

1.redo的作用

保證資料庫的事務可以被重演,從而使得在故障之後,資料可以被恢復。

2.redo功能的實現

redo log buffer

lgwr

redo log file

3.redo log詳解

change vector(改變向量):對資料庫內某乙個資料塊所做的一次變更

redo records(重做記錄):由一組改變向量組成,資料庫的最小恢復單位

例如乙個update的重做記錄就包括回滾段的改變向量和相應資料塊的改變向量

update emp set sal=4000 where sal=7788;

a.檢查empno=7788的記錄在buffer_cache中是否存在,若不存在則讀取到buffer_cache中

b.在回滾表空間的相應回滾段的事務表中分配事務槽,這個操作需要記錄redo資訊

c.從回滾段讀入或者在buffer_cache中建立sal=3000的前映象,這個操作需要記錄undo資訊

d.修改sal=4000,這是update的資料變更,需要記錄redo資訊

e.當使用者提交時,會在redo log buffer記錄提交資訊,並在回滾段標記該事務為非啟用(inactive)

4.redo與資料庫恢復

當使用者在buffer_cache中修改資料時,oracle並不會立即將修改的資料寫出到資料檔案中,這樣做效率很低,

oracle為了減少io的次數,當修改過的資料達到一定數量後,進行高效的批量寫出

正是因為提交時不強制刷髒資料塊,所以為了保證資料庫發生故障時可以恢復,oracle引入了redo機制

由於redo機制對於資料的保護,當資料庫發生故障時,oracle就可以通過redo重演進行資料恢復,

那麼乙個非常重要的問題就是,恢復應該從何處開始?

如果讀取的redo過多,必然導致恢復的時間過長,oracle通過檢查點(checkpoint)來縮短恢復的時間

當檢查點發生時,oracle會通知dbwr程序,把修改過的資料從buffer_cache寫入磁碟,在檢查點完成後,

ckpt程序會將相應的檢查點資訊寫入控制檔案和資料檔案頭

在檢查點完成之後,此檢查點之前的修改過的資料都已經寫回磁碟,重做日誌檔案中的相應的重做記錄對於

例項恢復不再有用。如果此後資料庫崩潰,那麼恢復只需要從最後一次完成的檢查點開始恢復即可。如果

資料庫執行在歸檔模式,日誌檔案在重用之前必須寫出到歸檔檔案

5.檢查點的分類

完全檢查點:dbwr以最高優先順序寫出髒資料塊

——非abort方式關閉資料庫

——alter systemcheckpoint

增量檢查點:dbwr不一定刷髒資料塊

——每隔三秒鐘執行一次:只記錄控制檔案

——每次日誌切換:記錄控制檔案和資料檔案頭部

6.redo的數量

a.set autotrace traceonly:查詢每個操作的redo量

b.v$mystat:查詢當前session產生的redo量

select n.name,m.value

from v$statname n,v$mystat m

where n.statistic# = m.statistic#

and n.name =『redo size』;

c.v$sysstat:查詢資料庫例項啟動以來累積生成的redo量

select name,value

from v$sysstat

where name =『redo size』;

7.redo寫的觸發條件

a.每3秒鐘

b.redo log buffer1/3滿

c.redo log buffer達到1m

d.使用者提交

e.在dbwr寫之前

mysql相關知識 MySQL相關知識

字串拼接 select from tablename where mydata like concat curdate limit 3 這裡concat是字串拼接,concat mys q l mysql 顯示日期不帶時間的函式,如 2015 05 14 curdate 是日期不算時間 2015 0...

ioctl相關知識

一 什麼是ioctl ioctl是裝置驅動程式中對裝置的i o通道進行管理的函式。所謂對i o通道進行管理,就是對裝置的一些特性進行控制,例如串列埠的傳輸波特率 馬達的轉速等等。它的呼叫個數如下 int ioctl int fd,ind cmd,其中fd就是使用者程式開啟裝置時使用open函式返回的...

ioctl相關知識

略有修改 一 什麼是ioctl ioctl是裝置驅動程式中對裝置的i o通道進行管理的函式。所謂對i o通道進行管理,就是對裝置的一些特性進行控制,例如串列埠的傳輸波特率 馬達的轉速等等。它的呼叫個數如下 int ioctl int fd,ind cmd,其中fd就是使用者程式開啟裝置時使用open...