實驗證明由於裝置IO不繁忙,發起歸檔後因此要等一會兒才會更新三個檢查點SCN

nathanzhn發表於2014-02-19
insert into test.t3 values(111);
select checkpoint_change#,current_scn from v$database;
commit;
select checkpoint_change#,current_scn from v$database;
select checkpoint_change# from v$datafile;
select checkpoint_change# from v$datafile_header;
alter system archive log current;
select checkpoint_change#,current_scn from v$database;
select checkpoint_change# from v$datafile;
select checkpoint_change# from v$datafile_header;
select * from v$log;
--由於裝置IO不繁忙,因此要等一會兒才會更新三個檢查點SCN
下面是實驗證明:
SYS@PROD>alter system archive log current;


System altered.


SYS@PROD>select checkpoint_change#,current_scn from v$database;


CHECKPOINT_CHANGE# CURRENT_SCN
------------------ -----------
            747855      753850


SYS@PROD>select checkpoint_change# from v$datafile;


CHECKPOINT_CHANGE#
------------------
            747855
            747855
            747855
            747855
            747855
            747855
            747855
            747855
            747855


9 rows selected.


SYS@PROD>select checkpoint_change# from v$datafile_header;


CHECKPOINT_CHANGE#
------------------
            747855
            747855
            747855
            747855
            747855
            747855
            747855
            747855
            747855


9 rows selected.


SYS@PROD>select * from v$log;


    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARCHIV
---------- ---------- ---------- ---------- ---------- ------
STATUS                           FIRST_CHANGE# FIRST_TIME
-------------------------------- ------------- ------------
         1          1         31  104857600          4 YES
ACTIVE                                  747853 31-JAN-14


         2          1         32  104857600          4 NO
CURRENT                                 753845 31-JAN-14


         3          1         30  104857600          4 YES
INACTIVE                                747801 31-JAN-14




SYS@PROD>select checkpoint_change#,current_scn from v$database;


CHECKPOINT_CHANGE# CURRENT_SCN
------------------ -----------
            747855      753892


SYS@PROD>select checkpoint_change# from v$datafile;


CHECKPOINT_CHANGE#
------------------
            747855
            747855
            747855
            747855
            747855
            747855
            747855
            747855
            747855


9 rows selected.


SYS@PROD>select checkpoint_change# from v$datafile_header;


CHECKPOINT_CHANGE#
------------------
            747855
            747855
            747855
            747855
            747855
            747855
            747855
            747855
            747855


9 rows selected.


--上面是立即查詢三個檢查點SCN還沒變化
--下面是過了幾分鐘才發生了變化,同步成為753845,與current的group2日誌組的low scn也就是上一個current group1的high scn相同,見log_history的最後一行的next_change#
SYS@PROD>select recid,sequence#,first_change#,next_change# from v$log_history;


     RECID  SEQUENCE# FIRST_CHANGE# NEXT_CHANGE#
---------- ---------- ------------- ------------
         1         36        597766       598183
         2          1        598449       638186
         3          2        638186       638842
         4          3        638842       638854
         5          4        638854       638937
         6          5        638937       638948
         7          6        638948       639692
         8          7        639692       639694
         9          8        639694       639697
        10          9        639697       639699
        11         10        639699       639702


     RECID  SEQUENCE# FIRST_CHANGE# NEXT_CHANGE#
---------- ---------- ------------- ------------
        12         11        639702       639970
        13         12        639970       639972
        14         13        639972       639975
        15         14        639975       639977
        16         15        639977       639979
        17         16        639979       641997
        18         17        641997       644653
        19         18        644653       644655
        20         19        644655       644658
        21          1        644659       648896
        22          2        648896       648898


     RECID  SEQUENCE# FIRST_CHANGE# NEXT_CHANGE#
---------- ---------- ------------- ------------
        23          3        648898       648902
        24          4        648902       648904
        25          1        648905       669544
        26          2        669544       670151
        27          3        670151       670186
        28          4        670186       673454
        29          5        673454       673459
        30          6        673459       711108
        31          7        711108       714855
        32          8        714855       714857
        33          9        714857       717474


     RECID  SEQUENCE# FIRST_CHANGE# NEXT_CHANGE#
---------- ---------- ------------- ------------
        34         10        717474       717476
        35         11        717476       717846
        36         12        717846       717848
        37         13        717848       739376
        38         14        739376       739642
        39         15        739642       739718
        40         16        739718       739793
        41         17        739793       739803
        42         18        739803       739820
        43         19        739820       740496
        44         20        740496       740517


     RECID  SEQUENCE# FIRST_CHANGE# NEXT_CHANGE#
---------- ---------- ------------- ------------
        45         21        740517       740562
        46         22        740562       740682
        47         23        740682       747402
        48         24        747402       747546
        49         25        747546       747593
        50         26        747593       747623
        51         27        747623       747645
        52         28        747645       747763
        53         29        747763       747801
        54         30        747801       747853
        55         31        747853       753845


55 rows selected.


SYS@PROD>select checkpoint_change#,current_scn from v$database;


CHECKPOINT_CHANGE# CURRENT_SCN
------------------ -----------
            753845      754238


SYS@PROD>select checkpoint_change# from v$datafile;


CHECKPOINT_CHANGE#
------------------
            753845
            753845
            753845
            753845
            753845
            753845
            753845
            753845
            753845


9 rows selected.


SYS@PROD>select checkpoint_change# from v$datafile_header;


CHECKPOINT_CHANGE#
------------------
            753845
            753845
            753845
            753845
            753845
            753845
            753845
            753845
            753845


9 rows selected.


alter system checkpoint;
--如果手工觸發檢查點,發生完全檢查點,將會寫出所有的髒塊,完全檢查點發生時,將不能有新的髒塊產生,直到完全檢查點完成,完全檢查點也將會在資料檔案頭,控制檔案中資料庫資訊節,資料檔案節中寫入當前系統SCN,而且是立即更新雖然比current_scn小一點,但是原理是正確的,因為oracle隨時都有後臺程式在發生,查詢是有時間差的
select checkpoint_change# from v$datafile;
select checkpoint_change# from v$datafile_header;
select checkpoint_change#,current_scn from v$database;
select * from v$log;

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

相關文章