SCNCHECKPOINT
??????? SCN:System Change Number ,用來標示數據庫在某個時刻的確切版本,他只能前進,不能后退. SCN是數字,它是由timestamp轉換過來的,可以select timestamp_to_scn(systimestamp) from dual;獲得一個SCN,也可以用scn_to_timestamp轉換為timestamp.
???????? SCN存在于控制文件,數據文件頭,BLOCK頭,日志文件頭,日志文件中。
???????? 1.控制文件中的SCN:當系統執行checkpoint之后,會更新控制文件的System checkpoint SCN;
????????? Select checkpoint_change# from v$database;
???????? 2.Datafile checkpoint SCN(存在于控制文件):由于控制文件記錄了數據文件的位置和信息,所以控制文件也會記錄數據文件的Datafile checkpoint SCN,當執行checkpoint時,會更新控制文件中的datafile checkpoint scn.
???????? Select checkpoint_change# from v$datafile;
???????? 3.Start SCN(存在于各個數據文件頭):執行checkpoint的時候,ORACLE會更新存放在各個數據文件的Start SCN
???????? Select checkpoint_change# from v$datafile_header;
???????? 4.Stop SCN(存在于控制文件中)既然有Start SCN,當然也會有Stop SCN,
???????? Select name,last_change# from v$datafile;
???????? 對于online的datafile 這個Stop SCN會為null;
???????? 5.Low SCN(存在于控制文件以及redo文件中):它表示一個redo log的起始SCN。
???????? 6.Next SCN(存在于控制文件以及redo 文件中):他表示一個redo log 結束的SCN。對于一個current的redo log來說 它的next SCN為無窮大,或者null,因為不可知。
???????? 7.有關block 中的SCN太復雜,另外單獨介紹。
????????? 在數據庫的啟動:
1.????? 檢查System checkpoint SCN是否等于數據文件頭中的Datafile checkpoint scn.如果相等就表示這個數據文件不是來自于備份就不需要做media recovery.
2.????? 檢查Start SCN是否等于Stop SCN,如果想等就不需要做instance recovery,如果不等,就需要做instance recovery,因為非正常關閉數據庫不會做checkpoint,那么Stop SCN依然為無窮大,所以ORACLE就可以根據這兩個的值是否相等判斷數據庫是否需要做instance recovery.如果數據庫是正常關閉的,那么ORACLE 會將Stop SCN的值設為Start SCN.其實數據庫打開的時候也會做一次checkpoint,具體可以設值log_checkpoints_to_alert=true參數,然后查看alert文件來驗證open階段是否執行了checkpoint,執行這個checkpoint的時候會將End SCN設置為null.
總結一下:控制文件中記錄了多個SCN, System checkpoint SCN, datafile checkpoint scn, Stop? scn,redo里面的low scn ,next scn.數據頭文件中記錄的只有一個Start ?t scn.
下面是dump實驗:
dump control file:???
SQL> alter session set events 'immediate trace name controlf level 8';
?
Session altered.
下面是一部分轉儲內容(系統處于OPEN狀態):
?
????????? DB Name "ROBIN"
?Database flags = 0x00404001 0x00001000
?Controlfile Creation Timestamp? 09/08/2009 18:28:58
?Incmplt recovery scn: 0x0000.00000000
?Resetlogs scn: 0x0000.00000001 Resetlogs Timestamp? 09/08/2009 18:28:58
?Prior resetlogs scn: 0x0000.00000000 Prior resetlogs Timestamp? 01/01/1988 00:0
0:00
?Redo Version: compatible=0xa200200
?#Data files = 6, #Online files = 6
?Database checkpoint: Thread=1 scn: 0x0000.00053433
這里的SCN就是
System checkpoint scn 它等于0x0000.00053433
?Threads: #Enabled=1, #Open=1, Head=1, Tail=1
…………………………..
DATA FILE #5:
? (name #12) /storage/ora_data/ROBIN/datafile/o1_mf_test_5bf4m3y7_.dbf
creation size=12800 block size=8192 status=0xe head=12 tail=12 dup=1
?tablespace 5, index=6 krfil=5 prev_file=0
?unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00
?Checkpoint cnt:14 scn: 0x0000.00053433 09/15/2009 07:15:48?
? 這里的scn就datafile checkpoint scn ,它和System checkpoint scn是相等的。
?Stop scn: 0xffff.ffffffff 09/10/2009 15:30:07??????????????????????
? 這里的Stop SCN就是null
?Creation Checkpointed at scn:? 0x0000.00027255 09/08/2009 19:20:39
?thread:1 rba:(0xb.9588.10)
?Offline scn: 0x0000.00000000 prev_range: 0
?Online Checkpointed at scn:? 0x0000.00000000
?thread:0 rba:(0x0.0.0)
?
這里控制文件中記錄了System checkpoint scn,Stop scn,datafile check point scn.
?Full checkpoint :到了log_checkpoint_interval設置時間間隔, 或者alter system checkpoint,以非abort shutdown 就會產生full checkpoint,它有以下作用:
數據庫關閉和開始都會執行一次checkpoint,具體可以設置參數
alter system set log_checkpoints_to_alert=true; 讓執行的檢查點被記錄到alert log 中。
另外Egyle 說 log switch不是full checkpoint ,它是incremental checkpoint,但是它會更新控制文件和數據文件的頭。
?
Incremental Checkpoint:
1.????? 避免當執行full checkpoint的時候執行大量的I/O操作。
2.????? 只寫oldest block,不是寫all block.
3.????? 只記錄到control file,不會更新數據頭文件。
增量檢查點可以有效的減少恢復的時間,同時避免執行檢查點帶來的I/O性能問題。
轉載于:https://www.cnblogs.com/hehe520/archive/2009/10/16/6330706.html
總結
以上是生活随笔為你收集整理的SCNCHECKPOINT的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# 操作ACCESS数据库
- 下一篇: 链接器工具错误 LNK2019 必须在