例項恢復相關原理精簡總結(原創)
也可訪問貼子地址
http://www.itpub.net/forum.php?mod=viewthread&tid=1761630
第一部分 相關基礎知識——髒鏈、CKPT
*************************************************************************************************************
一、 CKPTQ髒鏈(按照訪問順序進入CKPTQ)
=檢查點佇列
=包含所有髒塊
=任何塊一變髒一定立即進入
=髒塊第一次進入ckptq就決定了其順序
=與接髒塊的buffer header關聯
=塊改多次關聯redo buffer中多個rba:心跳將第一次的lrba寫到控制檔案,不寫hrba
================================================
各資料塊在被讀入buffer cache時,會先在buffer cache中構造一個buffer header,buffer header與資料塊一一對應。buffer header包含的主要資訊有:
a)該資料塊在buffer cache中實際的記憶體地址。
b)該buffer header所在的LRU、LRUW、CKPTQ等連結串列。
c)正在等待該buffer header的程式列表(waiter list)和正在使用該buffer header的程式列表(user list)。
*******************************************************
二、LRUW髒鏈(按照訪問頻率進入LRUW)
=只包含一部分髒塊
=掛在LRU鏈上的髒塊在被寫回磁碟前,它是不能被新讀入的塊覆蓋的。經過一定演算法會把一部分髒塊轉到髒LRU鏈(即LRUW鏈)中。
=掛在LRUW鏈中的塊被dbwn寫入dbfile後自動從ckptq佇列中摘除
*******************************************************
三、 CKPT傳送CHECKPOINT訊號的觸發條件
1. log_checkpoint_timeout時間達到
2.當前redo日誌已經寫夠log_checkpoint_internavl作業系統塊大小
3. redo log switch :日誌檔案滿或alter system switch logfile
4. 手工檢查點操作:alter system checkpoint
5. alter tablespace XXX begin backup,end backup時
6. alter tablespace , datafile offline,
7.關閉例項(SHUTDOWN ABORT除外)。
8.direct path read時(11g全表掃描);
四、 增量檢查點
增量檢查點並不會去更新資料檔案頭,而只是每3秒由CKPT程式去更新控制檔案中的LRBA和SCN(日誌切換檢查點、完全檢查點時寫資料檔案頭及資料檔案頭)。
1.增量檢查點主要包含以下步驟
①親自物理寫
CKPT每3秒心跳一次記錄檢查點位置的工作(更新RBA至控制檔案)
②指揮別人寫
CKPT定期觸發DBWn去寫checkpoint queue中的髒資料
2.增量檢查點的意義有以下兩個:
①減少發生完全檢查點時DBWn程式的工作負擔
②提高例項恢復的速度
*******************************************************
五、檢查點心跳原理、檢查點佇列原理
檢查點發生後,觸發dbwr,CKPT獲取發生檢查點時對應的SCN,通知DBWr要寫到這個SCN為止。
dbwr 根據 buffer 在被首次修改的時候的時間的順序批量地寫出dirty buffer到datafile。
checkpoint 發生時:
一方面通知dbwr進行下一批寫操作。
另一方面,oracle 採用了一個心跳的概念,以3秒的頻率將dbwr 寫的進度反應到控制檔案中,也就是把dbwr當前剛寫完的dirty buffer對應的scn和lrba寫入資料檔案頭和控制檔案,這就是檢查點scn。
3秒只是在控制檔案中,ckpt 程式去更新當前dbwr寫到哪裡了,這個對於ckpt 程式來說叫 heartbeat ,heartbeat是3秒一次: 3秒可以看作不停的檢查並記錄檢查點執行情況(DBWR的寫進度)。
檢查點發生之後資料庫的資料檔案、控制檔案處於一致狀態的含義是不需要進行介質恢復,只表示資料檔案頭一致,但是並不表示資料檔案內容一致,因為資料檔案內容可能在沒有發生檢查點的其他情況下的dbwr寫資料檔案,這樣資料檔案內容就不一致,若掉電需要進行崩潰恢復(前滾+回滾)。
*******************************************************
第二部分 相關基礎知識——Block Address
*************************************************************************************************************
一、block address(ondisk rba在9.2後作廢)
1.uba=Undofile BA
2.dba=Datafile BA=dbfile檔案號、塊號、行號
rdba=tablespace Relative Database BA
3.rba=Redofile BA=logfile 序列號,logfile 塊號,偏移長度
*******************************************************
二、low cache rba與low rba
1.low cache rba
=檢查點位置
=就是CKPT記錄的DBWR寫的進度
=low cache rba 以前的更前的已經寫入資料檔案
2. 當前redo logfile的low scn(first_change#)
SQL> select sequence#,status,first_change# from v$log;
SEQUENCE# STATUS FIRST_CHANGE#
---------- ---------------- -------------
5 INACTIVE 566751
6 CURRENT 589819
4 INACTIVE 531541
first_change#表示當前redo log的low scn,
例項恢復只會用到當前redo log file(原因:日誌切換時觸發CKPT寫了髒塊)
3.補充知識:
next_change#表示當前redo log的high scn
select sequence#,first_change# from v$log;
select sequence#,first_change from v$log_history;
Redo log會順序紀錄資料庫的各個變化。一組redo log檔案寫滿後,會自動切換到下一組redo log檔案。則上一組redo log的high scn就是下一組redo log的low scn。
第三部分 相關基礎知識——scn
*******************************************************
一、計數器
1.scn計數器(未儲存)
=是不斷向前累加的的,系統當前的邏輯時鐘
=資料庫越忙變化越快
=可與時間相互轉換
=select CURRENT_SCN from v$database;
2.檢查點scn時間點(已儲存的)
=已提交到資料檔案頭或控制檔案中的scn值
=有end scn,start scn,system scn等很多種
=儲存在資料塊頭中、控制檔案頭中、資料檔案頭中等很多位置
3.為什麼用scn而不用時間來界定呢?
在9:00的時執行一條DML語句,
然後修改機器上的時間為8:00,再執行一條DML語句。
機器上的時間區分的話,Oracle區分不出來這兩條DML語句的執行順序
——所以它採用自己產生的SCN計數來區分所有操作的先後順序。
*******************************************************
二、全域性SCN/區域性SCN(儲存在控制檔案中)
1.全域性SCN(系統檢查點SCN)
=控制檔案中自身的SCN
=select checkpoint_change# from v$database;
2.區域性SCN(有些表空間的是隻讀的,故與全域性SCN不同)
=控制檔案中各檔案的SCN
=select name,checkpoint_change# from v$datafile;
*******************************************************
四、控制檔案頭中資料檔案stop scn和資料檔案頭中的start scn
1.end scn
=在控制檔案中
=正常關閉資料庫或正常將表空間置為read only或offline時將修改的
=select name,last_change# from v$datafile;
2.start scn
=在資料檔案頭中
=select checkpoint_change# from v$datafile_header
================================================
重要說明:
a.正常關機時(Normal或Immediate)
發出完全檢查點,這將為各資料檔案設定控制檔案中的結束SCN,使其等於資料檔案頭中對應的開始SCN。
b.異常關機
控制檔案中的資料檔案頭資訊(ckpt cnt)與資料檔案頭一致(ckpt cnt),所以不需要介質恢復,資料檔案和控制檔案一致。
此時控制檔案中的資料檔案stop scn=null,與資料檔案頭中的start scn不相等,說明資料檔案和日誌檔案不一致,所以需要進行例項恢復。
第四部分 啟動過程中的一致性檢查
1.對比start scn與checkpoint scn
2.對比start scn與end scn
*******************************************************
一、第一次檢查是決定是否做media recover(難點)
1.對比控制檔案中記錄的資料庫全域性檢查點Checkpoint SCN
和
資料檔案頭部所記錄的資料檔案的Start SCN 是否相等,從而確定是否需要進行介質恢復。
兩者不相等需介質恢復時,
介質恢復的起始點是各資料檔案頭部所記錄的Start SCN對應的RBA
終點是控制檔案中記錄的資料庫全域性檢查點Checkpoint SCN對應的RBA
2.兩者若相等則進行第二次檢查是決定是否做instance recover
================================================
補充知識:日誌切換檢查點
在控制檔案中,只記錄日誌切換時的SCN,不記錄RBA.
日誌切換時,被寫進資料檔案頭的並不只有SCN資訊,還有RBA資訊.這個RBA是新的連機重做日誌檔案第一條重做記錄的RBA.
*******************************************************
二、第二次檢查是決定是否做instance recover
對每個資料檔案都作這樣的檢查,然後開啟資料庫:
1.檢查對資料檔案頭中的中對應檔案的Start SCN
和
控制檔案中對應檔案的end SCN
2.分兩種情況
a.如果end SCN等於start SCN,則不需要對那個檔案進行redo恢復。
b.如果上次資料庫用ABORT等非正常關閉的,資料庫沒進行檢查點處理,而結束SCN仍然為無窮大或null。
在下次啟動期間,發現開始SCN和結束SCN不同,需要進行例項恢復:
前滾,online,後滾
3.作為開啟過程的一部分,要將結束SCN重新設定為無窮大或null。
*******************************************************
三、只讀表空間的問題
1.alter tablespace tbs1 read only;此資訊會存到控制檔案中
此表空間的資料檔案包括資料檔案頭中及控制檔案中的scn等資訊被凍結
2. shutdown immediate;所有read write的資料檔案對應scn,rba等更新一致
3.例項啟動時僅對在控制檔案中標記為read write的表空間做一致性檢查
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/210154/viewspace-753582/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- vue原理相關總結Vue
- Java volatile關鍵字最全總結:原理剖析與例項講解(簡單易懂)Java
- rac恢復到單例項單例
- 從nub備份恢復(同平臺)恢復RAC至單例項單例
- Ajax 相關總結
- rman備份異機恢復(原創)
- ORACLE事務和例項恢復過程梳理Oracle
- ps版本:CC2019如何恢復預設首選項(總結)
- java Set相關總結Java
- java List相關總結Java
- java Map相關總結Java
- Springmvc相關配置總結SpringMVC
- postgreSQL 恢復至故障點 精準恢復SQL
- 相機成像相關知識總結
- 儲存器資料恢復相關知識資料恢復
- 達夢資料庫手工恢復相關命令資料庫
- MySQL中的binlog相關命令和恢復技巧MySql
- mysql相關問題總結MySql
- Android聲音相關總結Android
- jquery裡操作json相關的方法和例項jQueryJSON
- 例項總結Oracle知識點大全Oracle
- 原創:oracle 事務總結Oracle
- 【資料庫資料恢復】Oracle ASM例項無法掛載的資料恢復案例資料庫資料恢復OracleASM
- Winhex簡單資料恢復與取證及實驗一總結資料恢復
- 將RAC備份集恢復為單例項資料庫單例資料庫
- NIO原理及例項
- JavaScript作用域相關的總結JavaScript
- java Queue佇列相關總結Java佇列
- firewall-cmd 相關命令總結
- 總結 MySQL 相關知識點MySql
- JavaScript跨域相關的總結JavaScript跨域
- JVM相關知識點總結JVM
- 關於Webservice介面對接相關總結Web
- Vue知識精簡總結-更新中Vue
- 網路相關工具簡單彙總
- Android熱修復簡單總結Android
- 【資料庫資料恢復】ASM例項不能掛載的Oracle資料庫資料恢復案例資料庫資料恢復ASMOracle
- 【PARANETERS】Oracle異常恢復相關的隱含引數Oracle
- 相機SD卡照片恢復SD卡