備份與恢復是我們使用數據庫中不可缺少的部分也是我們在使用數據庫時會經常碰到的問題當我們使用一個數據庫時總希望數據庫的內容是可靠的正確的但由於計算機系統的故障(硬件故障軟件故障網絡故障進程故障和系統故障)影響數據庫系統的操作影響數據庫中數據的正確性甚至破壞數據庫使數據庫中全部或部分數據丟失因此當發生上述故障後希望能重新建立一個完整的數據庫該處理稱為數據庫恢復恢復子系統是數據庫管理系統的一個重要組成部分恢復處理隨所發生的故障類型所影響的結構而變化
恢復數據庫所使用的結構
ORACLE數據庫使用幾種結構對可能故障來保護數據數據庫後備日志回滾段和控制文件
數據庫後備是由構成Oracle數據庫的物理文件的操作系統後備所組成當介質故障時進行數據庫恢復利用後備文件恢復毀壞的數據文件或控制文件
日志每一個Oracle數據庫實例都提供記錄數據庫中所作的全部修改一個實例的日志至少由兩個日志文件組成當實例故障或介質故障時進行數據庫部分恢復利用數據庫日志中的改變應用於數據文件修改數據庫數據到故障出現的時刻數據庫日志由兩部分組成在線日志和歸檔日志
每一個運行的Oracle數據庫實例相應地有一個在線日志它與Oracle後台進程LGWR一起工作立即記錄該實例所作的全部修改在線日志由兩個或多個預期分配的文件組成以循環方式使用
歸檔日志是可選擇的一個Oracle數據庫實例一旦在線日志填滿後可形成在線日志的歸檔文件歸檔的在線日志文件被唯一標識並合成歸檔日志
回滾段用於存儲正在進行的事務(為未提交的事務)所修改值的老值該信息在數據庫恢復過程中用於撤消任何非提交的修改
控制文件一般用於存儲數據庫的物理結構的狀態控制文件中某些狀態信息在實例恢復和介質恢復期間用於引導Oracle
在線日志
一個Oracle數據庫的每一實例有一個相關聯的在線日志一個在線日志由多個在線日志文件組成在線日志文件填入日志項日志項記錄的數據用於重構對數據庫所作的全部修改後台進程LGWR以循環方式寫入在線日志文件當當前的在線日志文件寫滿後LGWR寫入到下一可用在線日志文件當最後一個可用的在線日志文件的檢查點已完成時即可使用如果歸檔不實施一個已填滿的在線日志文件一當包含該在線日志文件的檢查點完成該文件已被歸檔後即可使用在任何時候僅有一個在線日志文件被寫入存儲日志項它被稱為活動的或當前在線日志文件其它的在線日志文件為不活動的在線日志文件
Oracle結束寫入一在線日志文件並開始寫入到另一個在線日志文件的點稱為日志開關日志開關在當前在線日志文件完全填滿必須繼續寫入到下一個在線日志文件時總出現也可由DBA強制日志開關每一日志開關出現時每一在線日志文件賦給一個新的日志序列號如果在線日志文件被歸檔在歸檔日志文件中包含有它的日志序列號
檢查點機制當檢查點出現時檢查點後台進程記住寫入在線文件的下一日志行的位置並通知數據庫寫後台進程將SGA中修改的數據庫緩沖區寫入到磁盤上的數據文件然後由CKPT修改全部控制文件和數據文件的標頭反映該最後檢查點當檢查點不發生DBWR當需要時僅將最近最少使用的數據庫緩沖區寫入磁盤為新數據准備緩沖區
歸檔日志
Oracle要將填滿的在線日志文件組歸檔時則要建立歸檔日志或稱離線日志其對數據庫後備和恢復有下列用處
數據庫後備以及在線和歸檔日志文件在操作系統或磁盤故障中可保證全部提交的事務可被恢復
在數據庫打開時和正常系統使用下如果歸檔日志是永久保持在線後備可以進行和使用
如果用戶數據庫要求在任何磁盤故障的事件中不丟失任何數據那麼歸檔日志必須要存在歸檔已填滿的在線日志文件可能需要DBA執行額外的管理操作
歸檔機制決定於歸檔設置歸檔已填滿的在線日志組的機制可由Oracle後台進程ARCH自動歸檔或由用戶進程發出語句手工地歸檔當日志組變為不活動日志開關指向下一組已完成時ARCH可歸檔一組可存取該組的任何或全部成員完成歸檔組在線日志文件歸檔之後才可為LGWR重用當使用歸檔時必須指定歸檔目標指向一存儲設備它不同於個有數據文件在線日志文件和控制文件的設備理想的是將歸檔日志文件永久地移到離線存儲設備如磁帶
數據庫可運行在兩種不同方式下NOARCHIVELOG方式或ARCHIVELOG方式數據庫在NOARCHIVELOG方式下使用時不能進行在線日志的歸檔在該數據庫控制文件指明填滿的組不需要歸檔所以一當填滿的組成為活動在日志開關的檢查點完成該組即可被LGWR重用在該方式下僅能保護數據庫實例故障不能保護介質(磁盤)故障利用存儲在在線日志中的信息可實現實例故障恢復
數據庫後備
不管為ORACLE數據庫設計成什麼樣的後備或恢復模式數據庫數據文件日志文件和控制文件的操作系統後備是絕對需要的它是保護介質故障的策略部分操作系統後備有完全後備和部分後備
完全後備一個完全後備將構成ORACLE數據庫的全部數據庫文件在線日志文件和控制文件的一個操作系統後備一個完全後備在數據庫正常關閉之後進行不能在實例故障後進行在此時所有構成數據庫的全部文件是關閉的並與當前點相一致在數據庫打開時不能進行完全後備由完全後備得到的數據文件在任何類型的介質恢復模式中是有用的
部分後備
部分後備為除完全後備外的任何操作系統後備可在數據庫打開或關閉下進行如單個表空間中全部數據文件後備單個數據文件後備和控制文件後備部分後備僅對在ARCHIVELOG方式下運行數據庫有用因為存在的歸檔日志數據文件可由部分後備恢復在恢復過程中與數據庫其它部分一致
數據庫恢復
實例故障的恢復
當實例意外地(如掉電後台進程故障等)或預料地(發出SHUTDOUM ABORT語句)中止時出現實例故障此時需要實例恢復實例恢復將數據庫恢復一故障之前的事務一致狀態如果在在線後備發現實例故障則需介質恢復在其它情況Oracle在下次數據庫起動時(對新實例裝配和打開)自動地執行實例恢復如果需要從裝配狀態變為打開狀態自動地激發實例恢復由下列處理
()為了解恢復數據文件中沒有記錄的數據進行向前滾該數據記錄在在線日志包括對回滾段的內容恢復
()回滾未提交的事務按步重新生成回滾段所指定的操作
()釋放在故障時正在處理事務所持有的資源
()解決在故障時正經歷一階段提交的任何懸而未決的分布事務
From:http://tw.wingwit.com/Article/program/SQL/201311/16358.html