1. 系統(tǒng)SCN號
查詢系統(tǒng)SCN號的方法:
select dbms_flashback.get_system_change_number from dual
commit后系統(tǒng)SCN號會增長,但是即使沒有commit操作,因為有許多后臺進(jìn)程在運(yùn)行,所以系統(tǒng)SCN號也會增長。
2. 檢查點(diǎn)SCN
有4種檢查點(diǎn)SCN,其中除了文件頭中的啟動SCN外,其他三種保存在控制文件中。可以通過:alter system set events ‘immediate trace name controlf level 10’導(dǎo)出控制文件到udump目錄的跟蹤文件,來查看控制文件的內(nèi)容。
1) 系統(tǒng)檢查點(diǎn)SCN(區(qū)別于上面的系統(tǒng)SCN,chekpoint發(fā)出后這些SCN號才受影響,如發(fā)出:alter system checkpoint),當(dāng)一個檢查點(diǎn)動作完成后,Oracle就把系統(tǒng)檢查點(diǎn)的SCN存儲到控制文件中,查詢方法:
Select checkpoint_change# from v$database
2) 數(shù)據(jù)文件檢查點(diǎn)SCN
當(dāng)一個檢查點(diǎn)動作完成后,Oracle就把每個數(shù)據(jù)文件的SCN號單獨(dú)存放在控制文件中,查詢方法:
Select checkpoint_change# from v$datafile
3) 文件頭中的啟動SCN
Oracle把這個檢查點(diǎn)的SCN號存儲在每一個數(shù)據(jù)文件的文件頭中。主要用于數(shù)據(jù)庫實(shí)例啟動時,檢查是否需要執(zhí)行數(shù)據(jù)庫恢復(fù)。查詢方法:
Select name,chekpoint_change# from v$datafile_header
4) 終止SCN
每個數(shù)據(jù)文件的SCN號都存儲在控制文件中,查詢方法:
Select name,last_change# from v$datafile
在正常的數(shù)據(jù)庫操作過程中,所有處于聯(lián)機(jī)讀寫模式下的數(shù)據(jù)文件的終止SCN都為NULL。
3. 幾個檢查點(diǎn)SCN號的關(guān)系
1) 幾個檢查點(diǎn)SCN都相同:在數(shù)據(jù)庫打開并運(yùn)行之后,控制文件中的系統(tǒng)檢查點(diǎn)SCN、控制文件中的數(shù)據(jù)文件檢查點(diǎn)SCN及每個數(shù)據(jù)文件頭中的啟動SCN都是相同的,控制文件中的每個數(shù)據(jù)文件的終止SCN都是NULL。
2) 數(shù)據(jù)庫正常關(guān)閉時,系統(tǒng)會執(zhí)行一個檢查點(diǎn)動作,這時所有數(shù)據(jù)文件的 終止SCN號會設(shè)置為數(shù)據(jù)文件頭的那個啟動SCN。數(shù)據(jù)庫重新啟動時,Oracle將數(shù)據(jù)文件頭中的啟動SCN與數(shù)據(jù)文件檢查點(diǎn)SCN比較,如果這兩個值匹配,Oracle接下來再比較數(shù)據(jù)文件頭中的SCN和控制文件中數(shù)據(jù)文件的終止SCN,如果這個值也匹配,就意味著所有數(shù)據(jù)塊已經(jīng)提交,因此數(shù)據(jù)庫不需要進(jìn)行恢復(fù),此時數(shù)據(jù)庫直接打開。當(dāng)所有的數(shù)據(jù)文件都打開之后,終止SCN再次被設(shè)置為NULL,表示數(shù)據(jù)文件已經(jīng)打開并能夠正常使用了。
3) 數(shù)據(jù)庫非正常關(guān)閉(或稱為實(shí)例崩潰)時,終止SCN不會被設(shè)置,依然為NULL,這可以通過把數(shù)據(jù)庫啟動至mount狀態(tài)查詢出來。這樣Oracle通過這個信息就可以知道實(shí)例上次運(yùn)行時崩潰了,檢查點(diǎn)沒有執(zhí)行。這樣重新啟動時,Oracle會執(zhí)行實(shí)例恢復(fù)工作,即先執(zhí)行前滾、回滾操作,再把數(shù)據(jù)庫打開。
4) 數(shù)據(jù)文件檢查點(diǎn)SCN及系統(tǒng)檢查點(diǎn)SCN比文件頭啟動SCN大:這時的情況是:系統(tǒng)發(fā)生介質(zhì)故障,數(shù)據(jù)文件被以前的備份代替,控制文件中的數(shù)據(jù)文件檢查點(diǎn)SCN肯定比文件頭中的啟動SCN要大,這樣Oracle就知道要對這個文件進(jìn)行介質(zhì)恢復(fù)。這時要通過下面語句恢復(fù)數(shù)據(jù)庫:
recover database ……
5) 系統(tǒng)檢查點(diǎn)SCN比數(shù)據(jù)文件SCN及文件頭啟動SCN大:
有些表空間是只讀的,這時控制文件中的系統(tǒng)檢查點(diǎn)SCN號會不斷增長,而數(shù)據(jù)文件SCN號和文件頭中的啟動SCN號會停止更新(直到表空間又設(shè)置為可讀寫),顯然這時系統(tǒng)檢查點(diǎn)SCN號會大于數(shù)據(jù)文件SCN和文件頭啟動SCN。
6) 系統(tǒng)檢查點(diǎn)SCN及數(shù)據(jù)文件SCN比文件頭啟動SCN小:
在數(shù)據(jù)庫恢復(fù)時,控制文件可能不是最新的,即把一個較早的控制文件還原為當(dāng)前的控制文件,然后再執(zhí)行恢復(fù)操作,這時控制文件中的系統(tǒng)檢查點(diǎn)SCN和數(shù)據(jù)文件SCN可能比文件頭的啟動SCN小。這時恢復(fù)數(shù)據(jù)庫要用下面命令:
recover database using Backup Controlfile或其他的恢復(fù)語句
查詢系統(tǒng)SCN號的方法:
select dbms_flashback.get_system_change_number from dual
commit后系統(tǒng)SCN號會增長,但是即使沒有commit操作,因為有許多后臺進(jìn)程在運(yùn)行,所以系統(tǒng)SCN號也會增長。
2. 檢查點(diǎn)SCN
有4種檢查點(diǎn)SCN,其中除了文件頭中的啟動SCN外,其他三種保存在控制文件中。可以通過:alter system set events ‘immediate trace name controlf level 10’導(dǎo)出控制文件到udump目錄的跟蹤文件,來查看控制文件的內(nèi)容。
1) 系統(tǒng)檢查點(diǎn)SCN(區(qū)別于上面的系統(tǒng)SCN,chekpoint發(fā)出后這些SCN號才受影響,如發(fā)出:alter system checkpoint),當(dāng)一個檢查點(diǎn)動作完成后,Oracle就把系統(tǒng)檢查點(diǎn)的SCN存儲到控制文件中,查詢方法:
Select checkpoint_change# from v$database
2) 數(shù)據(jù)文件檢查點(diǎn)SCN
當(dāng)一個檢查點(diǎn)動作完成后,Oracle就把每個數(shù)據(jù)文件的SCN號單獨(dú)存放在控制文件中,查詢方法:
Select checkpoint_change# from v$datafile
3) 文件頭中的啟動SCN
Oracle把這個檢查點(diǎn)的SCN號存儲在每一個數(shù)據(jù)文件的文件頭中。主要用于數(shù)據(jù)庫實(shí)例啟動時,檢查是否需要執(zhí)行數(shù)據(jù)庫恢復(fù)。查詢方法:
Select name,chekpoint_change# from v$datafile_header
4) 終止SCN
每個數(shù)據(jù)文件的SCN號都存儲在控制文件中,查詢方法:
Select name,last_change# from v$datafile
在正常的數(shù)據(jù)庫操作過程中,所有處于聯(lián)機(jī)讀寫模式下的數(shù)據(jù)文件的終止SCN都為NULL。
3. 幾個檢查點(diǎn)SCN號的關(guān)系
1) 幾個檢查點(diǎn)SCN都相同:在數(shù)據(jù)庫打開并運(yùn)行之后,控制文件中的系統(tǒng)檢查點(diǎn)SCN、控制文件中的數(shù)據(jù)文件檢查點(diǎn)SCN及每個數(shù)據(jù)文件頭中的啟動SCN都是相同的,控制文件中的每個數(shù)據(jù)文件的終止SCN都是NULL。
2) 數(shù)據(jù)庫正常關(guān)閉時,系統(tǒng)會執(zhí)行一個檢查點(diǎn)動作,這時所有數(shù)據(jù)文件的 終止SCN號會設(shè)置為數(shù)據(jù)文件頭的那個啟動SCN。數(shù)據(jù)庫重新啟動時,Oracle將數(shù)據(jù)文件頭中的啟動SCN與數(shù)據(jù)文件檢查點(diǎn)SCN比較,如果這兩個值匹配,Oracle接下來再比較數(shù)據(jù)文件頭中的SCN和控制文件中數(shù)據(jù)文件的終止SCN,如果這個值也匹配,就意味著所有數(shù)據(jù)塊已經(jīng)提交,因此數(shù)據(jù)庫不需要進(jìn)行恢復(fù),此時數(shù)據(jù)庫直接打開。當(dāng)所有的數(shù)據(jù)文件都打開之后,終止SCN再次被設(shè)置為NULL,表示數(shù)據(jù)文件已經(jīng)打開并能夠正常使用了。
3) 數(shù)據(jù)庫非正常關(guān)閉(或稱為實(shí)例崩潰)時,終止SCN不會被設(shè)置,依然為NULL,這可以通過把數(shù)據(jù)庫啟動至mount狀態(tài)查詢出來。這樣Oracle通過這個信息就可以知道實(shí)例上次運(yùn)行時崩潰了,檢查點(diǎn)沒有執(zhí)行。這樣重新啟動時,Oracle會執(zhí)行實(shí)例恢復(fù)工作,即先執(zhí)行前滾、回滾操作,再把數(shù)據(jù)庫打開。
4) 數(shù)據(jù)文件檢查點(diǎn)SCN及系統(tǒng)檢查點(diǎn)SCN比文件頭啟動SCN大:這時的情況是:系統(tǒng)發(fā)生介質(zhì)故障,數(shù)據(jù)文件被以前的備份代替,控制文件中的數(shù)據(jù)文件檢查點(diǎn)SCN肯定比文件頭中的啟動SCN要大,這樣Oracle就知道要對這個文件進(jìn)行介質(zhì)恢復(fù)。這時要通過下面語句恢復(fù)數(shù)據(jù)庫:
recover database ……
5) 系統(tǒng)檢查點(diǎn)SCN比數(shù)據(jù)文件SCN及文件頭啟動SCN大:
有些表空間是只讀的,這時控制文件中的系統(tǒng)檢查點(diǎn)SCN號會不斷增長,而數(shù)據(jù)文件SCN號和文件頭中的啟動SCN號會停止更新(直到表空間又設(shè)置為可讀寫),顯然這時系統(tǒng)檢查點(diǎn)SCN號會大于數(shù)據(jù)文件SCN和文件頭啟動SCN。
6) 系統(tǒng)檢查點(diǎn)SCN及數(shù)據(jù)文件SCN比文件頭啟動SCN小:
在數(shù)據(jù)庫恢復(fù)時,控制文件可能不是最新的,即把一個較早的控制文件還原為當(dāng)前的控制文件,然后再執(zhí)行恢復(fù)操作,這時控制文件中的系統(tǒng)檢查點(diǎn)SCN和數(shù)據(jù)文件SCN可能比文件頭的啟動SCN小。這時恢復(fù)數(shù)據(jù)庫要用下面命令:
recover database using Backup Controlfile或其他的恢復(fù)語句
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
