資料開啟時,兩次比較詳解

2021-06-27 11:49:27 字數 2231 閱讀 2792

open時檢查的2步是:檢查點計數器,開始和結束scn

這裡有4個scn參與了這兩步檢查,其中在控制檔案中有3個scn參與了,資料檔案中有1個scn參與了

1.system checkpoint scn(控制檔案中)

select checkpoint_change# from v$database;

從v$database中查到的checkpoint_change#就是system checkpoint scn,這個系統檢查點是用來判斷控制檔案是否是當前的

2.datafile checkpoint scn(控制檔案中)

select name,checkpoint_change# from v$datafile where name like '%users01%';

每個資料檔案在控制檔案中都有個檢查點scn,v$datafile的checkpoint_change#是datafile checkpoint scn,它是控制檔案的檢查點資訊,不是實際資料檔案的檢查點scn

3.stop scn(控制檔案中)

select name,last_change# from v$datafile where name like '%users01%';

last_change#是stop scn,它是用來控制崩潰恢復的,如果是讀寫狀態的online資料檔案,此值是null,也就是結束scn無窮大

4.start scn(資料檔案中)

select name,checkpoint_change# from v$datafile_header where name like '%users01%';

v$datafile_header的checkpoint_change#就是開始scn

資料庫開啟時的兩次比較

第1次比較(判斷介質恢復)

檢視控制檔案和資料檔案的checkpoint_change#是否相等,這裡用checkpoint_change#來判斷

select 'controlfile' "scn location",name,checkpoint_change# from v$datafile where lower(name) like '%users01%'

union

select 'file header',name,checkpoint_change# from v$datafile_header where lower(name) like '%users01%';

如果兩個scn不一致:

開始scn > datafile checkpoint scn,說明控制檔案是早期的

開始scn < datafile checkpoint scn,說明資料檔案是老的,需要介質恢復,在恢復最關鍵的是備份檔案的開始scn

第2次檢查(判斷崩潰恢復)

檢視控制檔案中的結束scn和資料檔案開始scn,不相等就需要進行崩潰恢復

select 'controlfile' "scn location",name,last_change#

from v$datafile where name like '%users01%'

union

select 'file header',name,checkpoint_change#

from v$datafile_header where name like '%users01%';

如果用的是老的控制檔案,在開啟的時候就需要借助system checkpoint scn

如果system checkpoint scn < 所有資料檔案開始scn:說明該控制檔案是備份控制,不是當前控制檔案

查詢老控制檔案的語句

select 'controlfile' "scn location",'system checkpoint' name,checkpoint_change#

from v$database

union

select 'file in controlfile',name,checkpoint_change#

from v$datafile where name like 'users01%'

union

select 'file header',name,checkpoint_change#

from v$datafile_header where name like '%users01%';

控制檔案中資料檔案的檢查點scn與開始scn來判斷介質恢復

結束scn與開始scn來判斷崩潰恢復

系統檢查點與開始scn來判斷是否備份控制檔案

QFileDialog開啟兩次的解決方法

最開始用語句qstring filepath qfiledialog getopenfilename 來實現開啟檔案,後來發現此種方法無法知道使用者點選的是 開啟 還是 取消 因此改為 qfiledialog filedialog new qfiledialog this if qfiledialo...

前端 傳送請求時,同時出現兩次請求

1事故情況 在前端ajax請求資料的時候,有時候會向後台一次性傳送兩次請求,這兩次請求第一次無返回資料,第二次才會返回正確資料。2事故原因 原來對於跨域,有兩種不同的請求型別。分別為簡單跨域請求和複雜跨域請求 帶預檢的跨域請求 3複雜跨域 非簡單請求的cors請求,會在正式通訊之前,增加一次http...

前端使用ajax時,自動請求了兩次

如下 之所以會傳送2次請求,那是因為我們使用了帶預檢 preflighted 的跨域請求。該請求會在傳送真實的請求之前傳送乙個型別為options的預檢請求。預檢請求會檢測伺服器是否支援我們的真實請求所需要的跨域資源,唯有資源滿足條件才會傳送真實的請求。比如我們在請求頭部增加了authorizati...