成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Oracle SCN機(jī)制的詳細(xì)解析

數(shù)據(jù)庫 Oracle
以下的文章主要是對Oracle SCN機(jī)制的詳細(xì)解析,如果你想更好的了解其的運(yùn)作機(jī)制的話。那么你就必須先了解SCN的運(yùn)作機(jī)制,以下的文章就是其主要內(nèi)容的介紹。

Oracle SCN(System Chang Number)是Oracle 中的一個十分重要機(jī)制,在相關(guān)的數(shù)據(jù)恢復(fù)、Data Guard、與Streams復(fù)制、還有RAC節(jié)點(diǎn)間的相關(guān)同步等各個不同功能中起著十分重要作用。

理解SCN的運(yùn)作機(jī)制,可以幫助你更加深入地了解上述功能。

在理解Oracle SCN之前,我們先看下Oracle 事務(wù)中的數(shù)據(jù)變化是如何寫入數(shù)據(jù)文件的:

1、 事務(wù)開始;

2、 在buffer cache中找到需要的數(shù)據(jù)塊,如果沒有找到,則從數(shù)據(jù)文件中載入buffer cache中;

3、 事務(wù)修改buffer cache的數(shù)據(jù)塊,該數(shù)據(jù)被標(biāo)識為“臟數(shù)據(jù)”,并被寫入log buffer中;

4、 事務(wù)提交,LGWR進(jìn)程將log buffer中的“臟數(shù)據(jù)”寫入redo log file中;

5、 當(dāng)發(fā)生checkpoint,CKPT進(jìn)程更新所有數(shù)據(jù)文件的文件頭中的信息,DBWn進(jìn)程則負(fù)責(zé)將Buffer Cache中的臟數(shù)據(jù)寫入到數(shù)據(jù)文件中。

經(jīng)過上述5個步驟,事務(wù)中的數(shù)據(jù)變化最終被寫入到數(shù)據(jù)文件中。但是,一旦在上述中間環(huán)節(jié)時,數(shù)據(jù)庫意外宕機(jī)了,在重新啟動時如何知道哪些數(shù)據(jù)已經(jīng)寫入數(shù)據(jù)文件、哪些沒有寫呢(同樣,在DG、streams中也存在類似疑問:redo log中哪些是上一次同步已經(jīng)復(fù)制過的數(shù)據(jù)、哪些沒有)?SCN機(jī)制就能比較完善的解決上述問題。

SCN是一個數(shù)字,確切的說是一個只會增加、不會減少的數(shù)字。正是它這種只會增加的特性確保了Oracle 知道哪些應(yīng)該被恢復(fù)、哪些應(yīng)該被復(fù)制。

總共有4中SCN:系統(tǒng)檢查點(diǎn)(System Checkpoint)SCN、數(shù)據(jù)文件檢查點(diǎn)(Datafile Checkpoint)SCN、結(jié)束SCN(Stop SCN)、開始SCN(Start SCN)。其中其面3中SCN存在于控制文件中,***一種則存在于數(shù)據(jù)文件的文件頭中。

在控制文件中,System Checkpoint SCN是針對整個數(shù)據(jù)庫全局的,因而只存在一個,而Datafile Checkpoint SCN和Stop SCN是針對每個數(shù)據(jù)文件的,因而一個數(shù)據(jù)文件就對應(yīng)在控制文件中存在一份Datafile Checkpoint SCN和Stop SCN。在數(shù)據(jù)庫正常運(yùn)行期間,Stop SCN(通過視圖v$datafile的字段last_change#可以查詢)是一個無窮大的數(shù)字或者說是NULL。

在一個事務(wù)提交后(上述第四個步驟),會在redo log中存在一條redo記錄,同時,系統(tǒng)為其提供一個***的Oracle SCN(通過函數(shù)dbms_flashback.get_system_change_number可以知道當(dāng)前的***SCN),記錄在該條記錄中。

如果該條記錄是在redo log被清空(日志滿做切換時或發(fā)生checkpoint時,所有變化日志已經(jīng)被寫入數(shù)據(jù)文件中),則其SCN被記錄為redo log的low SCN。以后在日志再次被清***寫入的redo記錄中SCN則成為Next SCN。

當(dāng)日志切換或發(fā)生checkpoint(上述第五個步驟)時,從Low SCN到Next SCN之間的所有redo記錄的數(shù)據(jù)就被DBWn進(jìn)程寫入數(shù)據(jù)文件中,而CKPT進(jìn)程則將所有數(shù)據(jù)文件(無論redo log中的數(shù)據(jù)是否影響到該數(shù)據(jù)文件)的文件頭上記錄的Start SCN(通過視圖v$datafile_header的字段checkpoint_change#可以查詢)更新為Next SCN。

同時將控制文件中的System Checkpoint SCN(通過視圖v$database的字段checkpoint_change#可以查詢)、每個數(shù)據(jù)文件對應(yīng)的Datafile Checkpoint(通過視圖v$datafile的字段checkpoint_change#可以查詢)也更新為Next SCN。但是,如果該數(shù)據(jù)文件所在的表空間被設(shè)置為read-only時,數(shù)據(jù)文件的Start SCN和控制文件中Datafile Checkpoint SCN都不會被更新。

那系統(tǒng)是如何產(chǎn)生一個***的SCN的?實(shí)際上,這個數(shù)字是由當(dāng)時的timestamp轉(zhuǎn)換過來的。每當(dāng)需要產(chǎn)生一個***的Oracle SCN到redo記錄時,系統(tǒng)獲取當(dāng)時的timestamp,將其轉(zhuǎn)換為數(shù)字作為SCN。我們可以通過函數(shù)SCN_TO_TIMESTAMP(10g以后)將其轉(zhuǎn)換回timestamp:

 

  1. SQL> select dbms_flashback.get_system_change_number, 
    SCN_TO_TIMESTAMP(dbms_flashback.get_system_change_number) from dual;  
  2. GET_SYSTEM_CHANGE_NUMBER SCN_TO_TIMESTAMP(DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER)  
  3. 2877076756 17-AUG-07 02.15.26.000000000 PM  

 

也可以用函數(shù)timestamp_to_scn將一個timestamp轉(zhuǎn)換為SCN:

 

  1. SQL> select timestamp_to_scn(SYSTIMESTAMP) as scn from dual;  
  2. SCN  
  3. 2877078439  

 

***,SCN除了作為反映事務(wù)數(shù)據(jù)變化并保持同步外,它還起到系統(tǒng)的“心跳”作用——每隔3秒左右系統(tǒng)會刷新一次系統(tǒng)SCN。

下面,在簡單介紹一下SCN如何在數(shù)據(jù)庫恢復(fù)中起作用。

數(shù)據(jù)庫在正常關(guān)閉(shutdown immediate/normal)時,會先做一次checkpoint,將log file中的數(shù)據(jù)寫入數(shù)據(jù)文件中,將控制文件、數(shù)據(jù)文件中的SCN(包括控制文件中的Stop SCN)都更新為***的SCN。

數(shù)據(jù)庫異常/意外關(guān)閉不會或者只更新部分Stop SCN。

當(dāng)數(shù)據(jù)庫啟動時,Oracle 先檢查控制文件中的每個Datafile Checkpoint SCN和數(shù)據(jù)文件中的Start SCN是否相同,再檢查每個Datafile Checkpoint SCN和Stop SCN是否相同。如果發(fā)現(xiàn)有不同,就從Redo Log中找到丟失的SCN,重新寫入數(shù)據(jù)文件中進(jìn)行恢復(fù)。具體的數(shù)據(jù)恢復(fù)過程這里就不再贅述。

SCN作為Oracle 中的一個重要機(jī)制,在多個重要功能中起著“控制器”的作用。了解SCN的產(chǎn)生和實(shí)現(xiàn)方式,幫助DBA理解和處理恢復(fù)、DG、Streams復(fù)制的問題。

***提一句,利用Oracle SCN機(jī)制,在Oracle 10g、11g中又增加了一些很實(shí)用的功能——數(shù)據(jù)庫閃回、數(shù)據(jù)庫負(fù)載重現(xiàn)等。  

【編輯推薦】

  1. Oracle 存取LONG類型字段的方案描述
  2. Oracle 并發(fā)連接數(shù)的設(shè)置方案
  3. Oracle 權(quán)限分類及其具體內(nèi)容
  4. Oracle 數(shù)據(jù)庫進(jìn)行企業(yè)開發(fā)方案之錯誤排查
  5. Oracle 創(chuàng)建表空間所用代碼示例
責(zé)任編輯:佚名 來源: 博客園
相關(guān)推薦

2010-04-15 11:27:46

Oracle備份

2010-05-10 17:26:14

Oracle sqlp

2011-04-07 17:54:22

Policing

2011-04-07 17:43:37

Shapping

2011-04-07 17:27:52

Policing

2011-04-07 17:39:57

Shapping

2012-07-03 10:57:54

Hadoop核心機(jī)制

2010-04-26 10:52:46

Oracle 數(shù)據(jù)庫

2010-04-19 09:16:46

Oracle使用

2010-04-16 15:12:12

ORACLE鎖機(jī)制

2010-04-06 13:33:41

Oracle服務(wù)

2010-05-05 14:21:19

Oracle10g

2010-04-26 10:32:55

Oracle 10g

2012-06-18 10:19:26

Oracle安全

2017-08-17 15:13:52

PostgreSQL MVCC機(jī)制

2011-11-23 09:39:33

JavaClassLOader機(jī)制

2010-04-12 16:03:12

Oracle SGA設(shè)

2011-03-08 14:45:59

2010-10-26 17:17:37

創(chuàng)建ORACLE索引

2010-05-07 18:28:36

Oracle 10g
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 一级国产精品一级国产精品片 | 久久久亚洲一区 | 国产一区二区三区免费 | 男女羞羞视频在线 | 亚洲一区在线日韩在线深爱 | 黄色一级视频 | 精品成人免费视频 | 啪啪网页 | 久久久国产精品视频 | 久久综合成人精品亚洲另类欧美 | 99视频在线免费观看 | 欧美在线 | 成人免费视屏 | 精品国产高清一区二区三区 | 羞羞视频在线观看网站 | 视频一区二区中文字幕日韩 | 精品免费 | 在线观看中文字幕 | 午夜影院在线观看视频 | 国产在线一| 国产精品一区二区无线 | 日韩欧美在线视频 | 久久99精品国产 | 欧美精品一区久久 | 国产成都精品91一区二区三 | 国产一区二区免费电影 | 91在线观看网址 | 在线观看中文视频 | 麻豆精品国产91久久久久久 | 久久精品成人 | 久久免费视频观看 | 亚洲精品久久久久中文字幕二区 | 色婷婷久久久久swag精品 | 亚洲精品成人av久久 | www.99热| 久久综合婷婷 | 日韩欧美黄色 | 嫩草影院黄 | 91一区二区在线观看 | 亚洲国产精品99久久久久久久久 | 欧美日韩亚洲国产综合 |