ORACLE 各种闪回操作
1、Flashback Database(利用閃回日志恢復(fù))
?Oracle Flashback Database特性允許通過SQL語(yǔ)句Flashback Database語(yǔ)句,讓數(shù)據(jù)庫(kù)前滾到當(dāng)前的前一個(gè)時(shí)間點(diǎn)或者SCN,而不需要做時(shí)間點(diǎn)的恢復(fù)。閃回?cái)?shù)據(jù)庫(kù)可以迅速將數(shù)據(jù)庫(kù)回到誤操作或人為錯(cuò)誤的前一個(gè)時(shí)間點(diǎn),如Word中的"撤消"操作,可以不利用備份就快速的實(shí)現(xiàn)基于時(shí)間點(diǎn)的恢復(fù)。Oracle通過創(chuàng)建新的Flashback Logs(閃回日志),記錄數(shù)據(jù)庫(kù)的閃回操作。如果希望能閃回?cái)?shù)據(jù)庫(kù),需要設(shè)置如下參數(shù):DB_RECOVER_FILE_DEST日志的存放位置,DB_RECOVER_FILE_DEST_SIZE恢復(fù)區(qū)的大小。在創(chuàng)建數(shù)據(jù)庫(kù)的時(shí)候,Oracle將自動(dòng)創(chuàng)建恢復(fù)區(qū),但默認(rèn)是關(guān)閉的,需要執(zhí)行alter database flashback on命令。
?
例:執(zhí)行Flashback Database命令格式。
SQL>flashback database to time to_timestamp(xxx);
SQL>flashback database to scn xxx
?
2、Flashback Table(利用UNDO保留信息恢復(fù))
?Oracle Flashback Table特性允許利用Flashback Table語(yǔ)句,確保閃回到表的前一個(gè)時(shí)間點(diǎn)。與Oracle 9i中的Flashback Query相似,利用回滾段信息來恢復(fù)一個(gè)或一些表到以前的一個(gè)時(shí)間點(diǎn)(一個(gè)快照)。要注意的是,Flashback Table不等于Flashback Query,Flashback Query僅僅是查詢以前的一個(gè)快照點(diǎn)而已,并不改變當(dāng)前表的狀態(tài),而Flashback Table將改變當(dāng)前表及附屬對(duì)象一起回到以前的時(shí)間點(diǎn)。
?語(yǔ)法:
?flashback table tablename to timestamp xxx或
?flashback table tablename to scn xxx
?
注意:如果需要閃回一個(gè)表,需要以下條件:
?需要有flashback any table的系統(tǒng)權(quán)限或者是該表的flashback對(duì)象權(quán)限;
?需要有該表的select,insert,delete,alter權(quán)限;
?必須保證該表row movement。
?
例:執(zhí)行將test表閃回到2011年5月7日下午3點(diǎn)。
SQL>flashback table test to timestamp to_timestamp(’2011-05-07 15:00:00’,’yyyy-mm-dd hh24:mi:ss’);
?
3、Flashback Drop(利用回收站功能恢復(fù))
注:由于目前的環(huán)境為了實(shí)現(xiàn)OGG的DDL同步,關(guān)閉了回收站功能,故這個(gè)功能不可用。
?
4、Flash Version Query(利用UNDO保留信息恢復(fù))
?Oracle Flashback Version Query特性,利用保存的回滾信息,可以看到特定的表在時(shí)間段內(nèi)的任何修改,如電影的回放一樣,可以了解表在該期間的任何變化。Flashback version query一樣依賴于AUM,提供了一個(gè)查看行改變的功能,能找到所有已經(jīng)提交了的行的記錄,分析出過去時(shí)間都執(zhí)行了什么操作。Flashback version query采用VERSIONS BETWEEN語(yǔ)句來進(jìn)行查詢,常用的方法:
?
·VERSIONS_SCN -?系統(tǒng)改變號(hào)
?
·VERSIONS_TIMESTAMP -?時(shí)間
?
例如:在test表中,時(shí)間1插入一條記錄,時(shí)間2刪除了這條記錄,對(duì)于時(shí)間3執(zhí)行select * from test當(dāng)然查詢不到這條記錄,只能看到該表最后的提交記錄。這時(shí)如果利用Flash Table或者是Flash Query,只能看到過去的某一時(shí)間點(diǎn)的一個(gè)快照,而利用Flashback Version Query,能夠把時(shí)間1、時(shí)間2的操作給記錄下來,并詳細(xì)的查詢出對(duì)表進(jìn)行的任何操作。
?
基于SCN的閃回查詢:
SQL> select count(*) from lm_mtrp_syn_channelinfo as of scn 708000000;
?
??COUNT(*)
----------
????????21
?
基于時(shí)間段的閃回查詢:
SQL>select versions_starttime,versions_endtime, versions_xid,versions_operation,id
from test versions
between timestamp minvalue and maxvalue
order by versions_starttime;
?
5,Flashback Transaction Query(利用UNDO保留信息恢復(fù))
?Oracle Flashback Transaction Query特性確保檢查數(shù)據(jù)庫(kù)的任何改變?cè)谝粋€(gè)事務(wù)級(jí)別,可以利用此功能進(jìn)行診斷問題、性能分析和審計(jì)事務(wù)。它其實(shí)是Flashback Version Query查詢的一個(gè)擴(kuò)充,Flashback Version Query說明了可以審計(jì)一段時(shí)間內(nèi)表的所有改變,但是也僅僅是能發(fā)現(xiàn)問題,對(duì)于錯(cuò)誤的事務(wù),沒有好的處理辦法。而Flashback Transaction Query提供了從FLASHBACK_TRANSACTION_QUERY視圖中獲得事務(wù)的歷史以及Undo_sql(回滾事務(wù)對(duì)應(yīng)的sql語(yǔ)句),也就是說審計(jì)一個(gè)事務(wù)到底做了什么,甚至可以回滾一個(gè)已經(jīng)提交的事務(wù)。
?例:Flashback Transaction Query的操作實(shí)例。
?(1)在test表中刪除記錄,獲得事務(wù)的標(biāo)識(shí)XID,然后提交。
?SQL>delete from test where id=2;
?SQL>select xid from v$transaction;
?XID
?----------------
?04001200AE010000
?SQL>commit;
?
在測(cè)試中方便起見,在事務(wù)沒有提交的時(shí)候,獲得事務(wù)的XID為04001F0035000000。實(shí)際情況下,不可能去跟蹤每個(gè)事務(wù),想要獲得已提交事務(wù)的XID,就必須通過上面的Flashback Version Query。
?
(2)進(jìn)行Flashback Transaction Query
?
SQL>select * from FLASHBACK_TRANSACTION_QUERY
?where xid=’04001F0035000000’;
?UNDO_SQL
?insert into "FLASHTEST"."TEST"("ID") values (’2’);
?
注意:這個(gè)刪除語(yǔ)句對(duì)應(yīng)的是1個(gè)Insert語(yǔ)句,如果想回滾這個(gè)事務(wù),執(zhí)行這個(gè)Insert語(yǔ)句即可。
?可以看到,Flashback Transaction Query主要用于審計(jì)一個(gè)事務(wù),并可以回滾一個(gè)已經(jīng)提交的事務(wù)。如果確定出錯(cuò)的事務(wù)是最后一個(gè)事務(wù),我們利用Flashback Table或者Flashback Query就可以解決問題。但是,如果執(zhí)行了一個(gè)錯(cuò)誤的事務(wù)之后,又執(zhí)行了一系列正確的事務(wù),那么上面的方法就無能為力,利用Flashback Transaction Query可以查看或回滾這個(gè)錯(cuò)誤的事務(wù)。
?
另:ORACLE 11G還多了一個(gè)閃回?cái)?shù)據(jù)歸檔的功能,即可將UNDO的信息進(jìn)行歸檔,這個(gè)功能對(duì)于一些比較重要的表,可以起到一個(gè)長(zhǎng)期的歷史數(shù)據(jù)追溯作用,是對(duì)UNDO的過期信息一個(gè)革命性的改進(jìn),當(dāng)然,啟用這種功能,也消耗一定的存儲(chǔ)空間和性能。
轉(zhuǎn)載于:https://www.cnblogs.com/einyboy/archive/2012/08/06/2624858.html
總結(jié)
以上是生活随笔為你收集整理的ORACLE 各种闪回操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 位图法
- 下一篇: jquery实战--定宽