oracle系列(五)高級DBA必知的Oracle的備份與恢復(全錄收集)

博主QQ819594300sql

博客地址:http://zpf666.blog.51cto.com/數據庫

有什麼疑問的朋友能夠聯繫博主,博主會幫大家解答,謝謝支持!windows

數據庫備份與恢復是數據庫管理員必須掌握的。沒有任何系統能免遭硬盤物理損壞、粗心用戶的錯誤操做、或一些可能會威脅到存儲數據的潛在災難的侵襲。爲了可以最大限度地恢復數據庫數據,保證數據庫的安全運行,應該選擇最合理的備份方法來防止各類故障所致使的用戶數據丟失,本次主要介紹三種備份恢復技術,即RMAN技術、數據泵技術及閃回技術。api

1、備份與恢復概述安全

1、須要備份的緣由服務器

現實工做中有不少狀況均可能形成數據丟失,形成數據丟失的主要因素以下。網絡

介質故障:磁盤損壞、磁頭碰撞,瞬時強磁場干擾session

用戶的錯誤操做oracle

服務器的完全崩潰ide

計算機病毒

不可預料的因素:天然災害、電源故障、盜竊 

上面是一些可能的故障緣由,根據緣由能夠將oracle中的故障分爲如下4種類型。


wKioL1kpICGAW5YTAALnvrMYDi4074.jpg

1)語句故障

語句故障時在執行sql語句過程當中發生的邏輯故障。例如:向表中插入違反約束的無效數據,或者表空間沒有空間了致使沒法插入數據等。這時,應用人員或者DBA根據狀況進行相應處理及可。

2)用戶進程故障

當用戶程序出錯而沒法訪問oracle數據庫時,就會發生用戶進程故障,緣由是異常斷開鏈接或終止進程,若是網絡不通,客戶端計算機之外從新啓動,這些故障會致使用戶進程與服務器的鏈接意外終止。

用戶進程故障只會致使當前用戶沒法正常操做數據庫,但不會影響其餘用戶進程。當用戶進程出現故障時,進程監控程序(PMON)會自動執行進程恢復。PMON是oracle的後臺進程,用於檢測與用戶進程失去鏈接的服務器進程。PMON會經過回滾事務來處理故障,還將釋放進程當前佔用的資源。

3)實例故障

當oracle的數據庫實例因爲硬件故障或軟件問題而沒法繼續運行時,就會發生實例故障。硬件問題包括意外斷電,而軟件問題多是服務器操做系統崩潰。

當從新啓動數據庫時,若是發現實例故障,oracle會自動完成實例恢復。實例恢復將數據庫恢復到與故障以前的事務一致的狀態,oracle會自動回滾未提交的數據。

4)介質故障

介質故障是當一個數據庫文件、文件的部分或磁盤不能讀或不能寫時出現的故障。例如:硬盤磁頭損壞會致使而數據庫文件徹底損壞。要修復因爲介質故障引發的數據庫文件損壞,須要使用介質恢復。

 

2、備份與恢復的定義及分類

1、備份的定義及分類

備份就是把數據庫複製到轉儲設備的過程。其中轉儲設備是指用於放置數據庫副本的磁帶或磁盤。從不一樣的角度分類以下:

wKioL1kpICKy14uaAAJo61_QKXQ717.jpg

1)從物理與邏輯角度分類

從物理與邏輯角度分,備份能夠分爲物理備份和邏輯備份。

① 物理備份:

對數據庫操做系統的物理文件(如數據文件、控制文件和日誌文件)的備份。物理備份又能夠分爲脫機備份(冷備份)和聯機備份(熱備份),前者是在關閉數據庫的時候進行的,後者對正以歸檔日誌方式運行的數據庫進行備份。可使用oracle的恢復管理器(RMAN)或操做系統命令進行數據庫的物理備份。

② 邏輯備份

對數據庫邏輯組件(如表和存儲過程等數據庫對象)的備份。邏輯備份的手段不少,如傳統的EXP、數據泵EXPDP、數據庫閃回技術及第三方工具,均可以進行數據庫的邏輯備份。

 

2)從數據庫的備份策略角度分類

① 徹底備份:

每次對數據進行完整的備份。當發生數據丟失的災難狀況時,徹底備份無須依賴其餘信息,便可實現100%數據恢復,其恢復時間最短且操做最方便。

② 增量備份:

只有那些在上次徹底備份或者增量備份後被修改的文件纔會備份。優勢是備份數據量小,須要的時間短,缺點是恢復的時候須要依賴以前的備份記錄,出問題的風險較大。

③ 差別備份

備份那些自從上次徹底備份以後被修改過的文件。從差別備份中恢復數據庫時間較短,所以只須要兩份數據(最後一次徹底備份和最後一次差別備份),缺點是每次備份須要的時間較長。

 

2、恢復的定義及分類

恢復就是發生故障後,利用已備份的數據或控制文件,從新創建一個完整的數據庫。恢復分爲如下兩種類型。

1實例恢復:當oracle實例出現失敗後,oracle自動進行的恢復。

2介質恢復:當存放數據庫的介質出現故障時所作的恢復。介質恢復又分爲徹底恢復和不徹底恢復

徹底恢復:將數據庫恢復到數據庫失敗時的狀態。這種恢復是經過裝載數據庫備份,並用所有的重作日誌作到的。

不徹底恢復:將數據庫恢復到數據庫失敗前的某一時刻的狀態。這種恢復是經過裝載數據庫備份並應用部分的重作日誌作到的。進行不徹底恢復後,必須在啓動數據庫時用resetlogs選型重設聯機重作日誌。

 

 

3、使用RMAN工具

RMAN(recovery  manager)是oracle的一個重要工具,用於備份和恢復數據庫文件、歸檔日誌和控制文件。也能夠用來執行徹底或不徹底的數據庫恢復。RMAN有3種不一樣的用戶接口:命令行方式,GUI方式(集成在OEM中的備份管理器)、api方式(用於集成到第三方的備份軟件中)。它具備以下優勢

1)支持在線熱備份

2)支持多級增量備份

3)支持並行備份、恢復

4)減小所須要的備分量

5)備份、恢復使用簡單

RMAN有豐富的特性集。隨着oracle新版本的發佈,RMAN特性也不斷加強,使得RMAN幾乎在任何狀況下均可以備份和恢復數據庫。其中不少的新特性都是針對平常工做中所遇到的問題和困難開發的。

1、RMAN組件

wKiom1kpICPR1HymAAJYlK1lKOk729.jpg

1)target database(目標數據庫)

目標數據庫就是須要RMAN對其進行備份與恢復的數據庫。RMAN能夠備份數據文件、控制文件、歸檔日誌文件、spfile。

 

2)server  session(服務器會話)

RMAN啓動數據庫上的oracle服務器進程,並創建一個與目標數據庫的會話。由目標數據庫上的服務器進程進行備份、還原、恢復的實際操做。

 

3)RMAN repository(RMAN資料庫)

RMAN使用過程當中會用到的控制信息,是一些關於備份、歸檔日誌及RMAN活動的元數據。

 

4)recovery  catalog(恢復目錄)

恢復目錄是創建在RMAN恢復目錄數據庫上的一種schema對象,用於保存RMAN資料庫數據。

恢復目錄是一個可選的組件。RMAN會將資料庫數據記錄在目標數據庫的控制文件中,但這樣不夠安全,由於一旦目標數據庫的控制文件損壞就意味着全部的RMAN備份失效。因此建議在單獨的一個數據中創建恢復目錄另外保存一份資料庫數據。

對於

對於大部分中等環境的企業環境,將RMAN備份信息存儲在恢復目錄數據庫中,而不是存儲在目標數據庫的控制文件中,這樣可以發揮RMAN工具的所有功能,此外,RMAN的不少高級功能也只有在建立了恢復目錄的環境下才被支持。

 

5)MML(媒體管理庫)

MML(media management layer)是第三方工具或軟件,用於管理對磁帶的讀寫與文件的跟蹤管理,若是你要想直接經過RMAN備份到磁帶上,就必須配置媒體管理層,媒體管理層的工具和RMAN共同完成備份與恢復。

 

6)快閃恢復區

快閃恢復區是oracle數據庫用於保存全部與恢復相關的文件的默認磁盤位置。這些相關文件包括歸檔日誌、RMAN備份、控制文件自動備份、複用的控制文件和重作日誌副本及閃回日誌文件。

 

7)輔助數據庫

在正常使用時,RMAN會與目標數據庫一塊兒使用,若是建立了恢復目錄數據庫,那麼也會與恢復目錄數據庫一塊兒使用。在某些狀況下,但願建立輔助數據庫,輔助數據庫是使用RMAN從目標數據庫的備份中建立新的數據庫。輔助數據庫能被建立做爲備用數據庫使用。在產品數據庫發生災難時,可以在不丟失任何數據及停機時間最短的狀況下切換至備用數據庫。

 

2、建立恢復目錄

wKioL1kpICOQDgB3AAIDU3HvXUI010.jpg

恢復目錄存在於RMAN的目錄數據庫中,相似於標準的數據庫目錄,主要包含以下幾個部分的信息:

1)備份和恢復信息,能夠是多個目標數據庫

2)RMAN腳本,能夠存儲供重複使用

3)關於數據文件和日誌文件的本分信息

4)關於目標數據庫的表空間和數據文件的信息


建立恢復目錄

1)建立恢復目錄數據庫(在oracl數據庫中建立恢復目錄所用的表空間benet)

wKiom1kpICSzNRMWAAJDeidnVQ4806.jpg

2)在恢復目錄數據庫中建立RMAN 用戶並受權

wKiom1kpICWTKYGpAAHxZcG5DCU558.jpg

wKioL1kpICWC8MRPAAHqt0lwNwY943.jpg

3)在恢復目錄數據庫中建立恢復目錄

wKioL1kpICagDNFbAAFbEF0RgIY953.jpg

wKioL1kpICaAe1R6AAIgw1gjLmQ090.jpg

3、註冊目標數據庫到恢復目錄

登陸目標數據庫,若是要對目標數據庫進行註冊,能夠按照如下操做。

wKiom1kpICiz4LPVAANSZlYz4nE142.jpg

至此,完成了目標數據庫在恢復目錄中的註冊操做,此時就可使用RMAN的恢復目錄對目標數據庫進行備份和恢復操做。

4、通道分配

使用RMAN進行備份和恢復操做時,必須進行通道的分配,一個通道是RMAN和目標數據庫之間的一個鏈接,通道指定了某種類型的設備用於備份和恢復,RMAN可使用的通道設備包括磁盤與磁帶兩種。

1)自動通道配置

使用CONFIGURE命令配置自動通道。

wKiom1kpICmTZmBoAAMvVzQGL3E147.jpg

2)還能夠手動通道配置

wKiom1kpICuSCqyMAAMKQBMy36g702.jpg

3)顯示通道配置參數

wKioL1kpICuz47__AAHAIAhdTdk706.jpg

5、備份與恢復的相關概念與操做

1)備份集與備份片

備份集:備份集是第一次備份的集合,它包含本次備份的全部備份片,以oracle專有的格式保存,是一個邏輯數據的集合。

備份片:一個備份集由若干個備份片組成,每一個備份片是一個單獨的輸出文件,一個備份片的大小是有限制的,它的大小不能大於文件系統所支持的文件長度的最大值

2)配置備份集文件的格式

使用BACKUP命令進行備份時,須要明確備份文件的存儲路徑及文件名稱格式。其路徑和格式可使用FORMAT參數進行統一設置。FORMAT格式由兩部分組合,即存儲路徑和文件名稱。

若是沒有使用FORMAT指定存儲路徑和文件名稱格式,則默認狀況下BACKUP所產生的備份集將存儲在快閃恢復區中,RMAN自動使用%U來確保文件名稱不會重複。

FORMAT命令格式以下:

FORMAT ‘格式字符串’

其中格式字符串的文件名稱部分可使用替換變量,例如:FORMAT  ‘/backup/rmanback/%U’

經常使用的替換變量以下:

%c:備份片的拷貝數

%d:數據庫名稱

%D:位於該月中的第幾天(DD)

%M:位於該年中的第幾月(MM)

%F:一個基於DBID的惟一的名稱,它的形式爲C-||||||-YYYYMMDD-QQ。其中||||||爲該數據庫的DBID,YYYYMMDD爲日期,QQ是一個1-256的序列。

%n:數據庫名稱,向右填補到最大8個字符

%u:一個8個字符的名稱,它是根據備份集個數與建立時間信息成成的。

%p:該備份集的備份片號,從1開始到建立的文件數

%U:系統生成的一個惟一文件名,對於備份片來講,它的含義至關於%u_%p_%c。

%s:備份集的號

%t:備份集時間戳

%T:年月日格式(YYYYMMDD)

3)備份與恢復命令

① BACKUP命令用於備份數據庫文件,能夠將多個文件、表空間,整個數據庫以備份集形式備份到磁盤或磁帶上。在RUN命令外使用BACKUP命令,會自動使用自動通道;在RUN命令內使用BACKUP命令,若是定義了手動通道,則優先使用手動定義通道。

② 使用RMAN備份的數據庫也只能使用RMAN提供的恢復命令進行恢復。RMAN的恢復目錄中存儲了目標數據庫的備份信息。RMAN根據恢復目錄中存儲的信息,自動將數據庫同步恢復到某一個數據一致的狀態。

RMAN恢復數據庫時用到兩個命令,即RESTORE和RECOVER。RESOTRE命令將備份數據恢復到指定的目錄,RECOVER命令對數據庫實施同步恢復。

RESOTRE命令:因爲備份集中的備份片是以專有的RMAN格式存儲的,須要使用RESTORE命令進行重建,重建的結果是自動產生目標數據庫的物理文件結構。

RECOVER命令:負責把歸檔日誌文件用於重建的數據文件,來完成數據庫的同步恢復。在執行RECOVER命令時,RMAN須要讀取歸檔日誌,若是沒有歸檔日誌,或者數據庫運行在非歸檔模式下,則恢復過程會報錯。

案例:在歸檔方式下備份與恢復

要用RMAN進行聯機備份操做。數據庫就必須位於歸檔模式。恢復目錄必須打開,目標數據庫進程必須啓動,數據庫已經加載或者打開。

1)備份和恢復整個數據庫

wKioL1kpICzQMDRpAAGmmxUluGQ938.jpg

wKiom1kpIC3yaNv4AAK0TTqERzE387.jpg

wKioL1kpIC-SLuYJAALCy5o35CI352.jpg

wKiom1kpIC-BuAuPAAD6ONW9Nro369.jpg

備份和恢復整個數據庫,自動分配通道,FORMAT默認使用%U,備份集存儲在數據庫快閃恢復區內,備份文件包括數據文件,控制文件,重作日誌文件和參數文件。

wKioL1kpIDCjXyaSAAF1ecokgX0021.jpg

查看快閃恢復區,發現備份成功了:

wKiom1kpIDDSmZWkAAFs4Bs47Yw708.jpg

若是還要包含歸檔日誌文件,則要加上plus archivelog關鍵字,delete input的意思是在備份完成後,刪除archivelog(歸檔日誌)文件。可是事實是咱們通常不會刪除歸檔日誌文件,因此咱們通常不加delete input。

wKioL1kpIDGR12ESAAJCLh3c-Y8121.jpg

下面的一種方法是咱們本身創存儲備份集的目錄,不在使用快閃恢復區:

經過自動分配通道,經過FORMAT制定具體的路徑和格式

首先創建備份目錄:

wKiom1kpIDPzv2qbAADe6scFk_Q173.jpg

接着設置目錄權限並備份

wKioL1kpIDnBK_GdAAHlF4O5AWI829.jpg

最後查看備份目錄下是否有備份文件存在

wKiom1kpIDuy1G-IAADtN9z8Dug387.jpg

固然也能夠手動分配通道,備份數據庫。

wKiom1kpIEORPSLBAAIl-AWpRxE103.jpg

wKioL1kpIEWAer2OAADvxWLgN0Y753.jpg

恢復整個數據庫(數據庫要在mount狀態下執行)

wKioL1kpIEyA6i4AAAILfCwUl7U183.jpg

刪除system01.dbf

wKioL1kpIFCxRLF1AAEerMm9I9o308.jpg

再次開啓數據庫實例

wKiom1kpIFXj6YgoAAF7h52Wsx8000.jpg

使用sys鏈接RMAN

wKioL1kpIFmArO62AAFlp9EwS9o938.jpg

wKiom1kpIFqBiYlFAABtO2ntzls709.jpg

打開數據庫

wKioL1kpIF7jGEs9AAE5WdkaksQ141.jpg

wKiom1kpIGPiuHtgAAFOebpTkxo490.jpg

能夠看見system01.dbf表空間已經被恢復了

wKiom1kpIQeSev2CAAD0iP8tCIA132.jpg

2)備份和恢復表空間

對錶空間users作備份:

wKioL1kpIQiQVUCgAAEH7pGexhY672.jpg

備份多個表空間:

wKiom1kpIQnB3qy4AAFDiKcsYbI645.jpg

在RUN命令中備份表空間

wKioL1kpIQ7zR7BhAAGZBKWfk44956.jpg

若是隻丟失了特定的表空間的數據文件,那麼能夠選擇只恢復這個表空間,而不是恢復整個數據庫,表空間恢復能夠在不關閉數據庫的狀況下進行,只須要將須要恢復的表空間offline。

 

如今模擬刪除表空間

wKioL1kpIRKgVJgIAAFEFVWABvI889.jpg

恢復表空間

wKiom1kpIRrAPrzxAAJaYbhDgac087.jpg

查看錶空間文件已經恢復了

wKiom1kpIR2jBbDyAAD2lYkMNug872.jpg

3)數據文件的備份與恢復

查看數據文件

wKioL1kpISTQ9CjMAAIVCp4oeHs353.jpg

備份數據文件users01.dbf(備份和恢復的時候能夠指定文件號,也能夠指定文件名)

wKioL1kpISiQoj_RAAEuoCSNl4U186.jpg

查看數據文件

wKiom1kpISzREfKBAAFai-2WDiA921.jpg

刪除數據文件user01.dbf

wKiom1kpITDQbp14AAEl8XQnIbE492.jpg

對數據文件或表空間作恢復的時候數據文件和表空間必定要處於offline狀態, 數據文件丟失了,但數據庫實例還能夠用。

wKioL1kpITTRavGWAAFSz43YAps536.jpg

此時數據文件4的狀態爲recover

wKiom1kpITjjDr2VAAFhSh2CsYo594.jpg

恢復數據文件

wKioL1kpITmg8_APAABPgHWYbHw255.jpg

wKiom1kpITrADu0_AAA-deT0ql4836.jpg

將數據文件datafile 4處於online狀態

wKioL1kpITzRb_IsAADuSXkEwyM589.jpg

查看數據文件的狀態,已經變成online狀態了

wKioL1kpIUGhSQt7AAFZ0I3Bwrs460.jpg

或者使用run命令恢復,命令以下:

先刪除user01.dbf

wKiom1kpIUTiCBlOAAEs8S1ZvGM974.jpg

開始恢復:

wKioL1kpIVCxo6sJAANACl9WM94699.jpg

查看文件已經恢復:

wKiom1kpIVKwHwxnAADaEjYumIQ095.jpg

補充自動備份:

  1)生成腳本文件,如backup.rcv

  假定文件內容以下:

  $>cat backup.rcv

  connect target sys/password rcvcatrman/rman@localname;

  run{

  allocate channel c1 type disk;

  allocate channel c2 type disk;

  allocate channel c3 type disk;

  backup fileaperset 3 format‘/u01/oradata/backup/arch%u_%s_%p’

  archivelog all delete input;

  release channel c1;

  release channel c2;

  release channel c3;

  }

  2)生成執行文件

  在windows上生成backup_archive.bat,內容包括

  rman cmdfile = backup.rcv

  在unix下生成backup_archive.sh,內容包括

  /oracle/ramn/rman cmdfile = backup.rcv

  3)加入調度

  在windows中用任務計劃嚮導便可,或使用at命令。

  在unix中,在目標機器上編寫一個文件,用以啓動自動備份進程。假定文件名爲ORACLE,文件將放在/var/spool/cron/crontabs目錄下

  $>cat oracle

  0 23 * * 0 backup_archive.sh

  #表示星期天23點對數據庫備份

  0 12,18 * * * backup_archive.sh

  #表示天天12點,18點備份

Crontab文件的每一行由六個域(minutes,hours,day ofmonth,month,day of week,command)組成,域之間用空格或Tab分隔開來。

  

2、使用數據泵技術實現邏輯備份

邏輯備份是建立數據庫對象的邏輯副本,並存入一個二進制轉儲文件的過程。從本質上說,邏輯備份與恢復實際就是對數據庫實施數據的導入和導出。

 

導出

導出即數據庫的邏輯備份,實質是讀取一個數據庫集並將這個數據集寫入一個文件(擴展名一般是dmp),這些記錄的導出與物理位置無關。

導入

導入及數據庫的邏輯恢復,實質是讀取被導出的二進制轉儲文件並將其恢復到數據庫。

 

1、使用數據泵技術導入/導出

數據泵(data pump)是一種在數據庫之間或在數據庫與操做系統以前高速傳輸的技術。數據泵工具運行在服務器上,數據庫管理員須要指定數據庫目錄來保存轉儲的數據。

基於命令行的數據泵導出步驟以下

1)建立數據泵備份用的目錄,並把屬主和屬組賦予給oracle用戶

wKiom1kpIVWCyMOgAADI3mKGKeE222.jpg

2)鏈接oracle數據庫

wKiom1kpIVjRwoCqAAEyKQ8uKPQ647.jpg

3)建立一個操做目錄

wKioL1kpIVvR3R4-AADWTjCrG40529.jpg

4)授予用戶scott操做mulu目錄的權限

wKiom1kpIV7BF8GVAADk8ifuB48931.jpg

5)查詢目錄是否創建好

wKioL1kpIWngyZloAAMepngmnn8160.jpg

6)建立測試用戶zpf並受權

wKiom1kpIXCww0XKAAJLha0-Ufg434.jpg

7)導出scott用戶下的表

說明:使用expdp命令導出數據(能夠按照表導出,按照用戶模式導出,按照表空間導出和全庫導出),使用impdp命令導入數據(能夠按照表導入,按照用戶模式導入,按照表空間導入和全庫導入)。

wKiom1kpIXiSpffbAAJLC2ncQYY437.jpg

8)刪除emp表

wKioL1kpIXziKqRBAAFd8OdMftg991.jpg

9)導入emp表

wKiom1kpIYGjyP6fAAGXn3MCrwc637.jpg

wKioL1kpIYey_geaAAHXVKZ8ptg970.jpg

wKiom1kpIYmANuO1AACztMNWmrQ136.jpg

10)查看emp表已經還原

wKioL1kpIY7Q_tStAAGWeIw3FbM650.jpg

wKioL1kpIl2jqUhPAAPkQDHWRGg706.jpg

11)將導出的scott用戶下的dept和emp表導入zpf用戶下

wKiom1kpIl2g3b38AAFYPlG_ZR4604.jpg

12)使用zpf用戶登陸查看錶

wKiom1kpIl7CVGFRAAIumzura9g668.jpg

或者

wKioL1kpIl6DHN1jAAHDesf0j-Q951.jpg

13)導出scott用戶模式

wKioL1kpIl-QiMDvAAKol7jvwgk896.jpg

14)導入scott用戶模式

wKiom1kpImHTWXGsAAL4j5vFflQ239.jpg

15)將scott中全部的對象導入zpf中

wKioL1kpImGRhsWIAAKaZpQ0p-Y283.jpg

16)查看zpf用戶的表,發現scott的表所有出如今了用戶zpf這裏

wKiom1kpImLjXEfLAAIJOzEOFNE811.jpg

17)導出表空間

導出benet表空間(提早建立一個benet表空間)

wKioL1kpImOxAqEgAAEyTg7QjWY332.jpg

在表空間benet建立一個表bdqn

wKiom1kpImTjcL2hAAEjDqidhSs281.jpg

wKioL1kpImSwXFCSAADmIN_jLjI324.jpg

wKiom1kpImWw4MQmAAHGHSO-fCI028.jpg

18)導入表空間

導入以前刪除表空間,相關的表也會刪除

wKioL1kpImXzc4K7AADWb-n7288769.jpg

導入表空間以前,須要建立一個benet表空間

wKiom1kpImbSoCqIAACqF1oF1dA611.jpg

開始導入表空間

wKiom1kpImawLVg0AAFWquagz5w070.jpg

查看錶已經恢復回來了

wKioL1kpImehCla1AAG_dgIsNRQ888.jpg

wKioL1kpImfTfx8LAACu5vW4UI4640.jpg

19)導出整個數據庫

wKiom1kpImjhARSsAAESAVtNJh0745.jpg

wKiom1kpImiSBRGcAADC-xASl-o656.jpg

20)導入整個數據庫

wKioL1kpImmy8r5IAABgDaDDn_A140.jpg

3、使用閃回技術

1、閃回技術概述

爲了使數據庫可以從任何邏輯誤操做中迅速恢復,oracle退出了閃回技術。採用該技術,能夠對行級和事務級的數據變化進行恢復,減小了數據恢復的時間,並且操做簡單,經過sql語句就能夠實現數據的恢復,大大提升了數據庫恢復的效率。閃回技術是數據庫恢復技術歷史上一次重大的進步,從根本上改變了數據恢復。

閃回技術包括如下各項:

1閃回查詢(flashback query):查詢過去某個時間點或某個SCN(system  change  number,系統更改號)值時表中的數據信息。

2閃回版本查詢(flashback version  query):查詢過去某個時間段或某個SCN段內表中數據的變化狀況。

3閃回事務查詢(flashback  transaction query):查看某個事務或全部事務在過去一段時間對數據進行的修改。

4閃回數據庫(flashback  database):將數據庫恢復到過去某個時間點或某個SCN值時的狀態。

5閃回刪除(flashback  drop):將已經刪除的表及相關聯的對象恢復到刪除前的狀態。

6閃回表(flashback  table):將表恢復到過去的某個時間點或某個SCN值時的狀態。

wKiom1kpImri35cYAAKsRDOZhYw673.jpg

說明:SCN:scn是當Oracle數據庫更新後,有dbms自動維護而累積遞增的一個數字,能夠經過查詢數據字典v$database中的current_scn得到當前的SCN號

2、閃回恢復區

1)閃回恢復區的含義

Oracle推薦指定一個閃回恢復區(flash recovery  area)做爲存放備份與恢復相關文件的默認位置,這樣oracle就能夠實現自動的基於磁盤的備份與恢復(automatic  disk-based backup and recovery)。那麼,什麼是閃回恢復區?簡單地說,閃回恢復區是一塊用以存儲恢復相關的文件的存儲空間,容許用戶集中存儲全部恢復相關的文件。以下集中文件能夠放到閃回恢復區中

控制文件

歸檔的日誌文件

閃回日誌

控制文件和SPFILE自動備份

RMAN備份集

數據文件拷貝

2)閃回恢復區的優勢

閃回恢復區提供了一個集中化的存儲區域,很大程度上減小了管理開銷,這是其最主要的優勢,另外,與RMAN結合使用能夠進行快速恢復。

3)設置閃回恢復區

若是使用dbca建立的數據庫,在安裝時能夠設定閃回恢復區的位置及大小。

wKioL1kpImqx4BcVAAI6Bjwyc0Y787.jpg

4)閃回恢復區主要經過如下3個初始化參數來設置和管理。

Db_recovery_file_dest:指定閃回恢復區的位置

Db_recovery_file_dest_size:指定閃回恢復區的可用空間大小

Db_flashback_retention_target:該參數用來控制閃回日誌中數據保留的時間,或者說,但願閃回數據庫可以恢復到的最先的時間點。單位爲MIN,默認爲1440min,也就是一天。固然,實際上可退回的時間還取決於閃回恢復區的大小,由於裏面保存了回退所須要的閃回日誌,因此這個參數要和db_recovery_file_dest_size配合修改。

若是要撤銷閃回恢復區,把初始化參數DB_RECOVERY_FILE_DEST的值清空便可。

 

注意:db_recovery_file_dest_size只有在db_recovery_file_dest清空以後才能夠清空。(即刪除閃回恢復區的空間大小以前必須先刪除閃回恢復區的位置)

5)設置閃回數據庫

設置可閃回恢復區以後,要啓用閃回數據庫的功能,還須要進一步配置。數據庫必須已經處於歸檔模式,再設置閃回數據庫。

設置閃回數據庫的步驟以下:

1)啓用歸檔模式(閃回數據庫只能處於歸檔模式)

wKioL1kpImuDhPwaAAFouyCA-W4740.jpg

wKiom1kpIm3gJAChAAOfHUhwr5g641.jpg

2)數據庫未設置閃回數據庫

wKiom1kpIm3SKn8oAADm00iAEXY113.jpg

3)創建閃回區,容量大小爲3G(其餘都是固定寫法,就容量大小能夠更換)

wKioL1kpIm7j03DPAAHaZ6RpnqA727.jpg

設置閃回數據庫的數據保留週期爲一天以min爲單位

wKiom1kpIm7zUCq2AAEPUGhck9Q462.jpg

啓用閃回日誌

wKioL1kpInDRm9RWAANhJylnnmc532.jpg

查詢是否成功啓用閃回恢復區

wKioL1kpInChWo4mAAIBSKwp10s045.jpg

查詢是否成功啓用閃回數據庫

wKiom1kpInHzjmFZAAEB_0v-2fQ207.jpg

6)取消閃回恢復區

wKiom1kpInOiecbIAAN39IELdYk449.jpg

7)查看一下是否取消閃回恢復區

wKioL1kpInWA4tB5AAP7hemWHNA147.jpg

3、閃回錯誤操做技術

1)閃回數據庫

閃回數據庫可以使數據迅速回滾到之前的某個時間點或者某個SCN上,這對於數據庫從邏輯錯誤中恢復特別有用,並且也是大多數發生邏輯損害時恢復數據庫的最佳選擇。

做用相似於數據庫的倒帶按鈕。

能夠在用戶形成了邏輯數據損壞的狀況下使用。

wKioL1kpIymD7kOaAAFMHEfP1Ig752.jpg

wKioL1kpIyqhipllAAHiTlMM4Xo009.jpg

wKiom1kpIyqThkkaAAIrvoqKSDs551.jpg

案例:使用SCN閃回數據庫

1)查詢數據庫當前的SCN

wKiom1kpIyvTLQdjAADiq5LzyJI150.jpg

2)改變數據庫的當前狀態,模擬建立表bxjg,並插入一條數據。

wKioL1kpIyugf5b9AAIRUfDlzfE285.jpg

3)進行閃回數據庫恢復,將數據庫恢復到建立表以前的狀態,即SCN爲1033421

wKiom1kpIyyC8v6YAAMEu91c-tM364.jpg

4)用resetlogs選項打開數據庫

wKioL1kpIy3z8BjmAACr7J4f83E877.jpg

5)驗證數據庫的狀態(bxjg表應該不存在)

wKioL1kpIy2jr5bnAAEG3QLpWlA888.jpg

6)能夠經過查詢數據字典視圖v$flashback_database_log來得到可以閃回的最先的scn號,及閃回時值最先不能小於該值。同理,若是經過時間點閃回,則閃回時間也不能小於查詢獲得的最先時間。

設置顯示時間格式:

wKiom1kpIy6CaYn8AADbMhbDmMM647.jpg

查詢數據庫中當前最先的閃回SCN和時間

wKioL1kpIy6BbSesAAIkMZZYUmw799.jpg

7)按照指定時間閃回數據庫

首先查詢數據系統當前時間

wKioL1kpIzTzTQOgAADfoMSGwl0042.jpg

改變數據庫當前狀態,模擬建立表test,並插入一條數據

wKioL1kpIzXC-0DlAAGeejeGZ6c218.jpg

wKiom1kpIzWjH-5aAABuniqGHDQ471.jpg

進行閃回數據庫恢復,將數據庫恢復到建立表以前的狀態。

wKiom1kpIzaS978uAAFOdVuscek280.jpg

使用resetlogs打開數據庫

wKioL1kpIzbS34K0AADKBkNxbfw093.jpg

驗證數據庫的狀態test表是否存在

wKioL1kpIzfQVWlWAADakr0FWXc775.jpg

2)閃回表

閃回表是將表恢復到過去的某個時間點或者指定的SCN而不用恢復數據文件,爲DBA提供了一種在線、快讀、便捷的恢復方式,能夠恢復對標進行的修改、刪除、插入等錯誤的操做。

利用閃回表技術恢復表中數據的過程,其實是對錶進行DML操做的過程。Oracle自動維護與表相關聯的索引、觸發器、約束等。

爲了使用數據庫閃回表功能,必須知足下列條件

用戶具備flashback  any table系統權限,或者具備所操做表的flashback對象權限。

用戶具備所操做表的select、insert、delete、alter對象權限

啓動被操做表的row movement特性,能夠採用下列方式進行。

Alter  table 表名  enable  row movement;

wKioL1kpIzew2FeBAAI0azZbtUs956.jpg

案例:使用SCN閃回表

1)使用scott用戶登陸

wKiom1kpIzij7uqmAAB-LXWfaE8768.jpg

2)改變數據庫的當前狀態,模擬建立表it,並插入3條數據

wKioL1kpIznQZY1YAAKxLgXFPQ0165.jpg

3)查詢當前SCN號,若是當前用戶沒有權限查詢v$database,則以sys用戶登陸,授予當前用戶訪問數據字典的權限。

wKioL1kpIzqxfLMXAALVz5KyrVY535.jpg

4)更新數據(把id=1的名字改爲batianhu,刪除id=3的數據),而且提交

wKiom1kpIzuBBrQQAAHcuKUdTdM242.jpg

5)啓動it表的row movement特性

wKiom1kpIzvDKyMWAADWVGmQs0A476.jpg

6)將it表恢復到2016-12-14 20:08:34

wKioL1kpIzyRkv4VAAEN60FI6xc582.jpg

7)查詢

wKiom1kpIzzBIJOFAAEGU1lliSY465.jpg

8)將表it恢復到scn爲1036263的狀態

wKioL1kpIz2TdUi2AAGmvBmgFmo837.jpg

3)閃回刪除

閃回刪除能夠恢復使用drop  table語句刪除的表,是一種對意外刪除的表的恢復機制。

閃回刪除功能的實現主要是經過oracle數據庫中的「回收站」技術實現的。在oracle數據庫中,當執行drop table 操做時,並不當即回收表及、及其關聯的對象的空間,而是將它們重命名後放入一個稱爲「回收站」的邏輯容器中保存,直到用戶決定永久刪除它們或存儲該表的表空間存儲空間不足時,表才能真正被刪除。爲了使用閃回刪除技術,必須開啓數據庫的「回收站」

wKioL1kpIz2SkQBSAAKrMU3tkV8627.jpg

1)啓動回收站,將參數recyclebin設置爲ON,在默認狀況下「回收站」已啓動

wKiom1kpIz7yJmWoAAErkXo__rU256.jpg

wKiom1kpIz7iVp-DAACgVNpqMOU855.jpg

wKioL1kpIz-RXNKlAAJE3B5aWJ8758.jpg

2)查看「回收站」。當執行drop table操做時,表及其關聯對象被命名後保存在「回收站」中,能夠經過查詢user_recyclebin,dba_recyclebin視圖得到被刪除的表及其關聯對象信息

wKioL1kpI0DSzkzgAAJRIANH4DY905.jpg

注意:不支持sys用戶,system表空間下的對象也不能從回收站裏拿到,故使用sys或者system用戶登陸時,查詢爲空

3)若是在刪除表時使用了PURGE短語,則表及其關聯對象被直接釋放,空間被回收,相關信息不會進入「回收站」中。

創建表,而且使用purge短語刪除

wKiom1kpI0GSRcZpAAE_R1wLhbI971.jpg

查看在回收站裏面沒有

wKiom1kpI0GCi0VbAAHQS1eGozs259.jpg

4)清空回收站

因爲被刪除表及其關聯對象的信息保存在「回收站」中,其存儲空間並無釋放,所以須要按期清空「回收站」,或清楚「回收站」中沒有用的對象(表、索引、表空間),釋放其所佔的磁盤空間。

wKioL1kpI93wHy0lAAIwFklUuQE395.jpg

wKiom1kpI9_jY68AAAGdheO7YW0823.jpg

wKiom1kpI9_grZOkAAD8vQSKmzw840.jpg

5)閃回刪除操做

FLASHBACK TABLE [schema.]table TO BEFOREDROP [RENAME TO table]

注意:只有本地管理的,非系統表空間中的表可使用閃回刪除操做。

案例:閃回刪除示例

1)新建表,插入數據並提交

wKioL1kpI-DhtqAxAAGocB05Gm4610.jpg

2)刪除表

wKioL1kpI-Dym-JBAAEVbC1CBRQ625.jpg

3)閃回表

wKiom1kpI-HC74lVAAKHh9eUNI0125.jpg

或者閃回表以後從新命名

wKiom1kpI-LialhGAAHQJY3TgPs801.jpg

4)閃回查詢技術

閃回查詢:容許根據時間點或SCN查看舊的數據。除了能夠查看舊數據,須要時能夠經過檢索舊數據來撤銷錯誤的更改。

wKioL1kpI-OCFaqqAAEV4HARRzg403.jpg

案例:閃回查詢實例

1)使用scott用戶登陸,對emp表基於as of timestamp的閃回查詢

wKioL1kpI-PitP0wAAIxSeNbUls453.jpg

2)更新員工號爲7844的工資,更新爲2000,並提交事物

wKiom1kpI-SgcOy7AAESVyoDhJY039.jpg

第一個事務提交,自動開啓第二個事物。

3)再次更新員工號爲7844的工資,更新兩次,提交事物。

wKiom1kpI-WwlmCBAAHW6TIoRdo345.jpg

第二個事物提交,自動開啓第三個事務。

4)再次更新員工號爲7844的工資,更新爲3500,並提交事物

wKioL1kpI-XhOgmQAAEcL5b-A88646.jpg

第三個事務提交,自動開啓第四個事務

5)查詢7844號員工的當前工資

wKioL1kpI-WwSLkBAADYzBkUfek139.jpg

6)查詢7844號員工前一個小時的工資

wKiom1kpI-aw8s7hAACpgfDXo-c428.jpg

7)查詢第一個事務提交,第二個事物尚未提交時7844號員工的工資

2016-12-1421:46:26以前便可

wKioL1kpI-bywgfsAADECSXppNo067.jpg

8)若是須要,能夠將數據恢復到過去某個時刻的狀態

wKioL1kpJAbyhaN0AACrKOEdYf4061.jpg

相關文章
相關標籤/搜索