標籤:Oracle備份與恢複
oracle中的故障分為以下4種類型
.
1)語句故障
語句故障時在執行sql語句過程中發生的邏輯故障。例如:向表中插入違反約束的無效資料,或者資料表空間沒有空間了導致無法插入資料等。這時,應用人員或者DBA根據情況進行相應處理及可。
2)使用者進程故障
當使用者程式出錯而無法訪問oracle資料庫時,就會發生使用者進程故障,原因是異常中斷連線或終止進程,如果網路不通,用戶端電腦以外重新啟動,這些故障會導致使用者進程與伺服器的串連意外終止。
使用者進程故障只會導致目前使用者無法正常操作資料庫,但不會影響其他使用者進程。當使用者進程出現故障時,進程監控程式(PMON)會自動執行進程恢複。PMON是oracle的後台進程,用於檢測與使用者進程失去已連線的服務器進程。PMON會通過復原事務來處理故障,還將釋放進程當前佔用的資源。
3)執行個體故障
當oracle的資料庫執行個體由於硬體故障或軟體問題而無法繼續運行時,就會發生執行個體故障。硬體問題包括意外斷電,而軟體問題可能是伺服器作業系統崩潰。
當重新啟動資料庫時,如果發現執行個體故障,oracle會自動完成執行個體恢複。執行個體恢複將資料庫恢複到與故障之前的事務一致的狀態,oracle會自動復原未提交的資料。
4)介質故障
介質故障是當一個資料庫檔案、檔案的部分或磁碟不能讀或不能寫時出現的故障。例如:硬碟磁頭損壞會導致而資料庫檔案完全損壞。要修複由於介質故障引起的資料庫檔案損壞,需要使用介質恢複。
.
備份與恢複的定義及分類
1、備份的定義及分類
備份就是把資料庫複寫到傾印裝置的過程。其中傾印裝置是指用於放置資料庫副本的磁帶或磁碟。從不同的角度分類如下:
1)從物理與邏輯角度分類
從物理與邏輯角度分,備份可以分為物理備份和邏輯備份。
① 物理備份:
對資料庫作業系統的物理檔案(如資料檔案、控制檔案和記錄檔)的備份。物理備份又可以分為離線備份(冷備份)和聯機備份(熱備份),前者是在關閉資料庫的時候進行的,後者對正以歸檔日誌方式啟動並執行資料庫進行備份。可以使用oracle的復原管理員(RMAN)或作業系統命令進行資料庫的物理備份。
② 邏輯備份:對資料庫邏輯組件(如表和預存程序等資料庫物件)的備份。邏輯備份的手段很多,如傳統的EXP、資料泵EXPDP、資料庫閃回技術及第三方工具,都可以進行資料庫的邏輯備份。
.
2)從資料庫的備份策略角度分類
① 完全備份:
每次對資料進行完整的備份。當發生資料丟失的災難情況時,完全備份無須依賴其他資訊,即可實現100%資料恢複,其恢復最短且操作最方便。
② 增量備份:
只有那些在上次完全備份或者增量備份後被修改的檔案才會備份。優點是備份資料量小,需要的時間短,缺點是恢複的時候需要依賴之前的備份記錄,出問題的風險較大。
③ 差異備份:
備份那些自從上次完全備份之後被修改過的檔案。從差異備份中恢複資料庫時間較短,因此只需要兩份資料(最後一次完全備份和最後一次差異備份),缺點是每次備份需要的時間較長。
.
2、恢複的定義及分類
恢複就是發生故障後,利用已備份的資料或控制檔案,重建立立一個完整的資料庫。恢複分為以下兩種類型。
1)執行個體恢複:當oracle執行個體出現失敗後,oracle自動進行的恢複。
2)介質恢複:當存放資料庫的介質出現故障時所做的恢複。介質恢複又分為完全恢複和不完全恢複。
完全恢複:將資料庫恢複到資料庫失敗時的狀態。這種恢複是通過裝載Database Backup,並用全部的重做日誌做到的。
不完全恢複:將資料庫恢複到資料庫失敗前的某一時刻的狀態。這種恢複是通過裝載Database Backup並應用部分的重做日誌做到的。進行不完全恢複後,必須在啟動資料庫時用resetlogs選型重設聯機重做日誌。
.
使用RMAN工具
RMAN(recovery manager)是oracle的一個重要工具,用於備份和恢複資料庫檔案、歸檔日誌和控制檔案。也可以用來執行完全或不完全的資料庫恢複。RMAN有3種不同的使用者介面:命令列方式,GUI方式(整合在OEM中的備份管理器)、api方式(用於整合到第三方的備份軟體中)。
.
它具有如下優點:
1)支援線上熱備份
2)支援多級增量備份
3)支援並行備份、恢複
4)減少所需要的備份量
5)備份、恢複使用簡單
RMAN有豐富的特性集。隨著oracle新版本的發布,RMAN特性也不斷增強,使得RMAN幾乎在任何情況下都可以備份和恢複資料庫。其中很多的新特性都是針對日常工作中所遇到的問題和困難開發的。
RMAN組件
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從目標資料庫的備份中建立新的資料庫。次要資料庫能被建立作為備用資料庫使用。在產品資料庫發生災難時,能夠在不丟失任何資料及停機時間最短的情況下切換至備用資料庫。
.
建立恢複目錄
恢複目錄存在於RMAN的目錄資料庫中,類似於標準的資料庫目錄,主要包含如下幾個部分的資訊:
1)備份和恢複資訊,可以是多個目標資料庫
2)RMAN指令碼,可以儲存供重複使用
3)關於資料檔案和記錄檔的本分資訊
4)關於目標資料庫的資料表空間和資料檔案的資訊
.
建立恢複目錄
1)建立恢複目錄資料庫
create tablespace cc datafile ‘/opt/oracle/oradata/cc.ora‘
size 20M autoextend on next 5m maxsize unlimited
.
2)在恢複目錄資料庫中建立RMAN 使用者並授權
create user ydw identified by oracle default tablespace cc
temporary tablespace temp
.
grant connect,resource to ydw
grant recovery_catalog_owner to ydw
.
3)在恢複目錄資料庫中建立恢複目錄
.
.
3、註冊目標資料庫到恢複目錄
登入目標資料庫,如果要對目標資料庫進行註冊,可以按照以下操作。
.
至此,完成了目標資料庫在恢複目錄中的註冊操作,此時就可以使用RMAN的恢複目錄對目標資料庫進行備份和恢複操作。
.
通道分配
使用RMAN進行備份和恢複操作時,必須進行通道的分配,一個通道是RMAN和目標資料庫之間的一個串連,通道指定了某種類型的裝置用於備份和恢複,RMAN可以使用的通道裝置包括磁碟與磁帶兩種。
1)自動通道配置
使用CONFIGURE命令配置自動通道。
.
.
2)手動通道配置
在RUN塊中使用ALLOCATE CHANNEL手動分配通道。
例如:指定3個磁碟通道,分別是ch1、ch2和ch3。
.
3)顯示通道配置參數
.
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)備份和恢複整個資料庫
查看當前資料模式為非歸檔模式
.
.
修改模式為歸檔模式
.
.
備份和恢複整個資料庫,自動分配通道,FORMAT預設使用%U,備份組儲存在資料庫快閃恢複區內,備份檔案包括資料檔案,控制檔案,重做記錄檔和參數檔案。
.
查看快閃恢複區,發現備份成功了
.
如果還要包含歸檔記錄檔,則要加上plus archivelog關鍵字,delete input的意思是在備份完成後,刪除archivelog檔案。
.
通過自動分配通道,通過FORMAT制定具體的路徑和格式
首先建立備份目錄:
.
.
設定目錄許可權並備份
.
.
.
也可以手動分配通道,備份資料庫
.
恢複整個資料庫(資料庫要在mount狀態下執行)
.
刪除system01.dbf
.
再次開啟資料庫執行個體
.
此時資料庫無法啟動了,因為刪除了system01.dbf
使用sys串連RMAN
.
重建資料庫物理檔案。
.
同步恢複。
.
開啟資料庫
.
.
system01.dbf資料表空間已經被恢複了
.
2)備份和恢複資料表空間
資料表空間users備份:
.
備份多個資料表空間
.
在RUN命令中備份資料表空間
.
如果只丟失了特定的資料表空間的資料檔案,那麼可以選擇只恢複這個資料表空間,而不是恢複整個資料庫,資料表空間恢複可以在不關閉資料庫的情況下進行,只需要將需要恢複的資料表空間offline
類比刪除資料表空間
.
恢複資料表空間
.
查看錶空間檔案已經恢複了
.
3)資料檔案的備份與恢複
查看資料檔案
.
備份資料檔案users01.dbf(備份和恢複的時候可以指定檔案號,也可以指定檔案名稱)
.
查看資料檔案
.
刪除資料檔案user01.dbf
.
對資料檔案或資料表空間做恢複的時候資料檔案和資料表空間一定要處於offline狀態, 資料檔案丟失了,但資料庫執行個體還可以用,
.
此時資料檔案4的狀態為recover
.
恢複資料檔案
.
.
將資料檔案datafile 2處於online狀態
.
查看資料檔案的狀態,已經變成online狀態了
.
或者使用run命令恢複,命令如下:
先刪除user01.dbf
.
開始恢複:
.
查看檔案已經恢複。
.
補充自動備份:
1)產生指令檔,如backup.rcv
假定檔案內容如下:
$>cat backup.rcv
connect target sys/password rcvcat rman/[email protected];
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點對Database Backup
0 12,18 * backup_archive.sh
#表示每天12點,18點備份
Crontab檔案的每一行由六個域(minutes,hours,day of month,month,day of week,command)組成,域之間用空格或Tab分隔開來
.
二、使用資料泵技術實現邏輯備份
邏輯備份是建立資料庫物件的邏輯副本,並存入一個二進位轉儲檔案的過程。從本質上說,邏輯備份與恢複實際就是對資料庫實施資料的匯入和匯出。
.
匯出:
匯出即資料庫的邏輯備份,實質是讀取一個資料庫集並將這個資料集寫入一個檔案(副檔名通常是dmp),這些記錄的匯出與物理位置無關。
匯入:
匯入及資料庫的邏輯恢複,實質是讀取被匯出的二進位轉儲檔案並將其恢複到資料庫。
.
1、使用資料泵技術匯入/匯出
資料泵(data pump)是一種在資料庫之間或在資料庫與作業系統之前高速傳輸的技術。資料泵工具運行在伺服器上,資料庫管理員需要指定資料庫目錄來儲存轉儲的資料。
基於命令列的資料泵匯出步驟如下
1)串連oracle資料庫
.
2)建立一個操作目錄
.
3)授予使用者操作dump_dir目錄的許可權
.
4)查詢目錄是否建立好
.
5)建立測試使用者yyy並授權
.
6)匯出scott使用者下的表
使用expdp命令匯入資料(可以按照表匯出,按照使用者模式匯出,按照資料表空間匯出和全庫匯出),使用impdp命令匯入資料(可以按照表匯入,按照使用者模式匯入,按照資料表空間匯入和全庫匯入)。
.
7)刪除emp表
.
8)匯入emp表
.
9)查看emp表已經還原
.
.
10)將匯出的scott使用者下的dept和emp表匯入yyy使用者下
使用yyy使用者登入查看錶
.
.
11)匯出scott使用者模式
.
12)匯入scott使用者模式
.
13)將scott中所有的對象匯入yyy中
.
查看yyy使用者的表,發現多了很多。
.
14)匯出資料表空間
匯出yyy資料表空間(提前建立一個yyy資料表空間)
.
在資料表空間yyy建立一個表ccc
.
.
匯出資料表空間
.
15)匯入資料表空間
匯入之前刪除資料表空間,相關的表也會刪除
.
匯入資料表空間之前,需要建立一個yyy資料表空間
.
匯入資料表空間
.
查看錶已經恢複回來了
SQL> conn scott/12345
SQL> select * from scott.ccc;
.
16)匯出整個資料庫
.
17)匯入整個資料庫
.
三、使用閃回技術
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值時的狀態。
.
.
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建立的資料庫,在安裝時可以設定閃回恢複區的位置及大小。
.
閃回恢複區主要通過以下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)設定閃回資料庫
設定可閃回恢複區之後,要啟用閃回資料庫的功能,還需要進一步配置。資料庫必須已經處于歸檔模式,再設定閃回資料庫。
設定閃回資料庫的步驟如下:
啟用歸檔模式(閃回資料庫只能處于歸檔模式)
.
資料庫未設定閃回資料庫
.
建立閃回區
.
設定閃回資料庫的資料保留周期為一天以min為單位
.
啟用閃回日誌
.
查詢是否成功啟用閃回恢複區
.
查詢是否成功啟用閃回資料庫
.
6)取消閃回恢複區
將db_recovery_file_dest參數設定為空白,可以停用閃回恢複區,但是,如果已經啟用閃回資料庫,則不能取消閃回恢複區,所以必須先禁用閃回資料庫,才能取消閃回恢複區。
步驟如下:
關閉資料庫
Shutdown immediate
.
裝載資料庫
Startup mount
.
關閉資料庫閃回
Alter database flashback off;
.
開啟資料庫
Alter database open
.
修改閃回參數
Alter system set_recovery_file_dest=’’;
.
三、閃回錯誤操作技術
1、閃回資料庫
?閃回資料庫能夠使資料迅速復原到以前的某個時間點或者某個SCN上,這對於資料庫從邏輯錯誤中恢複特別有用,而且也是大多數發生邏輯損害時恢複資料庫的最佳選擇。
?作用類似於資料庫的倒帶按鈕。
?可以在使用者造成了邏輯資料損毀的情況下使用。
.
閃回資料庫基本文法為
FLASHBACK DATABASE [database] TO
[SCN|TIMESTAMP expression]|
[BEFORE SCN|TIMESTAMPexpression]
參數說明
TO SCN:將資料庫恢複到指定SCN的狀態
TO TIMESTAMP:將資料庫恢複到指定的時間點
TO BEFORE SCN:將資料庫恢複到指定SCN的前一個SCN狀態
TO BEFORE TIMESTAMP:將資料庫恢複到指定時間點前的狀態
.
閃回資料庫操作的限制:
資料檔案損壞或丟失等介質故障不能使用閃回資料庫進行恢複。閃回資料庫只能基於當前正常啟動並執行資料檔案。
閃回資料庫功能啟動後,如果發生資料庫控制檔案重建或利用備份恢複控制檔案,則不能使用閃回資料庫。
不能使用閃回資料庫進行資料檔案收縮操作。
不能使用閃回資料庫將資料庫恢複到在閃回日誌中可獲得最早的SCN之前的SCN,因為閃回記錄檔在一定條件下被刪除,而不是始終儲存在閃回恢複區中。
.
案例:使用SCN閃回資料庫
1)查詢資料庫當前的SCN
.
2)改變資料庫的目前狀態,類比建立表bxjg,並插入一條資料。
.
3)進行閃回資料庫恢複,將資料庫恢複到建立表之前的狀態,即SCN為1915426
.
4)用RESETLOGS選項開啟資料庫
.
5)驗證資料庫的狀態(bxjg表應該不存在)
.
6)可以通過查詢資料字典視圖v$flashback_database_log來獲得能夠閃回的最早的scn號,及閃回時值最早不能小於該值。同理,如果通過時間點閃回,則閃回時間也不能小於查詢得到的最早時間。
設定顯示時間格式:
.
查詢資料庫中當前最早的閃回SCN和時間
.
7)按照指定時間閃回資料庫
首先查詢資料系統目前時間
.
改變資料庫目前狀態,類比建立表test2,並插入一條資料
.
.
進行閃回資料庫恢複,將資料庫恢複到建立表之前的狀態。
.
.
使用RESETLOGS開啟資料庫
.
驗證資料庫的狀態test2表是否存在。
.
2、閃回表
閃回表是將表恢複到過去的某個時間點或者指定的SCN而不用恢複資料檔案,為DBA提供了一種線上、快讀、便捷的恢複方式,可以恢複對標進行的修改、刪除、插入等錯誤的操作。
利用閃回表技術恢複表中資料的過程,實際上是對錶進行DML操作的過程。Oracle自動維護與表相關聯的索引、觸發器、約束等。
為了使用資料庫閃回表功能,必須滿足下列條件
使用者具有flashback any table系統許可權,或者具有所動作表的flashback對象許可權。
使用者具有所動作表的select、insert、delete、alter對象許可權
啟動被動作表的row movement特性,可以採用下列方式進行。
Alter table 表名 enable row movement;
.
閃回表操作的基本文法為
FLASHBACK TABLE [schema.]table TO
SCN|TIMESTAMP expression
[ENABLE|DISABLE TRIGGERS]
.
參數說明
SCN:將表恢複到指定的SCN時狀態
TIMESTAMP:將表恢複到指定的時間點
ENABLE|DISABLE TRIGGER:在恢複表中資料的過程中,表上的觸發器是啟用還是禁用(預設為禁用)
.
注意:SYS使用者或以AS SYSDBA身份登入的使用者不能執行閃回表操作
.
案例:使用SCN閃回表
1)使用scott使用者登入
.
2)改變資料庫的目前狀態,類比建立表test3,並插入3條資料
.
SQL> commit;
.
3)查詢當前SCN號,如果目前使用者沒有許可權查詢v$database,則以sys使用者登入,授予目前使用者訪問資料字典的許可權。
.
4)更新資料(把id=1的名字改成batianhu,刪除id=3的資料),並且提交。
.
.
5)啟動test3表的ROW MOVEMENT特性
.
6)將test3表恢複到2016-12-26 15:17:50,.....7)查詢
.
.
8)將表test3恢複到scn為1923436的狀態
.
3、閃回刪除
閃回刪除可以恢複使用drop table語句刪除的表,是一種對意外刪除的表的恢複機制。
閃回刪除功能的實現主要是通過oracle資料庫中的“資源回收筒”技術實現的。在oracle資料庫中,當執行drop table 操作時,並不立即回收表及、及其關聯的對象的空間,而是將它們重新命名後放入一個稱為“資源回收筒”的邏輯容器中儲存,直到使用者決定永久刪除它們或儲存該表的資料表空間儲存空間不足時,表才能真正被刪除。為了使用閃回刪除技術,必須開啟資料庫的“資源回收筒”。
.
1)啟動資源回收筒,將參數recyclebin設定為ON,在預設情況下“資源回收筒”已啟動。
.
2)查看“資源回收筒”。當執行drop table操作時,表及其關聯對象被命名後儲存在“資源回收筒”中,可以通過查詢user_recyclebin,dba_recyclebin視圖獲得被刪除的表及其關聯對象資訊。
.
select object_name,original_name,type from user_recyclebin;
.
注意:不支援sys使用者,system資料表空間下的對象也不能從資源回收筒裡拿到,故使用sys或者system使用者登入時,查詢為空白。
.
3)如果在刪除表時使用了PURGE短語,則表及其關聯對象被直接釋放,空間被回收,相關資訊不會進入“資源回收筒”中。
建立表,並且使用purge短語刪除
.
查看在資源回收筒裡面沒有
.
select object_name ,original_name ,type from user_reclebin;
.
4)清空資源回收筒
由於被刪除表及其關聯對象的資訊儲存在“資源回收筒”中,其儲存空間並沒有釋放,因此需要定期清空“資源回收筒”,或清楚“資源回收筒”中沒有用的對象(表、索引、資料表空間),釋放其所佔的磁碟空間。
.
文法如下:
PURGE [TABLE 表名 | INDEX index]
[RECYCLEBIN | DBA_RECYCLEBIN] | [TABLESPACE tablespace [USER user]]
參數說明:
TABLE:從資源回收筒中清除指定的表
INDEX:從資源回收筒中清除指定的索引,並回收其磁碟空間
RECYCLEBIN:清空使用者“資源回收筒”,並回收所有對象的磁碟空間
DBA_RECYCLEBIN:清空整個資料庫系統的“資源回收筒”,只有具有SYSDBA許可權的使用者才可以使用
TABLESPACE :清除“資源回收筒”中指定額資料表空間,並回收磁碟空間
USER:清除資源回收筒中指定資料表空間中特定使用者的對象,並回收磁碟空間
.
5)閃回刪除操作
FLASHBACK TABLE [schema.]table TO BEFORE DROP [RENAME TO table]
.
注意:只有本地管理的,非系統資料表空間中的表可以使用閃回刪除操作。
.
案例:閃回刪除樣本
建立表,插入資料並提交
.
刪除表
.
閃回表
.
或者閃回表之後重新命名
.
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的閃回查詢
.
2)更新員工號為7844的工資,更新為2000,並提交事物
.
第一個事務提交,自動開啟第二個事物。
.
3)再次更新員工號為7844的工資,更新兩次,提交事物。
.
第二個事物提交,自動開啟第三個事務
4)再次更新員工號為7844的工資,更新為3500,並提交事物
.
執行Commit提交
.
第三個事務提交,自動開啟第四個事務
.
5)查詢7844號員工的當前工資
.
6)查詢7844號員工前一個小時的工資
.
7)查詢第一個事務提交,第二個事物還沒有提交時7844號員工的工資
.
8)如果需要,可以將資料恢複到過去某個時刻的狀態
Oracle備份與恢複