?

Oracle閃回技術的應用與實踐分析

2020-12-28 02:26陳偉明
中阿科技論壇(中英阿文) 2020年10期
關鍵詞:數據庫

陳偉明

摘要:閃回技術是Oracle提供的一種強大的備份恢復機制手段,能夠讓用戶及時地恢復由于誤操作而造成的數據庫邏輯錯誤,達到損失最小化,避免進行沒有可用邏輯備份而采取的數據庫不完全恢復,且多數都能在聯機狀態下完成。本文主要介紹了閃回技術幾種常用的技術手段,并利用一些實例展示了該技術在實際工作中的具體應用。

關鍵詞:Oracle;數據庫;閃回

中圖分類號:G202? ? ? ? ? ? ? ? ? 文獻標識碼:A

在實際工作中,Oracle數據庫的人為錯誤操作,比如數據誤刪除或者執行了錯誤的更新,且提交了數據,可能會造成系統停機。在沒有邏輯或物理備份的情況下,要想進行數據恢復是非常困難的,而利用Oracle數據庫提供的閃回技術, 可以讓管理員將數據庫回退到過去的某一個狀態,更正邏輯錯誤操作,其簡單易用,效率高,大大提高了數據庫的安全性和完整性1。Oracle提供了閃回表、閃回刪除、閃回版本查詢、閃回事務查詢,閃回數據庫,閃回數據歸檔等閃回技術。本文就其中幾種閃回技術做簡單介紹,并對最常用的利用具體實例加以說明。

1? 閃回表操作

閃回表是一個獨立的事務,主要是為了解決用戶對某個表不小心做了不正確操作,需要在線恢復指定表中的數據。通過閃回表操作,將指定表中數據恢復到指定的時間點或者系統改變號SCN上,并自動恢復索引,約束,觸發器等,而數據庫繼續保持連接狀態,其它表不受影響同樣保持當前狀態。Oracle閃回查詢主要是利用了Undo表空間,閃回查詢能恢復的時間點取決于Undo表空間的大小和Undo_Retention參數有關,且無法對過去版本的數據進行DML操作。此外,閃回表利用DML操作恢復數據時,其無法保證Rownum號不變,因此我們在進行閃回操作前必須先要啟動行移動功能,否則閃回操作會報錯。

下面用一個實例說明如何將表中的數據恢復到指定時間點的操作。

(1)創建一個測試表Com_Employee,包含員工編號、姓名、性別等演示數據。

結果顯示,表中只有張三的基本信息,證明數據被恢復到了指定的時間點,閃回成功,閃回表可能會失敗,主要原因是不能保護系統表空間中的表,即不適用于SYS模式下的表,違反了外鍵約束,撤銷數據被覆蓋后導致數據失效,權限不足,有其他用戶鎖定了閃回作用的行而不能閃回,對表的DLL操作比如對表做了截斷操作或者刪除了列等,實際應用時應加以判斷。盡量在最短時間內發現錯誤并執行閃回操作,如果閃回因為任何原因而失敗,Oracle閃回操作將會被終止,回滾已經成功執行的任何一部分操作,將表狀態回到閃回命令發出之前的樣子。

2? 閃回刪除

恢復已經被用戶刪除Drop的數據庫對象,相應的索引,數據庫約束也會被還原。閃回刪除需要用到Oracle 中的回收站機制。Drop命令僅相當于一個重命名的操作,當用戶刪除一個表的時候,該表的所有相關對象也將被保存在Oracle 回收站內,未被真正刪除,此時可以通過閃回刪除操作將用戶被錯誤Drop的表進行閃回操作。閃回被誤刪除的表實例演示如下。

需要注意的是閃回刪除僅針對DROP 操作,對于Truncate操作和回收站被Purge的表將無法恢復,另外依賴該表的位圖索引、引用完整性約束不受回收站保護。

3? 閃回版本查詢和閃回事務查詢

一條行數據在使用周期內可能會發生多次改變。閃回版本查詢可用于查看一個行在不同時期內所提交的不同版本的數據,以及相應的DML操作記錄,主要包括該版本數據的創建時間和結束時間,操作者是誰以及每個更改的事務標識符,從而讓我們可以詳細了解某個具體的表在這個時間段內的具體變化情況。閃回事務查詢則是閃回版本查詢的擴充,可以實現審計事務或者撤銷一個已經提交的事務,Oracle中進行DML操作并提交后,Oracle會自動構造SQL語句來反轉事務的更改,自動執行修復過程,其主要是利用了保存在Flashback_Transaction_Query 表中的Undo_Sql來恢復具體的事務操作,而并不是回滾一個已經提交到事務,利用它可以看到受該事務影響的每個行都對應有一行記錄。閃回事務不會造成數據丟失,僅僅是撤銷指定的事務,并且數據庫依舊能夠保持當前狀態。

實例演示:新建一個表Test,并做一些DML操作,接著查詢出這些具體的操作,并做指定的撤銷處理。

(1)新建表,插入2條演示數量,并模擬刪除其中的一條數據。

(6)查詢Test表進行結果檢查,數據回到了原來Update前的初始狀態了,閃回完成。

需要注意的是,閃回版本查詢不能用于外部表、視圖或臨時表,因為這些對象都能不生成撤銷數據。當對表做了截斷操作,或者對表欄做了刪除列的操作后,閃回版本查詢信息將丟失,但增加列的DDL操作則不會丟失版本查詢信息。

4? 閃回數據歸檔

閃回數據歸檔區本質是從一個或多個表空間中劃出來的一部分空間,能夠使表具有退回到過去任何時間點的能力。閃回操作中除了閃回數據庫是利用了閃回日志外,其他都依賴撤銷表空間,然而撤銷表空間是循環使用的,老的數據會被新的數據替換,且保留時間短,一旦撤銷數據被覆蓋重寫,將必然導致閃回失敗,而利用閃回數據庫歸檔,將改變的數據另外存放到特定的閃回數據歸檔區,從而有效避開撤銷數據空間大小的限制,提高數據保留時間。它只針對Undate和Delete語句,并不保存Intert操作。我們在某個表空間上創建一個數據歸檔區,并設置好大小和保留時間,然后為具體的表指定具體的閃回數據歸檔區,通過為表指定閃回歸檔區后,實際上就開啟了對表的跟蹤,這時將不再允許對表執行DLL操作,如刪表、增刪列、改名等,這些限制可以通過 alter table test1 no flashback archive進行取消,通過設置以后,表就具有了退回到保留時間內某個具體時間點的能力。

5? 結語

本文主要針對Oracle常用閃回技術做了簡單介紹并結合實例演示了閃回技術給我們提供的一種針對數據庫邏輯錯誤快速恢復的機制,多數能在聯機狀態下進行數據恢復,快速且有效,閃回的過程中,也有可能失敗,閃回前可能需要取消對某些表完整性和約束檢查,但是,閃回恢復的程度取決于閃回空間的大小以及保留的時間策略設置,但對于磁盤的物理損壞或介質丟失,閃回技術就無法發揮其作用了,必須借助Oracle其他的備份恢復工具進行備份恢復操作,因此,閃回技術更適合恢復偶然的操作錯誤,其增強了系統可用性與一致性。

(責任編輯:武多多)

參考文獻:

[1]張曉明.大話Oracle RAC集群、高可用性,備份與恢復[M].北京:人民郵電出版社,2011.

[2]李興華,馬云濤.Oracle開發實戰經典[M].北京:清華大學出版社,2014.

[3]楊建榮.Oracle DBA工作筆記:運維、數據遷移與性能調優[M].北京:中國鐵道出版社,2016.

猜你喜歡
數據庫
數據庫
數據庫
數據庫
數據庫
數據庫
數據庫
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合