關於資料檔案頭的檢查點SCN知識

jst143發表於2011-04-11

在控制檔案中存放著資料檔案的資訊,這些資訊包含了一些經常改變的屬性,比如說資料檔案的“結束SCN”.
  
  這些東西在資料庫啟動時,對於驗證資料庫檔案的完整性具有很重要的意義。
  
  在ITpub上找到了一篇文章,很好,轉過來了,並作了一些測試。
  
  1、系統檢查點scn
  
  當一個檢查點動作完成後,Oracle就把系統檢查點的SCN儲存到控制檔案中。
  
  select checkpoint_change# from v$database
  
  2、資料檔案檢查點scn
  
  當一個檢查點動作完成後,Oracle就把每個資料檔案的scn單獨存放在控制檔案中。
  
  select name,checkpoint_change# from v$datafile
  
  3、啟動scn
  
  Oracle把這個檢查點的scn儲存在每個資料檔案的檔案頭中,這個值稱為啟動scn,因為它用於在資料庫例項啟動時,檢查是否需要執行資料庫恢復。
  
  select name,checkpoint_change# from v$datafile_header
  
  4、終止scn
  
  每個資料檔案的終止scn都儲存在控制檔案中。
  
  select name,last_change# from v$datafile
  
  在正常的資料庫操作過程中,所有正處於聯機讀寫模式下的資料檔案的終止scn都為null.
  
  5、在資料庫執行期間的scn值
  
  在資料庫開啟並執行之後,控制檔案中的系統檢查點、控制檔案中的資料檔案檢查點scn和每個資料檔案頭中的啟動scn都是相同的。控制檔案中的每個資料檔案的終止scn都為null.
  
  在安全關閉資料庫的過程中,系統會執行一個檢查點動作,這時所有資料檔案的終止scn都會設定成資料檔案頭中的那個啟動scn的值。在資料庫重新啟動的時候,Oracle將檔案頭中的那個啟動scn與資料庫檔案檢查點scn進行比較,假如這兩個值相互匹配,oracle接下來還要比較資料檔案頭中的啟動 scn和控制檔案中資料檔案的終止scn。假如這兩個值也一致,就意味著所有資料塊多已經提交,所有對資料庫的修改都沒有在關閉資料庫的過程中丟失,因此這次啟動資料庫的過程也不需要任何恢復操作,此時資料庫就可以開啟了。當所有的資料庫都開啟之後,儲存在控制檔案中的資料檔案終止scn的值再次被更改為 null,這表示資料檔案已經開啟並能夠正常使用了。
  
  我做的測試如下:
  
  A.資料庫開啟時,使用mount引數,不把資料庫open.
  
  系統檢查點scn
  
  SQL> select checkpoint_change# from v$database;
  CHECKPOINT_CHANGE#
  ------------------
        1775875
  
  控制檔案中的資料檔案檢查點scn
  
  SQL> select name,checkpoint_change# from v$datafile ;
  NAME                       CHECKPOINT_CHANGE#
  -------------------------------------      ------------------
  /opt/oracle/oradata/dbora817/system01.dbf     1775875
  /opt/oracle/oradata/dbora817/tools01.dbf     1775875
  /opt/oracle/oradata/dbora817/rbs01.dbf      1775875
  /opt/oracle/oradata/dbora817/temp01.dbf      1775875
  /opt/oracle/oradata/dbora817/users01.dbf     1775875
  /opt/oracle/oradata/dbora817/indx01.dbf      1775875
  /opt/oracle/oradata/dbora817/drsys01.dbf     1775875
  /opt/oracle/oradata/dbora817/perfstat.dbf     1775875
  
  資料檔案的檔案頭中的啟動scn
  SQL> select name,checkpoint_change# from v$datafile_header;
  NAME                       CHECKPOINT_CHANGE#
  -------------------------------------      ------------------
  /opt/oracle/oradata/dbora817/system01.dbf     1775875
  /opt/oracle/oradata/dbora817/tools01.dbf     1775875
  /opt/oracle/oradata/dbora817/rbs01.dbf      1775875
  /opt/oracle/oradata/dbora817/temp01.dbf      1775875
  /opt/oracle/oradata/dbora817/users01.dbf     1775875
  /opt/oracle/oradata/dbora817/indx01.dbf      1775875
  /opt/oracle/oradata/dbora817/drsys01.dbf     1775875
  /opt/oracle/oradata/dbora817/perfstat.dbf     1775875
  
  控制檔案中的資料檔案終止scn
  SQL> select name,last_change# from v$datafile;
  NAME                       LAST_CHANGE#
  -------------------------------------      ------------------
  /opt/oracle/oradata/dbora817/system01.dbf     1775875
  /opt/oracle/oradata/dbora817/tools01.dbf     1775875
  /opt/oracle/oradata/dbora817/rbs01.dbf      1775875
  /opt/oracle/oradata/dbora817/temp01.dbf      1775875
  /opt/oracle/oradata/dbora817/users01.dbf     1775875
  /opt/oracle/oradata/dbora817/indx01.dbf      1775875
  /opt/oracle/oradata/dbora817/drsys01.dbf     1775875
  /opt/oracle/oradata/dbora817/perfstat.dbf     1775875
  
  這些個結束SCN都是跟啟動SCN是一樣的,這樣,當資料庫open的時候就可以不用recover了。

  
  B.把資料庫開啟open
  
  SQL> alter database open;
  Database altered.
  
  系統檢查點scn 變為:1775876,比原來增加了1。
  SQL> select checkpoint_change# from v$database;
  
  CHECKPOINT_CHANGE#
  ------------------
        1775876
  
  控制檔案中的資料檔案檢查點scn和資料檔案的檔案頭中的啟動scn也都被修改成為1775876,各自增加了1。
  
  然後察看
  
  控制檔案中的資料檔案終止scn,發現都是NULL.
  
  SQL> select name,last_change# from v$datafile;
  NAME                       LAST_CHANGE#
  -------------------------------------      ------------------
  /opt/oracle/oradata/dbora817/system01.dbf
  /opt/oracle/oradata/dbora817/tools01.dbf
  /opt/oracle/oradata/dbora817/rbs01.dbf
  /opt/oracle/oradata/dbora817/temp01.dbf
  /opt/oracle/oradata/dbora817/users01.dbf
  /opt/oracle/oradata/dbora817/indx01.dbf
  /opt/oracle/oradata/dbora817/drsys01.dbf
  /opt/oracle/oradata/dbora817/perfstat.dbf
  
  C.對系統觸發檢查點
  
  SQL> alter system checkpoint;
  
  System altered.
  
  SQL> select checkpoint_change# from v$database;
  
  CHECKPOINT_CHANGE#
  ------------------
        1775917
  
  系統檢查點scn 發生變化,增加了1.

 

本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/Liggie/archive/2008/10/14/3073494.aspx

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23577591/viewspace-692245/,如需轉載,請註明出處,否則將追究法律責任。

相關文章