熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

教你輕松掌握Oracle數據庫的後備和恢復

2022-06-13   來源: Oracle 

  當我們使用一個數據庫時總希望數據庫的內容是可靠的正確的但由於計算機系統的故障(硬件故障軟件故障網絡故障進程故障和系統故障)影響數據庫系統的操作影響數據庫中數據的正確性甚至破壞數據庫使數據庫中全部或部分數據丟失因此當發生上述故障後希望能重新建立一個完整的數據庫該處理稱為數據庫恢復恢復子系統是數據庫管理系統的一個重要組成部分恢復處理隨所發生的故障類型所影響的結構而變化

  ()恢復數據庫所使用的結構

  ORACLE數據庫使用幾種結構對可能故障來保護數據數據庫後備日志回滾段和控制文件

  數據庫後備是由構成Oracle數據庫的物理文件的操作系統後備所組成當介質故障時進行數據庫恢復利用後備文件恢復毀壞的數據文件或控制文件

  日志每一個Oracle數據庫實例都提供記錄數據庫中所作的全部修改一個實例的日志至少由兩個日志文件組成當實例故障或介質故障時進行數據庫部分恢復利用數據庫日志中的改變應用於數據文件修改數據庫數據到故障出現的時刻數據庫日志由兩部分組成在線日志和歸檔日志

  每一個運行的Oracle數據庫實例相應地有一個在線日志它與Oracle後台進程LGWR一起工作立即記錄該實例所作的全部修改在線日志由兩個或多個預期分配的文件組成以循環方式使用

  歸檔日志是可選擇的一個Oracle數據庫實例一旦在線日志填滿後可形成在線日志的歸檔文件歸檔的在線日志文件被唯一標識並合成歸檔日志

  回滾段用於存儲正在進行的事務(為未提交的事務)所修改值的老值該信息在數據庫恢復過程中用於撤消任何非提交的修改

  控制文件一般用於存儲數據庫的物理結構的狀態控制文件中某些狀態信息在實例恢復和介質恢復期間用於引導Oracle

  ()在線日志

  一個Oracle數據庫的每一實例有一個相關聯的在線日志一個在線日志由多個在線日志文件組成在線日志文件填入日志項日志項記錄的數據用於重構對數據庫所作的全部修改後台進程LGWR以循環方式寫入在線日志文件當當前的在線日志文件寫滿後LGWR寫入到下一可用在線日志文件當最後一個可用的在線日志文件的檢查點已完成時即可使用如果歸檔不實施一個已填滿的在線日志文件一當包含該在線日志文件的檢查點完成該文件已被歸檔後即可使用在任何時候僅有一個在線日志文件被寫入存儲日志項它被稱為活動的或當前在線日志文件其它的在線日志文件為不活動的在線日志文件

  Oracle結束寫入一在線日志文件並開始寫入到另一個在線日志文件的點稱為日志開關日志開關在當前在線日志文件完全填滿必須繼續寫入到下一個在線日志文件時總出現也可由DBA強制日志開關每一日志開關出現時每一在線日志文件賦給一個新的日志序列號如果在線日志文件被歸檔在歸檔日志文件中包含有它的日志序列號

  Oracle後台進程DBWR(數據庫寫)將SGA中所有被修改的數據庫緩沖區(包含提交和未提交的)寫入到數據文件這樣的事件稱為出現一個檢查點因下列原因實現檢查點

  ◆檢查點確保將內存中經常改變的數據段塊每隔一定時間寫入到數據文件由於DBWR使用最近最少使用算法經常修改的數據段塊從不會作為最近最少使用塊如果檢查點不出現它從不會寫入磁盤

  ◆由於直至檢查點時所有的數據庫修改已記錄到數據文件先於檢查點的日志項在實例恢復時不再需要應用於數據文件所以檢查點可加快實例恢復

  雖然檢查點有一些開銷但Oracle既不停止活動又不影響當前事務由於DBWR不斷地將數據庫緩沖區寫入到磁盤所以一個檢查點一次不必寫許多數據塊一個檢查點保證自前一個檢查點以來的全部修改數據塊寫入到磁盤檢查點不管填滿的在線日志文件是否正在歸檔它總是出現如果實施歸檔在LGWR重用在線日志文件之前檢查點必須完成並且所填滿的在線日志文件必須被歸檔

  檢查點可對數據庫的全部數據文件出現(稱為數據庫檢查點)也可對指定的數據文件出現下面說明一下什麼時候出現檢查點及出現什麼情況

  ◆在每一個日志開關處自動地出現一數據庫檢查點如果前一個數據庫檢查點正在處理由日志開關實施的檢查點優於當前檢查點

  ◆初始化參數據LOGCHECKPOINTINTERVAL設置所實施的數據庫檢查點當預定的日志塊數被填滿後(自最後一個數據庫檢查點以來)實施一數據庫檢查點另一個參數LOGCHECKPOINTTIMEOUT可設置自上一個數據庫檢查點開始之後指定秒數後實施一數據庫檢查點這種選擇對使用非常大的日志文件時有用它在日志開頭之間增加檢查點由初始化參數所啟動的數據庫檢查點只有在前一個檢查點完成後才能啟動

  ◆當一在線表空間開始後備時僅對構成該空間的數據文件實施一檢查點該檢查點壓倒仍在進行中的任何檢查點

  ◆當DBA使一表空間離線時僅對構成該表空間的在線文件實施一檢查點

  ◆當DBA以正常或立即方式關閉一實例時Oracle在實例關閉之前實施一數據庫檢查點該檢查點壓倒任何運行檢查點

  ◆DBA可要求實施一數據庫檢查點該檢查點壓倒任何運行檢查點

  檢查點機制當檢查點出現時檢查點後台進程記住寫入在線文件的下一日志行的位置並通知數據庫寫後台進程將SGA中修改的數據庫緩沖區寫入到磁盤上的數據文件然後由CKPT修改全部控制文件和數據文件的標頭反映該最後檢查點當檢查點不發生DBWR當需要時僅將最近最少使用的數據庫緩沖區寫入磁盤為新數據准備緩沖區

  鏡象在線日志文件為了安全將實例的在線日志文件鏡象到它的在線日志文件ORACLE提供鏡象功能當具有鏡象在線日志文件時LGWR同時將同一日志信息寫入到多個同樣的在線日志文件日志文件分成組每個組中的日志文件稱為成員每個組中的全部成員同時活動由LGWR賦給相同的日志序列號如果使用鏡象在線日志則可建立在線日志文件組在組中的每一成員要求是同一大小

  鏡象在線日志的機制LGWR總是尋找組的全部成員對一組的全部成員並行地寫然後轉換到下一組的全部成員並行地寫

  每個數據庫實例有自己的在線日志組這些在線日志組可以是鏡象的或不是稱為實例的在線日志線索在典型配置中一個數據庫實例存取一個ORACLE數據庫於是僅一個線索存在然而在運行ORACLE並行服務器中兩個或多個實例並行地存取單個數據庫在這種情況下每個實例有自己的線索

  ()歸檔日志

  Oracle要將填滿的在線日志文件組歸檔時則要建立歸檔日志或稱離線日志其對數據庫後備和恢復有下列用處

  ◆數據庫後備以及在線和歸檔日志文件在操作系統或磁盤故障中可保證全部提交的事務可被恢復

  ◆在數據庫打開時和正常系統使用下如果歸檔日志是永久保持在線後備可以進行和使用

  如果用戶數據庫要求在任何磁盤故障的事件中不丟失任何數據那麼歸檔日志必須要存在歸檔已填滿的在線日志文件可能需要DBA執行額外的管理操作

  歸檔機制決定於歸檔設置歸檔已填滿的在線日志組的機制可由Oracle後台進程ARCH自動歸檔或由用戶進程發出語句手工地歸檔當日志組變為不活動日志開關指向下一組已完成時ARCH可歸檔一組可存取該組的任何或全部成員完成歸檔組在線日志文件歸檔之後才可為LGWR重用當使用歸檔時必須指定歸檔目標指向一存儲設備它不同於個有數據文件在線日志文件和控制文件的設備理想的是將歸檔日志文件永久地移到離線存儲設備如磁帶

  數據庫可運行在兩種不同方式下NOARCHIVELOG方式或ARCHIVELOG方式數據庫在NOARCHIVELOG方式下使用時不能進行在線日志的歸檔在該數據庫控制文件指明填滿的組不需要歸檔所以一當填滿的組成為活動在日志開關的檢查點完成該組即可被LGWR重用在該方式下僅能保護數據庫實例故障不能保護介質(磁盤)故障利用存儲在在線日志中的信息可實現實例故障恢復

  如果數據庫在ARCHIVELOG方式下可實施在線日志的歸檔在控制文件中指明填滿的日志文件組在歸檔之前不能重用一旦組成為不活動執行歸檔的進程立即可使用該組

  在實例起動時通過參數LOGARCHIVESTART設置可啟動ARCH進程否則ARCH進程在實例啟動時不能被啟動然而DBA在憑借時候可交互地啟動或停止自動歸檔 一旦在線日志文件組變為不活動時ARCH進程自動對它歸檔

  如果數據庫在ARCHIVELOG方式下運行DBA可手工歸檔填滿的不活動的日志文件組不管自動歸檔是可以還是不可以

  ()數據庫後備

  不管為ORACLE數據庫設計成什麼樣的後備或恢復模式數據庫數據文件日志文件和控制文件的操作系統後備是絕對需要的它是保護介質故障的策略部分操作系統後備有完全後備和部分後備

  ◆完全後備一個完全後備將構成ORACLE數據庫的全部數據庫文件在線日志文件和控制文件的一個操作系統後備一個完全後備在數據庫正常關閉之後進行不能在實例故障後進行在此時所有構成數據庫的全部文件是關閉的並與當前點相一致在數據庫打開時不能進行完全後備由完全後備得到的數據文件在任何類型的介質恢復模式中是有用的

  ◆部分後備

  部分後備為除完全後備外的任何操作系統後備可在數據庫打開或關閉下進行如單個表空間中全部數據文件後備單個數據文件後備和控制文件後備部分後備僅對在ARCHIVELOG方式下運行數據庫有用因為存在的歸檔日志數據文件可由部分後備恢復在恢復過程中與數據庫其它部分一致

  ()數據庫恢復

  ◆實例故障的恢復

  當實例意外地(如掉電後台進程故障等)或預料地(發出SHUTDOUM ABORT語句)中止時出現實例故障此時需要實例恢復實例恢復將數據庫恢復一故障之前的事務一致狀態如果在在線後備發現實例故障則需介質恢復在其它情況Oracle在下次數據庫起動時(對新實例裝配和打開)自動地執行實例恢復如果需要從裝配狀態變為打開狀態自動地激發實例恢復由下列處理

  ()為了解恢復數據文件中沒有記錄的數據進行向前滾該數據記錄在在線日志包括對回滾段的內容恢復

  ()回滾未提交的事務按步重新生成回滾段所指定的操作

  ()釋放在故障時正在處理事務所持有的資源

  ()解決在故障時正經歷一階段提交的任何懸而未決的分布事務

  ◆介質故障的恢復

  介質故障是當一個文件一個文件的部分或一磁盤不能讀或不能寫時出現的故障介質故障的恢復有兩種形式決定於數據庫運行的歸檔方式

  ◆如果數據庫是可運行的以致它的在線日志僅可重用但不能歸檔此時介質恢復為使用最新的完全後備的簡單恢復在完全後備執行的工作必須手工地重作

  ◆如果數據庫可運行其在線日志是被歸檔的該介質故障的恢復是一個實際恢復過程重構受損的數據庫恢復到介質故障前的一個指定事務一致狀態

  不管哪種形式介質故障的恢復總是將整個數據庫恢復到故障之前的一個事務一致狀態如果數據庫是在ARCHIVELOG方式運行可有不同類型的介質恢復完全介質恢復和不完全介質恢復

  完全介質恢復可恢復全部丟失的修改僅當所有必要的日志可用時才可能有不同類型的完全介質恢復可使用其決定於毀壞文件和數據庫的可用性

  ◆關閉數據庫的恢復當數據庫可被裝配卻是關閉的完全不能正常使用此時可進行全部的或單個毀壞數據文件的完全介質恢復

  ◆打開數據庫的離線表空間的恢復當數據庫是打開的完全介質恢復可以處理未損的數據庫表空間是在線的可以使用而受損耗捕空間是離線的其所有數據文件作為恢復的單位

  ◆打開數據庫的離線表間的單個數據文件的恢復當數據庫是打開的完全介質恢復可以處理未損的數據庫表空間是在線的可以使用而所損的表空間是離線的該表空間的指定所損的數據文件可被恢復

  ◆使用後備的控制文件的完全介質恢復當控制文件所有拷貝由於磁盤故障而受損時可進行介質恢復而不丟失數據

  不完全介質恢復是在完全介質恢復不可能或不要求時進行的介質恢復重構受損的數據庫使其恢復介質故障前或用戶出錯之前的一個事務一致性狀態不完全介質恢復有不同類型的使用決定於需要不完全介質恢復的情況有下列類型基於撤消基於時間和基於修改的不完全恢復

  基於撤消恢復在某種情況不完全介質恢復必須被控制DBA可撤消在指定點的操作基於撤消的恢復地在一個或多個日志組(在線的或歸檔的)已被介質故障所破壞不能用於恢復過程時使用所以介質恢復必須控制以致在使用最近的未損的日志組於數據文件後中止恢復操作

  基於時間和基於修改的恢復如果DBA希望恢復到過去的某個指定點不完全介質恢復地理想的可在下列情況下使用

  ◆當用戶意外地刪除一表並注意到錯誤提交的估計時間DBA可立即關閉數據庫恢復它到用戶錯誤之前時刻

  ◆由於系統故障一個在線日志文件的部分被破壞所以活動的日志文件突然不可使用實例被中止此時需要介質恢復在恢復中可使用當前在線日志文件的未損部分DBA利用基於時間的恢復一旦有將效的在線日志已應用於數據文件後停止恢復過程

  在這兩種情況下不完全介質恢復的終點可由時間點或系統修改號(SCN)來指定


From:http://tw.wingwit.com/Article/program/Oracle/201311/18592.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.