2012-11-30 22 views
2

您知道查詢過去的數據的確切方式嗎?Oracle flashbacks,查詢過去的數據

Oracle版本是10G

與此查詢我可以恢復一些數據,但有時此查詢

select * 
    from table as of timestamp systimestamp - 1 

檢索錯誤(太舊的快照)。 是否有可能增加這項工作的時間並獲取約24小時的數據?謝謝!

+1

什麼是Oracle版本? –

+0

Oracle 10G,感謝您的評論:)我也在編輯問題 – Vargan

回答

3

錯誤的含義是回滾段失效,因爲 通常查詢時間過長。還有其他原因。像回滾段大小一樣。

表中有多少行? - 你可以從這個 得到一個想法,從all_tables select num_rows where table_name ='MYTABLE_NAME_GOES_HERE';

如果有很多行,您可能需要查看添加某種索引來支持您的查詢。由於全表掃描時間過長。如果不是,那麼這是一個DBA問題。也許在你的店鋪中增加一個索引也是一個DBA問題。

如果這種方法在幾天前運行良好,並且最近開始發生,那麼您可能剛剛通過了回滾閾值。

+0

在這種類型的閃回查詢的上下文中,錯誤指示撤消不保留爲所需的閃回時間戳,而不是查詢本身耗時過長。請注意,閃回查詢的性能並不是很高。索引不可能像往常一樣有幫助,因爲它們也需要從撤消重構。 –

3

這裏的關鍵問題是調整撤消段的大小,以及撤消保留和保證。

它的長短之處在於,您需要使用您的撤消表空間來保存可以在想要閃回的最長時間段內完成的所有更改,並且您希望設置撤消保留參數到那個價值。如果您的應用程序確實對保留撤消至關重要,請在撤消表空間上設置撤消保證。

有用的文檔:http://docs.oracle.com/cd/B12037_01/server.101/b10739/undo.htm#i1008577

要知道,閃回的表現是比較差的大量數據,作爲要求撤銷塊需要在表中找到。 11g有更好的高性能閃回選項。