测试时误删数据,或是需要还原数据反复测试sql,可以用Oracle的闪回功能使数据库恢复到某一时刻。
恢复数据到某一时刻
-- 假设表名为 HOLIDAY-- 开启行移动
ALTER TABLE HOLIDAY ENABLE ROW MOVEMENT;
-- 恢复数据到某一时刻
FLASHBACK TABLE HOLIDAY TO TIMESTAMP TO_TIMESTAMP('2024-01-15 08:00:00', 'yyyy-mm-dd hh24:mi:ss');
-- 关闭行移动
ALTER TABLE HOLIDAY DISABLE ROW MOVEMENT;
ROW MOVEMENT
不开启行移动会报错 ORA-08189: cannot flashback the table because row movement is not enabled
。
关于行移动,ChatGPT的回答如下:
在Oracle数据库中,启用行移动(ROW MOVEMENT)是一个用于修改表定义的选项,它允许在表上执行一些特定的操作,如更新、删除和插入行,同时保持表的高度可用性。当你启用行移动时,可以更灵活地修改表结构,包括修改表的行的物理存储位置。
查询某一时刻的数据
-- 查询某一时刻的数据
SELECT * FROM HOLIDAY AS OF TIMESTAMP TO_TIMESTAMP('2024-01-15 08:00:00', 'yyyy-mm-dd hh24:mi:ss');