Oracle 恢復表數據到指定時間點


Oracle 恢復表數據到指定時間點

昨天在操作數據庫的時候,對一張表執行了update語句,但是沒有加上where過濾條件,導致表中的數據全部都被修改了。所以就想着嘗試將表恢復到指定的時間點上。

嘗試執行如下語句:

  • select * from table_name as of timestamp to_timestamp('time','yyyy-mm-dd hh24:mi:ss');
  • alter table table_name enable row movement;
  • flashback table table_name to timestamp TO_TIMESTAMP('time','yyyy-mm-dd hh24:mi:ss');

以上的語句分別用來:

  • 查看緩存區指定時間點指定表的數據
  • 為表開啟行遷移(允許Oracle 修改分配給行的rowid。在Oracle 中,插入一行時就會為它分配一個rowid,而且這一行永遠擁有這個rowid。閃回表處理會對EMP 完成DELETE,並且重新插入行,這樣就會為這些行分配一個新的rowid。要支持閃回就必須允許Oracle 執行這個操作)
  • 閃回到指定時間點

但是昨天執行第一條語句的時候出錯了

ORA-01555 snapshot too old:
    rollback segment number string with name "string" too small

是的,說是快照太舊了。

這個就很無語,然后網上查了一下,引起這個報錯的原因如下:

  • undo段太小
  • 事務被頻繁提交
  • 查詢時間過長

這個其實就是undo段太小然后事務的頻繁提交導致undo段被覆蓋了,再想去查的時候就會報snapshot too old

解決方法就是避免上面三個原因的發生了。

但是,我誤操作的數據怕是還原不回來了- -


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM