2013-10-01 44 views
0

我意外地丟了一個相當大的表 - 回收站未啓用。我很確定數據仍然存在於UNDO表空間中,但我不知道如何解決。我完全按照它在放下之前重新創建表 - 結構完全一樣。然而,當我嘗試閃回表,我得到這個錯誤:我在Oracle中刪除了一個表,如何從撤消表空間中檢索它?

flashback table tablex to timestamp (systimestamp - interval '120' minute); 
Error: 01466 
DBD::Oracle::db do failed: ORA-01466: unable to read data - table definition has changed 

任何想法如何,我可以克服這個問題?從我所做的所有搜索中,似乎認爲表格在結構上與結束時不一樣。

+0

嗯,我沒有回滾,因爲我認爲放棄一個表實際上不能通過回滾撤消。我認爲只有像插入和更新的DML操作可以回滾? – user2836455

+0

當使用閃回到時間戳功能時,FLASHBACK TABLE不需要回收站。如果你正在使用它,它會檢查UNDO表空間,據我所知(我可能在這裏是錯誤的)。 – user2836455

+0

如果回收站未啓用,並且您通過在'show parameter recyclebin'的結果中的'value'列中查看'off'來確認它,那麼確實沒有簡單的方法將表格返回而無需進行點入數據庫或故事空間的時間恢復。你也可以嘗試使用'LogMiner'來恢復和恢復被丟棄的表,但它可能需要更多的時間。 –

回答

2

我想你不應該自己重新創建表 - 它將被甲骨文,當你閃回它重新創建你的,我推薦以下文章:http://www.oracle-base.com/articles/10g/flashback-10g.php#flashback_table

例子:

CREATE TABLE flashback_table_test (
    id NUMBER CONSTRAINT pk_flashback_table_test PRIMARY KEY 
); 

DROP TABLE flashback_table_test; 
FLASHBACK TABLE flashback_table_test TO BEFORE DROP; 

我想您需要在手動重新創建表格時使用某個SCN號碼進行閃回。

相關問題