1.誤刪除恢復
-- 第一步 從刪除的閃存表中找到刪除點的時間戳
select * from v$sql where sql_text like '%表名%'
-- 第二步 查詢這個時間戳所刪除的數(shù)據(jù)是不是需要的數(shù)據(jù)
select * from 表名 as of timestamp to_timestamp('刪除點的時間戳','yyyy-mm-dd hh24:mi:ss')
-- 第三步 把刪除的數(shù)據(jù)插入原表中
insert into 表名
select * from 表名 as of timestamp to_timestamp('2023-03-10/13:32:16','yyyy-mm-dd hh24:mi:ss')
2.誤更新數(shù)據(jù)
--找到數(shù)據(jù)表時間戳
select * from (
select * from T_SALEBUDGET as of timestamp to_timestamp('2024-12-02 07:53:00','yyyy-mm-dd hh24:mi:ss')
) where company =1 and to_char(time,'yyyy-mm')='2024-11'
--將數(shù)據(jù)撤回恢復到更新之前的狀態(tài)
flashback table T_SALEBUDGET to timestamp to_timestamp('2024-12-02 07:53:00','yyyy-mm-dd hh24:mi:ss')
--開啟行遷移,如果該數(shù)據(jù)表禁止行遷移則開啟
alter table T_SALEBUDGET enable row movement
--關閉行遷移滑臊,更新完數(shù)據(jù)后重新關閉
alter table T_SALEBUDGET disable row movement
在Oracle數(shù)據(jù)庫中,當數(shù)據(jù)被誤更新后堤尾,恢復數(shù)據(jù)之前開啟行遷移(Row Movement)的目的主要是為了支持后續(xù)的數(shù)據(jù)恢復操作啰劲,特別是當使用閃回表(Flashback Table)功能將數(shù)據(jù)恢復到某個特定時間點時。以下是對這一過程的詳細解釋:
行遷移的作用
行遷移是Oracle數(shù)據(jù)庫中的一種機制交播,它允許數(shù)據(jù)庫在必要時將數(shù)據(jù)行從一個數(shù)據(jù)塊移動到另一個數(shù)據(jù)塊重虑。這通常發(fā)生在數(shù)據(jù)行因為更新而變大,以至于無法再原地容納時秦士。然而缺厉,在數(shù)據(jù)恢復的場景中,行遷移的開啟主要是為了支持表結構的改變和數(shù)據(jù)位置的調整隧土。
為什么恢復數(shù)據(jù)前要開啟行遷移
支持閃回表操作:
閃回表是Oracle提供的一種數(shù)據(jù)恢復功能提针,它可以將表恢復到某個特定時間點之前的狀態(tài)。
在執(zhí)行閃回表操作時曹傀,Oracle可能需要移動表中的行以恢復其原始狀態(tài)辐脖。如果行遷移未開啟,Oracle可能無法執(zhí)行必要的行移動操作皆愉,從而導致恢復失敗嗜价。
保持數(shù)據(jù)一致性:
在數(shù)據(jù)恢復過程中艇抠,保持數(shù)據(jù)的一致性至關重要。開啟行遷移可以確保在恢復過程中行的移動不會破壞數(shù)據(jù)的一致性久锥。
避免恢復后的數(shù)據(jù)問題:
如果在恢復數(shù)據(jù)前未開啟行遷移家淤,恢復后的表可能會出現(xiàn)數(shù)據(jù)行位置不正確或索引碎片化的問題。這些問題可能會影響查詢性能和數(shù)據(jù)完整性奴拦。