天天看點

Oracle資料庫備份與恢複

資料庫備份與恢複是資料庫管理者必須掌握的。沒有任何系統能免遭硬碟實體損壞、粗心使用者的錯誤操作、或一些可能會威脅到存儲資料的潛在災難的侵襲。為了能夠最大限度地恢複資料庫資料,保證資料庫的安全運作,應該選擇最合理的備份方法來防止各種故障所導緻的使用者資料丢失,本次主要介紹三種備份恢複技術,即RMAN技術、資料泵技術及閃回技術。

備份的定義及分類

Oracle資料庫備份與恢複

恢複的定義及分類

恢複就是發生故障後,利用已備份的資料或控制檔案,重建立立一個完整的資料庫。恢複分為以下兩種類型。

1)執行個體恢複:當oracle執行個體出現失敗後,oracle自動進行的恢複。

2)媒體恢複:當存放資料庫的媒體出現故障時所做的恢複。媒體恢複又分為完全恢複和不完全恢複。

完全恢複:将資料庫恢複到資料庫失敗時的狀态。這種恢複是通過裝載資料庫備份,并用全部的重做日志做到的。

不完全恢複:将資料庫恢複到資料庫失敗前的某一時刻的狀态。這種恢複是通過裝載資料庫備份并應用部分的重做日志做到的。進行不完全恢複後,必須在啟動資料庫時用resetlogs選型重設聯機重做日志

一、使用RMAN工具

RMAN(recovery  manager)是oracle的一個重要工具,用于備份和恢複資料庫檔案、歸檔日志和控制檔案。也可以用來執行完全或不完全的資料庫恢複。RMAN有3種不同的使用者接口:指令行方式,GUI方式(內建在OEM中的備份管理器)、api方式(用于內建到第三方的備份軟體中)。它具有如下優點:

1)支援線上熱備份

2)支援多級增量備份

3)支援并行備份、恢複

4)減少所需要的備份量

5)備份、恢複使用簡單

RMAN有豐富的特性集。随着oracle新版本的釋出,RMAN特性也不斷增強,使得RMAN幾乎在任何情況下都可以備份和恢複資料庫。其中很多的新特性都是針對日常工作中所遇到的問題和困難開發的。

1.RMAN元件

Oracle資料庫備份與恢複

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.建立恢複目錄

恢複目錄存在于RMAN的目錄資料庫中,類似于标準的資料庫目錄,主要包含如下幾個部分的資訊。

1)備份和恢複資訊,可以是多個目标資料庫

2)RMAN腳本,可以存儲供重複使用

3)關于資料檔案和日志檔案的本分資訊

4)關于目标資料庫的表空間和資料檔案的信

Oracle資料庫備份與恢複

建立恢複目錄資料庫

Oracle資料庫備份與恢複

在恢複目錄資料庫中建立RMAN使用者并授權

Oracle資料庫備份與恢複
Oracle資料庫備份與恢複

在恢複目錄資料庫中建立恢複目錄

Oracle資料庫備份與恢複

3.注冊目标資料庫到恢複目錄

登入目标資料庫,如果要對目标資料庫進行注冊,可以按照以下操作

Oracle資料庫備份與恢複

至此,完成了目标資料庫在恢複目錄中的注冊操作,此時就可以使用RMAN的恢複目錄對目标資料庫進行備份和恢複操作。

4.通道配置設定

使用RMAN進行備份和恢複操作時,必須進行通道的配置設定,一個通道是RMAN和目标資料庫之間的一個連接配接,通道指定了某種類型的裝置用于備份和恢複,RMAN可以使用的通道裝置包括磁盤與錄音帶兩種。

(1)自動通道配置

使用CONFIGURE指令配置自動通道

文法格式如下:

CONFIGURE  DEVICE  TYPE  sbt/disk  PARALLELISM  n;   指定自動通道并行個數

CONFIGURE  DEFAULT  DEVICE  TYPE  TO  sbt/disk;     指定自動通道的預設裝置

在文法中:

sbt/disk:錄音帶/磁盤

n:設定自動通道的個數

例如:指定RMAN可以打開5個磁盤通道

Oracle資料庫備份與恢複
Oracle資料庫備份與恢複

(2)手動通道配置

在RUN塊中使用ALLOCATE  CHANNEL手動配置設定通道

RUN

{

   ALLOCATE  CHANNEL 通道名稱  DEVICE  TYPE  裝置類型;

   ......

}

例如:指定3個磁盤通道,分别是ch1、ch2和ch3

Oracle資料庫備份與恢複

(3)顯示通道配置參數

使用SHOW ALL指令可以顯示已經配置過的和有預設值的參數,其中包括通道參數

Oracle資料庫備份與恢複

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指令對資料庫實施同步恢複。

n  RESOTRE指令:由于備份集中的備份片是以專有的RMAN格式存儲的,需要使用RESTORE指令進行重建,重建的結果是自動産生目标資料庫的實體檔案結構。

n  RECOVER指令:負責把歸檔日志檔案用于重建的資料檔案,來完成資料庫的同步恢複。在執行RECOVER指令時,RMAN需要讀取歸檔日志,如果沒有歸檔日志,或者資料庫運作在非歸檔模式下,則恢複過程會報錯。

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

要用RMAN進行聯機備份操作。資料庫就必須位于歸檔模式。恢複目錄必須打開,目标資料庫程序必須啟動,資料庫已經加載或者打開。

備份和恢複整個資料庫

檢視目前資料模式為非歸檔模式

Oracle資料庫備份與恢複

修改模式為歸檔模式

Oracle資料庫備份與恢複

備份和恢複整個資料庫,自動配置設定通道,FORMAT預設使用%U,備份集存儲在資料庫快閃恢複區内,備份檔案包括資料檔案,控制檔案,重做日志檔案和參數檔案。

Oracle資料庫備份與恢複

檢視快閃恢複區,發現備份成功了

Oracle資料庫備份與恢複

如果還要包含歸檔日志檔案,則要加上plus archivelog關鍵字,delete input的意思是在備份完成後,删除archivelog檔案。

Oracle資料庫備份與恢複

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

Oracle資料庫備份與恢複
Oracle資料庫備份與恢複

也可以手動配置設定通道,備份資料庫

Oracle資料庫備份與恢複

恢複整個資料庫(資料庫要在mount狀态下執行)

Oracle資料庫備份與恢複

删除system01.dbf

Oracle資料庫備份與恢複

再次開啟資料庫執行個體

Oracle資料庫備份與恢複

此時資料庫無法啟動了,因為删除了system01.dbf

使用sys連接配接RMAN,重建資料庫實體檔案

Oracle資料庫備份與恢複

同步恢複

Oracle資料庫備份與恢複

打開資料庫

Oracle資料庫備份與恢複
Oracle資料庫備份與恢複

system01.dbf表空間已經被恢複了

Oracle資料庫備份與恢複

2.備份和恢複表空間

表空間備份

Oracle資料庫備份與恢複

多個表空間備份

Oracle資料庫備份與恢複

如果隻丢失了特定的表空間的資料檔案,那麼可以選擇隻恢複這個表空間,而不是恢複整個資料庫,表空間恢複可以在不關閉資料庫的情況下進行,隻需要将需要恢複的表空間offline

模拟删除表空間

Oracle資料庫備份與恢複

恢複表空間

Oracle資料庫備份與恢複

檢視表空間檔案已經恢複了

Oracle資料庫備份與恢複

(3)資料檔案的備份與恢複

檢視資料檔案

Oracle資料庫備份與恢複

備份資料檔案users01.dbf(備份和恢複的時候可以指定檔案号,也可以指定檔案名)

Oracle資料庫備份與恢複
Oracle資料庫備份與恢複

删除資料檔案user01.dbf

Oracle資料庫備份與恢複

對資料檔案或表空間做恢複的時候資料檔案和表空間一定要處于offline狀态, 資料檔案丢失了,但資料庫執行個體還可以用

Oracle資料庫備份與恢複

此時資料檔案4的狀态為recover

Oracle資料庫備份與恢複

恢複資料檔案

Oracle資料庫備份與恢複
Oracle資料庫備份與恢複

将資料檔案datafile 4處于online狀态

Oracle資料庫備份與恢複

檢視資料檔案的狀态,已經變成online狀态了

Oracle資料庫備份與恢複

二、使用資料泵技術實作邏輯備份

邏輯備份是建立資料庫對象的邏輯副本,并存入一個二進制轉儲檔案的過程。從本質上說,邏輯備份與恢複實際就是對資料庫實施資料的導入和導出。

導出:

導出即資料庫的邏輯備份,實質是讀取一個資料庫集并将這個資料集寫入一個檔案(擴充名通常是dmp),這些記錄的導出與實體位置無關。

導入:

導入及資料庫的邏輯恢複,實質是讀取被導出的二進制轉儲檔案并将其恢複到資料庫

1.使用資料泵技術導入/導出

資料泵(data pump)是一種在資料庫之間或在資料庫與作業系統之前高速傳輸的技術。資料泵工具運作在伺服器上,資料庫管理者需要指定資料庫目錄來儲存轉儲的資料

基于指令行的資料泵導出步驟如下

(1)連接配接Oracle資料庫

(2)建立一個操作目錄

Oracle資料庫備份與恢複
Oracle資料庫備份與恢複

(3)授予使用者操作dump_dir目錄的權限

Oracle資料庫備份與恢複

(4)建立測試使用者yyy并授權

Oracle資料庫備份與恢複

5)導出scott使用者下的表

使用expdp指令導入資料(可以按照表導出,按照使用者模式導出,按照表空間導出和全庫導出),使用impdp指令導入資料(可以按照表導入,按照使用者模式導入,按照表空間導入和全庫導入)

Oracle資料庫備份與恢複

(6)删除emp表

Oracle資料庫備份與恢複

(7)導入emp表

Oracle資料庫備份與恢複

(8)檢視emp表已經還原

Oracle資料庫備份與恢複

(9)将導出的scott使用者下的dept和emp表導入yyy使用者下

Oracle資料庫備份與恢複

使用yyy使用者登入檢視表

Oracle資料庫備份與恢複

(10)導出scott使用者模式

Oracle資料庫備份與恢複

(11)導入scott使用者模式

Oracle資料庫備份與恢複

(12)将scott中所有的對象導入yyy中

Oracle資料庫備份與恢複

檢視yyy使用者的表,發現多了很多

Oracle資料庫備份與恢複

(13)導出表空間

導出yyy表空間(提前建立一個yyy表空間)

Oracle資料庫備份與恢複

在表空間yyy建立一個表ccc

Oracle資料庫備份與恢複

導出表空間

Oracle資料庫備份與恢複

(14)導入表空間

導入之前删除表空間,相關的表也會删除

Oracle資料庫備份與恢複

導入表空間之前,需要建立一個yyy表空間

Oracle資料庫備份與恢複

導入表空間

Oracle資料庫備份與恢複

檢視表已經恢複回來了

Oracle資料庫備份與恢複

(15)導出整個資料庫

Oracle資料庫備份與恢複

(16)導入整個資料庫

Oracle資料庫備份與恢複

三、使用閃回技術

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值時的狀态

Oracle資料庫備份與恢複

SCN:scn是當Oracle資料庫更新後,有dbms自動維護而累積遞增的一個數字,可以通過查詢資料字典V$DATABASE中的CURRENT_SCN獲得目前的SCN号。

注意:

閃回資料庫是基于閃回恢複區(Flash Recovery Area)特性實作的,如果要使用閃回資料庫技術,還需要啟用閃回恢複區

閃回删除是基于資源回收筒(Recycle Bin)特性實作的,如果要使用閃回删除技術,還需要啟用資源回收筒

閃回查詢、閃回版本查詢、閃回事務查詢以及閃回表主要是基于撤銷表空間中的復原資訊實作的

2.閃回恢複區

1)閃回恢複區的含義

Oracle推薦指定一個閃回恢複區(flash recovery  area)作為存放備份與恢複相關檔案的預設位置,這樣oracle就可以實作自動的基于磁盤的備份與恢複(automatic  disk-based backup and recovery)。那麼,什麼是閃回恢複區?簡單地說,閃回恢複區是一塊用以存儲恢複相關的檔案的存儲空間,允許使用者集中存儲所有恢複相關的檔案。如下集中檔案可以放到閃回恢複區中。

控制檔案

歸檔的日志檔案

閃回日志

控制檔案和SPFILE自動備份

RMAN備份集

資料檔案拷貝

2)閃回恢複區的優點

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

3)設定閃回恢複區

如果使用dbca建立的資料庫,在安裝時可以設定閃回恢複區的位置及大小。

Oracle資料庫備份與恢複

閃回恢複區主要通過以下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清空之後才可以清空。

4)設定閃回資料庫

設定可閃回恢複區之後,要啟用閃回資料庫的功能,還需要進一步配置。資料庫必須已經處于歸檔模式,再設定閃回資料庫。

設定閃回資料庫的步驟如下:

(1)啟用歸檔模式。閃回資料庫隻能處于歸檔模式

  SQL> shutdown immediate;

 SQL> startup mount;

 SQL> alter database archivelog;

資料庫未設定閃回資料庫

Oracle資料庫備份與恢複

(2)建立閃回區,設定閃回資料庫的資料保留周期為一天,以min為機關

Oracle資料庫備份與恢複

(3)啟用閃回日志

Oracle資料庫備份與恢複

(4)查詢是否成功啟用閃回恢複區

Oracle資料庫備份與恢複

(5)查詢是否成功啟用閃回資料庫

Oracle資料庫備份與恢複

5)取消閃回恢複區

将db_recovery_file_dest參數設定為空,可以停用閃回恢複區,但是,如果已經啟用閃回資料庫,則不能取消閃回恢複區,是以必須先禁用閃回資料庫,才能取消閃回恢複區

步驟如下;

(1)關閉資料庫

SQL> shutdown immediate;

(2)裝載資料庫

SQL> startup mount;

(3)關閉資料庫閃回

SQL> alter database flashback off;

(4)打開資料庫

SQL> alter database open;

(5)修改閃回參數

SQL> alter system set db_recovery_file_dest='';

3.閃回錯誤操作技術

1、閃回資料庫

 閃回資料庫能夠使資料迅速復原到以前的某個時間點或者某個SCN上,這對于資料庫從邏輯錯誤中恢複特别有用,而且也是大多數發生邏輯損害時恢複資料庫的最佳選擇。

 作用類似于資料庫的倒帶按鈕。

   可以在使用者造成了邏輯資料損壞的情況下使用

Oracle資料庫備份與恢複

1)閃回資料庫文法格式

FLASHBACK  DATABASE [database] TO

[SCN | TIMESTAMP expression]|

[BEFORE SCN | TIMESTAMP expression]

參數說明

n  TO SCN:将資料庫恢複到指定SCN的狀态

n  TO TIMESTAMP:将資料庫恢複到指定的時間點

n  TO BEFORE SCN:将資料庫恢複到指定SCN的前一個SCN狀态

n  TO BEFORE TIMESTAMP:将資料庫恢複到指定時間點前的狀态

2)閃回資料庫操作的限制:

n  資料檔案損壞或丢失等媒體故障不能使用閃回資料庫進行恢複。閃回資料庫隻能基于目前正常運作的資料檔案。

n  閃回資料庫功能啟動後,如果發生資料庫控制檔案重建或利用備份恢複控制檔案,則不能使用閃回資料庫。

n  不能使用閃回資料庫進行資料檔案收縮操作。

n  不能使用閃回資料庫将資料庫恢複到在閃回日志中可獲得最早的SCN之前的SCN,因為閃回日志檔案在一定條件下被删除,而不是始終儲存在閃回恢複區中。

案例:使用SCN閃回資料庫

1)查詢資料庫目前的SCN

Oracle資料庫備份與恢複

2)改變資料庫的目前狀态,模拟建立表bxjg,并插入一條資料。

Oracle資料庫備份與恢複

3)進行閃回資料庫恢複,将資料庫恢複到建立表之前的狀态,即SCN為1132741

Oracle資料庫備份與恢複
Oracle資料庫備份與恢複

4)用RESETLOGS選項打開資料庫,并驗證資料庫的狀态(bxjg表應該不存在)

Oracle資料庫備份與恢複

5)可以通過查詢資料字典視圖v$flashback_database_log來獲得能夠閃回的最早的scn号,及閃回時值最早不能小于該值。同理,如果通過時間點閃回,則閃回時間也不能小于查詢得到的最早時間。

設定顯示時間格式

Oracle資料庫備份與恢複

查詢資料庫中目前最早的閃回SCN和時間

Oracle資料庫備份與恢複

6)按照指定時間閃回資料庫

首先查詢資料系統目前時間

Oracle資料庫備份與恢複

改變資料庫目前狀态,模拟建立表test2,并插入一條資料

Oracle資料庫備份與恢複
Oracle資料庫備份與恢複

進行閃回資料庫恢複,将資料庫恢複到建立表之前的狀态。

Oracle資料庫備份與恢複
Oracle資料庫備份與恢複

使用RESETLOGS打開資料庫

Oracle資料庫備份與恢複

驗證資料庫的狀态test2表是否存在。

Oracle資料庫備份與恢複

2.閃回表

閃回表是将表恢複到過去的某個時間點或者指定的SCN而不用恢複資料檔案,為DBA提供了一種線上、快讀、便捷的恢複方式,可以恢複對标進行的修改、删除、插入等錯誤的操作。

利用閃回表技術恢複表中資料的過程,實際上是對表進行DML操作的過程。Oracle自動維護與表相關聯的索引、觸發器、限制等。

(1)為了使用資料庫閃回表功能,必須滿足下列條件

n  使用者具有flashback  any table系統權限,或者具有所操作表的flashback對象權限。

n  使用者具有所操作表的select、insert、delete、alter對象權限

n  啟動被操作表的row movement特性,可以采用下列方式進行。

          SQL> Alter  table 表名  enable  row  movement

(2)閃回表操作的基本文法為

FLASHBACK TABLE [schema.]table TO

SCN|TIMESTAMP expression

[ENABLE|DISABLE TRIGGERS]

SCN:将表恢複到指定的SCN時狀态

TIMESTAMP:将表恢複到指定的時間點

ENABLE|DISABLE TRIGGER:在恢複表中資料的過程中,表上的觸發器是激活還是禁用(預設為禁用)

注意:SYS使用者或以AS SYSDBA身份登入的使用者不能執行閃回表操作

案例:使用SCN閃回表

1)使用scott使用者登入,建立一個表,并插入資料,并送出

Oracle資料庫備份與恢複
Oracle資料庫備份與恢複

2)查詢目前SCN号,如果目前使用者沒有權限查詢v$database,則以sys使用者登入,授予目前使用者通路資料字典的權限。

Oracle資料庫備份與恢複
Oracle資料庫備份與恢複
Oracle資料庫備份與恢複

3)更新資料(把id=1的名字改成batianhu,删除id=3的資料),并且送出

Oracle資料庫備份與恢複

4)啟動test3表的ROW MOVEMENT特性

Oracle資料庫備份與恢複

5)将test3表恢複到2018-04-08  14:44:00,并查詢

Oracle資料庫備份與恢複

6)将表test3恢複到scn為的狀态1133309

Oracle資料庫備份與恢複

3.閃回删除

閃回删除可以恢複使用drop  table語句删除的表,是一種對意外删除的表的恢複機制。

閃回删除功能的實作主要是通過oracle資料庫中的“資源回收筒”技術實作的。在oracle資料庫中,當執行drop table 操作時,并不立即回收表及、及其關聯的對象的空間,而是将它們重命名後放入一個稱為“資源回收筒”的邏輯容器中儲存,直到使用者決定永久删除它們或存儲該表的表空間存儲空間不足時,表才能真正被删除。為了使用閃回删除技術,必須開啟資料庫的“資源回收筒”。

Oracle資料庫備份與恢複

(1)啟動資源回收筒,将參數recyclebin設定為ON,在預設情況下“資源回收筒”已啟動

Oracle資料庫備份與恢複

(2)檢視“資源回收筒”。當執行drop table操作時,表及其關聯對象被命名後儲存在“資源回收筒”中,可以通過查詢user_recyclebin,dba_recyclebin視圖獲得被删除的表及其關聯對象資訊。

Oracle資料庫備份與恢複
Oracle資料庫備份與恢複
Oracle資料庫備份與恢複

注意:不支援sys使用者,system表空間下的對象也不能從資源回收筒裡拿到,故使用sys或者system使用者登入時,查詢為空

3)如果在删除表時使用了PURGE短語,則表及其關聯對象被直接釋放,空間被回收,相關資訊不會進入“資源回收筒”中。

建立表,并且使用purge短語删除

Oracle資料庫備份與恢複

檢視在資源回收筒裡面沒有

4)清空資源回收筒

由于被删除表及其關聯對象的資訊儲存在“資源回收筒”中,其存儲空間并沒有釋放,是以需要定期清空“資源回收筒”,或清楚“資源回收筒”中沒有用的對象(表、索引、表空間),釋放其所占的磁盤空間。

文法如下:

PURGE [TABLE 表名 | INDEX index]

[RECYCLEBIN | DBA_RECYCLEBIN] | [TABLESPACE tablespace [USER user]]

參數說明:

TABLE:從資源回收筒中清除指定的表

INDEX:從資源回收筒中清除指定的索引,并回收其磁盤空間

RECYCLEBIN:清空使用者“資源回收筒”,并回收所有對象的磁盤空間

DBA_RECYCLEBIN:清空整個資料庫系統的“資源回收筒”,隻有具有SYSDBA權限的使用者才可以使用

TABLESPACE :清除“資源回收筒”中指定額表空間,并回收磁盤空間

USER:清除資源回收筒中指定表空間中特定使用者的對象,并回收磁盤空間

Oracle資料庫備份與恢複

5)閃回删除操作

FLASHBACK TABLE [schema.]table TO BEFORE DROP [RENAME TO table]

注意:隻有本地管理的,非系統表空間中的表可以使用閃回删除操作

案例:閃回删除示例

建立表,插入資料并送出

Oracle資料庫備份與恢複

删除表

Oracle資料庫備份與恢複

閃回表

Oracle資料庫備份與恢複
Oracle資料庫備份與恢複

或者閃回表之後重新命名

Oracle資料庫備份與恢複
Oracle資料庫備份與恢複

4、閃回查詢技術

閃回查詢:允許根據時間點或SCN檢視舊的資料。除了可以檢視舊資料,需要時可以通過檢索舊資料來撤銷錯誤的更改。

基本文法如下:

Select column_name[,...]

From table_name

[as of scn | timestamp expression]

[Where condition]

As for timestamp:基于時間的閃回查詢

As of scn:基于scn的閃回查詢

案例:閃回查詢執行個體

1)使用scott使用者登入,對emp表基于as of timestamp的閃回查詢

Oracle資料庫備份與恢複

2)更新員工号為7844的工資,更新為2000,并送出事物

Oracle資料庫備份與恢複

3)再次更新員工号為7844的工資,更新兩次,送出事物

Oracle資料庫備份與恢複

4)再次更新員工号為7844的工資,更新為3500,并送出事物

Oracle資料庫備份與恢複

5)查詢7844号員工的目前工資

Oracle資料庫備份與恢複

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

Oracle資料庫備份與恢複

7)查詢第一個事務送出,第二個事物還沒有送出時7844号員工的工資

Oracle資料庫備份與恢複

8)如果需要,可以将資料恢複到過去某個時刻的狀态

Oracle資料庫備份與恢複