Oracle 11G 閃回技術 使用Oracle閃回查詢

yuntui發表於2016-11-03

使用帶有AS OF子句的SELECT語句進行閃回查詢。閃回查詢獲取之前的時間點的資料。

語句透過時間戳或SCN顯示地引用過去的時間。返回在那個時間點當時已經提交的資料。

閃回查詢的使用包括:

1. 恢復丟失的資料、撤銷不正確的且已經提交的改變。例如,如果你錯誤地刪除或更新了行並且提交了,可以立即撤銷這個錯誤。

2. 比較當前的資料和早些時候的資料。例如,可以執行一個日報表,來顯示資料從昨天到今天的變化。

可以比較單獨的行;也可以檢視行集合的交集和並集。

3. 檢視事務資料在特定的時間的狀態。例如,可以驗證某一天的帳戶餘額。

4. 透過消除儲存一些型別的臨時資料所需要,簡化應用程式的設計。Oracle允許你直接從資料庫獲取過去的資料。

5. 對過去的資料應用打包的應用,例如報告產生工具。

6. 為應用提供了錯誤改正的自我服務,允許使用者undo和改變他們的錯誤。

示例A. 檢查和還原過去的資料
假設12:30 PM發現員工Chung所對應的資料行被從employees表中刪除了。並且你知道在9:30 AM時,Chung的資料在資料庫中是正常的。可以使用閃回查詢來檢視在9:30 AM時表中的內容,來找到丟失的資料。如果需要,可以還原資料。

-- 使用閃回查詢獲取丟失的行

SELECT * FROM employees

AS OF TIMESTAMP TO_TIMESTAMP('2004-04-04 09:30:00', 'YYYY-MM-DD HH:MI:SS')

WHERE last_name = 'Chung';

 

--使用閃回查詢還原丟失的行

INSERT INTO employees (

  SELECT * FROM employees

  AS OF TIMESTAMP TO_TIMESTAMP('2004-04-04 09:30:00', 'YYYY-MM-DD HH:MI:SS')

  WHERE last_name = 'Chung'

);


Oracle閃回查詢指導

1. 可以對每個表指定或省略AS OF子句,對不同的表指定不同的次數。

注意:如果一個表是閃回資料歸檔,並且指定了時間比它建立的時間還要早,則查詢會返回0行,而不會引起錯誤。

2. 可以在查詢中使用AS OF子句來執行DDL操作(例如建立和截斷表),

也可以用來在和閃回查詢相同的會話中執行DML操作(INSERTDELETE)。

3. 在影響資料庫當前狀態的DDL語句或DML語句中使用閃回查詢的結果,

可以在INSERTCREATE TABLE AS SELECT語句中使用AS OF子句。

4. 如果在應用中,這種3秒鐘的誤差對於閃回查詢是重要的,則使用SCN而不是時間戳。

5. 可以使用建立檢視引用過的資料,即在檢視定義的SELECT語句中使用AS OF子句。

如果指定一個相對時間,即從資料庫主機的當前時間減去,則對於每個查詢,時間要重新計算。

CREATE VIEW hour_ago AS

  SELECT * FROM employees AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '60' MINUTE);

6. 可以在自連線或集合操作中使用AS OF子句,來提取和比較來自於不同時間的資料。

可以透過在閃回查詢之前加上CREATE TABLE AS SELECTINSERT INTO TABLE SELECT,來儲存閃回查詢的結果。

INSERT INTO employees

(SELECT * FROM employees AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '60' MINUTE))

MINUS

SELECT * FROM employees);






來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30633755/viewspace-2127662/,如需轉載,請註明出處,否則將追究法律責任。

相關文章