轉(zhuǎn):blog.csdn.net/zhouwubin123/article/details/6617837
1.應(yīng)用Flashback Query查詢過(guò)去的數(shù)據(jù)
Flashback Query這一特性,最常被應(yīng)用的就是修復(fù)誤操作的數(shù)據(jù)了。注意蹬竖,這并不是說(shuō)Flashback
Query能夠恢復(fù)數(shù)據(jù)薪棒。Flashback Query本身不會(huì)恢復(fù)任何操作或修改,也不能告訴你做過(guò)什么操作或修改赘理,實(shí)際上Flashback
Query特性實(shí)際應(yīng)用時(shí),是基于標(biāo)準(zhǔn)SELECT的擴(kuò)展,借助該特性能夠讓用戶查詢到指定時(shí)間點(diǎn)的表中的記錄鞠呈,相當(dāng)于擁有了看到過(guò)去的能力,至于恢復(fù)右钾,SELECT的結(jié)果都出來(lái)了蚁吝,難道還不懂如何執(zhí)行INSERT
TABLE SELECT或CREATE TABLE AS SELECT嗎?
1.1基于時(shí)間的查詢(AS OF TIMESTAMP)
以前面創(chuàng)建的FLASH_TBL表為例舀射,先來(lái)刪除幾條記錄并提交:
這個(gè)時(shí)候FLASH_TB1表中ID<10的記錄均已被刪除窘茁,假設(shè)過(guò)了一會(huì)兒用戶發(fā)現(xiàn)刪除操作執(zhí)行有誤,仍需找回那些被誤刪的記錄該怎么辦呢脆烟?通過(guò)備份恢復(fù)嗎山林,如果是在8i或之前版本,恐怕是需要這樣邢羔,自9i之后驼抹,使用Flashback
Query的特性,我們可以很輕松地恢復(fù)記錄(注意并不是任何情況下都可以恢復(fù)喲拜鹤,后面會(huì)講到制約Flashback
Query的一些因素框冀,這里假設(shè)的都是在理想條件下)。
現(xiàn)在就演示應(yīng)用Flashback Query敏簿,首先是找到它明也,假設(shè)當(dāng)前距離刪除數(shù)據(jù)有5分鐘左右的時(shí)間,執(zhí)行SELECT查詢語(yǔ)句,并附加AS OF子句诡右,例如:
提 示
SYSDATE-5/1440是啥意思安岂,1440又是怎么來(lái)的?
首先60(分)×24=1440帆吻,這樣就計(jì)算出一天擁有多少分鐘域那,SYSDATE是系統(tǒng)函數(shù),用來(lái)取得當(dāng)前的系統(tǒng)時(shí)間(以天為單位)猜煮,SYSDATE-5/1440次员,得出的就是距當(dāng)前時(shí)間5分鐘前的記錄了。后面示例中需要計(jì)算之前的某個(gè)時(shí)段時(shí)王带,均是使用這一方法淑蔚。
你看,我們通過(guò)增加AS OF TIMESTAMP的語(yǔ)法愕撰,查詢到的數(shù)據(jù)就是5分鐘之前的刹衫,基于這一結(jié)果,可以輕易并且快速地將記錄恢復(fù):
JSSPRE> INSERT INTO FLASH_TBL??? SELECT * FROM FLASH_TBL AS OF TIMESTAMP
SYSDATE-5/1440??? 3? WHERE ID<10;
9 rows created.
JSSPRE> COMMIT;
Commit complete. 成功插入9條記錄搞挣,查詢表中當(dāng)前的記錄:
如上述示例中所示带迟,AS OF TIMESTAMP方式的使用非常方便,但是在某些情況下囱桨,我們建議使用AS OF SCN的方式執(zhí)行Flashback Query仓犬。如需要對(duì)多個(gè)相互有主外鍵約束的表進(jìn)行恢復(fù)時(shí),如果使用AS OF TIMESTAMP的方式舍肠,可能會(huì)由于時(shí)間點(diǎn)不統(tǒng)一的緣故造成數(shù)據(jù)選擇或插入失敗搀继,通過(guò)AS OF SCN方式則能夠確保記錄處理的時(shí)間點(diǎn)一致。