oracle提供了豐富、靈活的備份、還原、恢複管理機制和手段!
首先要明確的是這三個概念:
- 備份——backup:基於狀態點的“拍照”、歸檔
- 還原——restore:復原到“拍照”的狀態點、解檔、檔案複位
- 恢複——recover:從“拍照”的狀態點前滾,重演所有的改變。這其中又有手工管理的recover和smon自動管理的recove。也是我們99%的管理工作!
oracle提供的管理手段
- sql(plus)語句,原始,但推薦!
- rman
- os操作
- oem
oracle的管理機制:(個人的淺顯認識)通過control file、datafile、online redo file、archived redo、undo 檔案的內部標識識別整個系統是否一致!!個人猜測這個內部標識由resetlogs時候的scn和scn組成!10g裡允許跨resetlogs恢複,猜想oracle這哥們可能允許在某些條件下以scn作為一致的標識了!
如果?和?不一致了:?..
- online:別廢話!resetlogs
- controlfile:restore或者create controlfile,可以選擇resetlogs 或 noresetlogs——關鍵看:datafile和online是否一致來決定是否resetlogs
- datafile:【先restore 】再 recover,根據情況決定是否resetlogs。 或者 create controlfile,這就必須得resetlogs了
- 以上各種情況的複合情形,也可以在各階段綜合應用以上的各種情況
- archived redo不連續、不一致、損壞:即使上帝在,也不可能通過應用這些檔案來recover了。查清這些archive redo日誌還有多少利用價值吧,不行的話,delete吧。這些檔案可是進行恢複的必要條件!無論是不完全恢複到 scn、time、sequence#、cancel,本質上就是依次應用scn!!!
- undo檔案在recover過程中的作用?本人還未弄明白,相必是僅僅提供控制檔案的undospace空間用,要oracle不起不來啊;在recover過程結束時候,oracle並不做任何處理或者僅僅是重新初始化該檔案;而online redo中的commit事務會應用到datafile,未commit事務從online redo檔案中直接刪除,否則依照smon自動recover的處理rollback undo檔案中的undo內容,而此時undo檔案中並不存在,那不就出問題了!
oracle提供的管理類型
- 冷、熱:oracle的相關檔案是否鎖定
- 邏輯、物理:是oracle的資料,還是檔案結構和資料
- 完全、不完全:是否是全部的東東(相關檔案、相關資料、相關曆史...)
backup:對象datafile、undofile、archived logfile、spfile、controlfile
- os冷備份:關閉oracle資料庫,保持所有相關檔案一致。copy,之後....,想resetlogs就resetlogs,想noresetlogs就noresetlogs。
- datafile熱備:將oracle至於backup狀態,alter database {begin|end} backup ,然後copy,
- controlfile的熱備:alter database backup controlfile to filespec [reuse]
- controlfile for standby的熱備:alter database create {physical|logical}standby controlfile as filespec [reuse]
- spfile|pfile的熱備:os下直接copy。因為oracle並不鎖定此檔案。
- pwd檔案的熱備:os下直接copy。因為oracle並不鎖定此檔案。
- archived log的熱備:os下直接copy................................................這也算!
- rman方式下的熱備:將隱藏一起手工的os的copy、路徑、命名、記錄問題。因此:十分推薦。不過要注意備份全相關的檔案。否則處理起來也比較麻煩!
- exp邏輯倒出備份,注意nls_lang的設定問題
- expdp伺服器倒出備份。注意設定directory對象
restore:
- 像spfile|pfile、pwdsid、archivedlog可以隨時隨地的restore,前提是他們確實是有效
- controfile:在nomount狀態下,可以利用之前的冷備份直接restore;
- datafile:在nomount狀態下,可以利用之前的冷備份直接restore;
- rman方式下的restore:將隱藏一起手工的os的copy、路徑、命名、記錄問題。因此:十分推薦。
- imp邏輯匯入
- impdp伺服器邏輯匯入
recover:沒有什麼可以說的,基本上就要依賴online redo 、archived redo 進行完全 或 不完全的恢複了!!!所以,archived redo 檔案至關重要!
- rman方式下的recover:將隱藏一起手工的os的copy、路徑、命名、記錄問題。因此:十分推薦。
- recover {cancel|continue[default]} --mount--取消、繼續recove會話
- recover logfile 'filespec' --mount--直接應用logfile進行recove會話
- recover [automatic] [from 'location'].... [test] [allow n corruption] --mount--automatic
指出recove自動搜尋本地可用的log_archive_dest[_1]或指定的location的符合log_archive_famat的
archived
redo檔案,並applying,如果檔案沒有搜到或終止,則彈出prompt建議的automatic的檔案名稱。test意思時類比recover。
allow n corrupton意思是允許archived
redo檔案有n個壞塊存在,用於test時可以指定大於1的值。而當真正應用recover時,只能是0、1。
- recover database until {cancel|time datatime|change scn} [using backup controlfile] --mount--recover整個資料庫到時間點、scn、cancel
recover tablespace tbs,...
- recover datafile {filenumber|filename},...
- recover standby tablespace tbs,... until controlfile
- recover standby datafile {filenumber|filename},... until controlfile
- recover managed standby database :
- using current logfile [nodelay] [disconnect]
- until change scn [nodelay] [disconnect]
- finish [force] [{wait|nowait}]
- cancel [{immediate|{wait|nowait}}]