亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

數據庫startup啟動時前滾回滾進行實例恢復的理解

發布時間:2020-08-10 10:32:50 來源:ITPUB博客 閱讀:171 作者:lusklusklusk 欄目:關系型數據庫
前滾回滾過程應該是這樣的:數據庫記錄了最新的SCN、增量checkpoint的SCN、redo log的最大SCN,通過增量checkpoint的SCN開始應用redo log直到redo log的最大SCN乃至最新的SCN,這樣就完成了前滾,在回滾的時候直接讀取undo中這個會話最初的scn和前鏡像直接回滾,不會一個個數據塊去undo,否則如果10G數據寫入數據文件但是沒有commit那回滾得多久啊

redo、undo用到的原因是:因redo log先于datafile寫入持久層,所以實例啟動時需要先前滾redo log中修改的數據,如果這些數據沒有commit再從undo中回滾回去。

At least every three seconds the checkpoint process records information in the control file about the checkpoint position in the online redo log.
--即使沒有發生任何事情,每3秒SCN也必須至少增加1

dbwn進程寫入data file的條件
系統發出檢查點指令(ckpt進程啟動后會促使dbwn寫data file)。
臟緩沖區個數達到指定閥值。
服務進程搜索一定數目的數據塊后,不能找到自由緩沖區。
數據寫入計時時間到。

lgwr進程寫入redo log的條件
在DWBR 進程將臟緩沖區寫入數據文件之前
在重做日志記錄達到日志緩沖區的三分之一
日志緩沖區記錄的日志多于1M
每隔3秒鐘
提交事務(執行Commit)

ckpt進程寫SCN記錄的條件
發生日志切換。
關閉實例(SHUTDOWN ABORT 除外)。
手工執行檢查點操作。
由初始化參數LOG_CHECKPOINT_INTERVAL 和LOG_CHECKPOINT_TIMEOUT強制發出。

shutdown abort的情況
修改過的緩沖區不寫入數據文件
不回退未提交的更改
不執行ckpt

undo記錄SCN
When a transaction modifies data, the database writes a new SCN to the undo data segment assigned to the transaction

redo記錄SCN

LGWR puts a commit record in the redo log buffer and writes it to disk immediately, along with the commit SCN and transaction's redo entries


假如,一個會話A,修改某行的某列數值5為3,但是沒有來得及commit,就執行了shutdown abort
這個時候可能有三種情況
1、這個修改寫入了data file(寫入data file和是否commit沒有關系)也寫入了redo log(寫入了data file則一定會觸發先寫redo log),數據庫startup過程中實例恢復的流程
2、這個修改沒有寫入了data file,但是寫入了redo log(除了commit外,還有4種情況會寫入redo log),數據庫startup過程中實例恢復的流程
3、這個修改沒有寫入data file,也沒有寫入redo log(如果寫入redo log的條件都沒在會話A期間發生),數據庫startup過程中實例恢復的流程

前滾回滾實例恢復都是如下一個流程
因為沒有ckpt,所以data file和control file沒有記錄會話A的SCN
如果已經寫入了redo log,所以redo log記錄了會話A的SCN
如果沒有寫入了redo log,redo log也至少記錄了會話A前3秒(shutdown abort前3秒)的一個SCN
雖然沒有ckpt,但是control file仍有一個最新的SCN,v$database.current_scn,此SCN可能還大于redo log的最新SCN

SMON進程發現redo log、data file、control file三者的SCN不一致,則利用redo log進行前滾,同步數據文件、控制文件使這二者和重做日志文件的最新SCN一致,當前滾完成后,發現會話A的數據塊的ITL狀態是uncommitted,則再使用undo中會話A的前鏡像回滾,再一次同步數據文件、控制文件、重做日志文件確保三者都是一致的SCN



shutdown abort后,執行start up會自動更新data file和control file的SCN
SQL> select to_char(sysdate,'hh:mm:ss') from dual;
TO_CHAR(
--------
02:03:08
SQL> select CHECKPOINT_CHANGE#,CONTROLFILE_CHANGE#,CURRENT_SCN from v$database;
CHECKPOINT_CHANGE# CONTROLFILE_CHANGE# CURRENT_SCN
------------------ ------------------- -----------
           1062765             1062824     1063536
SQL> select distinct CHECKPOINT_CHANGE# from v$datafile_header;
CHECKPOINT_CHANGE#
------------------
           1062765
SQL> select distinct CHECKPOINT_CHANGE#,last_change# from v$datafile;
CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
           1062765
SQL> shutdown abort;
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 1272213504 bytes
Fixed Size                  1344680 bytes
Variable Size             788532056 bytes
Database Buffers          469762048 bytes
Redo Buffers               12574720 bytes
Database mounted.
Database opened.
SQL> select to_char(sysdate,'hh:mm:ss') from dual;
TO_CHAR(
--------
02:03:50
SQL> select CHECKPOINT_CHANGE#,CONTROLFILE_CHANGE#,CURRENT_SCN from v$database;
CHECKPOINT_CHANGE# CONTROLFILE_CHANGE# CURRENT_SCN
------------------ ------------------- -----------
           1083549             1083604     1083812
SQL>  select distinct CHECKPOINT_CHANGE# from v$datafile_header;
CHECKPOINT_CHANGE#
------------------
           1083549
SQL>  select distinct CHECKPOINT_CHANGE#,last_change# from v$datafile;
CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
           1083549
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

津市市| 皮山县| 项城市| 灵石县| 攀枝花市| 峨眉山市| 冕宁县| 五华县| 岳西县| 阿拉善盟| 五寨县| 长白| 霍山县| 博湖县| 遂溪县| 永清县| 乐平市| 读书| 吴江市| 乐昌市| 上犹县| 沐川县| 历史| 海门市| 大英县| 囊谦县| 武安市| 长泰县| 新宁县| 山东省| 陈巴尔虎旗| 兴安盟| 镇宁| 饶阳县| 甘德县| 剑河县| 云安县| 黄浦区| 嫩江县| 酒泉市| 建宁县|