轉(zhuǎn):blog.csdn.net/zhouwubin123/article/details/6617837
1.應(yīng)用Flashback Query查詢過去的數(shù)據(jù)
Flashback Query這一特性,最常被應(yīng)用的就是修復(fù)誤操作的數(shù)據(jù)了。注意,這并不是說Flashback
Query能夠恢復(fù)數(shù)據(jù)。Flashback Query本身不會恢復(fù)任何操作或修改,也不能告訴你做過什么操作或修改,實際上Flashback
Query特性實際應(yīng)用時,是基于標(biāo)準SELECT的擴展,借助該特性能夠讓用戶查詢到指定時間點的表中的記錄,相當(dāng)于擁有了看到過去的能力,至于恢復(fù),SELECT的結(jié)果都出來了,難道還不懂如何執(zhí)行INSERT
TABLE SELECT或CREATE TABLE AS SELECT嗎?
1.1基于時間的查詢(AS OF TIMESTAMP)
以前面創(chuàng)建的FLASH_TBL表為例,先來刪除幾條記錄并提交:
這個時候FLASH_TB1表中ID<10的記錄均已被刪除,假設(shè)過了一會兒用戶發(fā)現(xiàn)刪除操作執(zhí)行有誤,仍需找回那些被誤刪的記錄該怎么辦呢?通過備份恢復(fù)嗎,如果是在8i或之前版本,恐怕是需要這樣,自9i之后,使用Flashback
Query的特性,我們可以很輕松地恢復(fù)記錄(注意并不是任何情況下都可以恢復(fù)喲,后面會講到制約Flashback
Query的一些因素,這里假設(shè)的都是在理想條件下)。
現(xiàn)在就演示應(yīng)用Flashback Query,首先是找到它,假設(shè)當(dāng)前距離刪除數(shù)據(jù)有5分鐘左右的時間,執(zhí)行SELECT查詢語句,并附加AS OF子句,例如:
提 示
SYSDATE-5/1440是啥意思,1440又是怎么來的?
首先60(分)×24=1440,這樣就計算出一天擁有多少分鐘,SYSDATE是系統(tǒng)函數(shù),用來取得當(dāng)前的系統(tǒng)時間(以天為單位),SYSDATE-5/1440,得出的就是距當(dāng)前時間5分鐘前的記錄了。后面示例中需要計算之前的某個時段時,均是使用這一方法。
你看,我們通過增加AS OF TIMESTAMP的語法,查詢到的數(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。如需要對多個相互有主外鍵約束的表進行恢復(fù)時,如果使用AS OF TIMESTAMP的方式,可能會由于時間點不統(tǒng)一的緣故造成數(shù)據(jù)選擇或插入失敗,通過AS OF SCN方式則能夠確保記錄處理的時間點一致。