Flashback Table 可分為兩個層次,一種是 Table Drop 之後的恢復,另一種則是 Table 本身資料的恢復。
Oracle 從 10g 開始有了 Recycle bin 的新功能, Recycle bin 就有如 Windows 系統的資源回收桶一樣,當 Table 被執行了 Drop 命令之後不會真正的被刪除,而是會將此 Table 放入 Recycle bin ,被放入 Recycle bin 的 Table 都會重新命名以 BIN$ 作為開頭,而在 Recycle bin 裡面的 Table 並沒有真正的被刪除,只是標示一筆可被刪除的紀錄而已,所以 Recycle bin 還是會占用到空間。 Flashback Table 就是將 Table 從 Recycle bin 還原回來的一種技術。
當 Table 被錯誤的 Drop 時,可以簡單的使用 Flashback Table 指令來還原,例如將 regions 這個 Table 刪除:
此時可以透過查詢 dba_recyclebin 來檢視此 Table 是否存在 Recycle bin :
或者是簡單使用 show recyclebin 來查詢也可以:
當確認 Table 有在 Recycle bin 之後,就可以使用 Flashback Table 來還原它:
清理 Recycle bin 可以直接使用 purge dba_recyclebin 指令來清空資源回收桶:
如果不希望 Table 存放在 Recycle bin ,可以在 Drop 時加入 purge 指令,這樣 Table 就完完全全的被刪除了:
要完整的關閉 Recycle bin 功能可以將參數 recyclebin 設置為 off :
設置 recyclebin 為 off 在 Oracle 10g 時必須將資料庫重啟讓參數生效,而在 Oracle 11g 以後就不需要重啟了。
Recycle bin 可以說是防止人為操作疏失的一種保護機制,預設是開啟的,建議還是使用它比較好。
Flashback Table 的另一種模式是將 Table 的資料還原到之前的某一個時間點,這個功能就與 Flashback Query 類似,是基於 Undo 的一種技術,要還原 Table 的資料必須開啟 row movement ,例如將 regions 開啟 row movement :
此時 Table 的資料被誤刪之後就可以使用 Flashback Table 將資料還原:
Flashback Table 可以還原到之前的某一個 SCN (to scn) 或者是時間點 (to timestamp) :
Flashback Table 會將 Table 全部的資料統一還原到先前的時間點,在實務上並沒有 Flashback Query 好用,如果只是要還原被誤刪的資料,倒不如直接使用 Flashback Query 就好,除非有將 Table 的資料全數倒回去的需求,否則不太會使用 Flashback Table 。
沒有留言:
張貼留言