其實,蠻蛋疼的,體繫結構要想深入的理解,還需要配合後續的備份與恢複的實驗和原理。但不管啦,先稍微瞭解一下。
控制檔案是個相當小的二進位檔案,最多能增長到64m左右。
參數檔案告訴執行個體控制檔案的位置。而控制檔案告訴執行個體:資料庫名,資料檔案的名稱及其位置,線上重做記錄檔的名稱及其位置,以及系統和各個資料檔案的SCN資訊。
我們的Oracle內部的幾個人,都比較喜歡往ctl上面寫東東,比如:
server process會把資料庫結構的變化更新到control file
LGWR會把當前記錄序號記錄到control file
CKPT會把檢查點資訊記錄到control file
ARCn會把歸檔日誌資訊記錄到control file
有了以上的資訊,因此,在mount階段,SMON會去讀控制檔案,確認它上面的記錄是否正確:
1)上次關機的SCN A
上次關機的checkpoint B
2)日誌組最後一條的記錄 C
RBA指標的位置 D
若順利關機,則 A=B C=D
若不順利關機,則 A>B D>C
這時,就需要派SMON去前滾,按重做日誌的記錄在記憶體中重做一遍,直到C=D。
以下是我的控制檔案的部分摘錄:
平台是:RHEL-5.8 ora10g
*** SERVICE NAME:() 2012-07-10 10:09:23.691
*** SESSION ID:(159.3) 2012-07-10 10:09:23.691
Thread 1 checkpoint: logseq 17, block 2, scn 676899
cache-low rba: logseq 17, block 40599
on-disk rba: logseq 17, block 40868, scn 697180
start recovery at logseq 17, block 40599, scn 0
我們對控制檔案的一些常見操作,比如:
1)如何多路鏡像控制檔案?
順利關機,cp一份,修改pfile,產生spfile,重啟資料庫
2)查看控制檔案的位置?
i SQL> show parameter control_files
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_files string /u01/app/oracle/oradata/ORCL/c
ontrolfile/o1_mf_7xzsjpnk_.ctl
, /u01/app/oracle/flash_recove
ry_area/ORCL/controlfile/o1_mf
_7xzsjq6j_.ctl
ii SQL> select name from v$controlfile;
NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/ORCL/controlfile/o1_mf_7xzsjpnk_.ctl
/u01/app/oracle/flash_recovery_area/ORCL/controlfile/o1_mf_7xzsjq6j_.ctl
iii SQL> select value from v$parameter where name='control_files';
VALUE
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/ORCL/controlfile/o1_mf_7xzsjpnk_.ctl, /u01/app/oracle/fl
ash_recovery_area/ORCL/controlfile/o1_mf_7xzsjq6j_.ctl
3)查看控制檔案的內容?
alter database backup controlfile to trace;
然後到udump下去找