delete from emp
where ename='SCOTT';
delete from emp;
commit;
alter table emp enable row movement;
-- 현재 시간 확인
-- 25/07/09 14:26:41
select systimestamp from dual;
-- emp 테이블을 10분 전으로 되돌림
flashback table emp to timestamp
to_timestamp('2025/07/09 14:16:41', 'RRRR/MM/DD HH24:MI:SS');
-- 복구됨
select * from emp;
delete from dept;
commit;
alter table dept enable row movement;
-- 25/07/09 14:44:21
select systimestamp from dual;
flashback table dept to timestamp
to_timestamp('2025/07/09 14:39:21', 'RRRR/MM/DD HH24:MI:SS');
-- 복구됨
select * from dept;
-- 900(900초 = 15분)
select name, value
from v$parameter
where name ='undo_retention';
💡 15분이 기본값
alter system set undo_retention=3600;
select name, value
from v$parameter
where name='undo_retention';
-- 3600(3600초 = 1시간)
💡 대용량 테이블을 delete로 지우면 db 성능이 느려짐
truncate table emp;
select * from emp;
rollback;
select * from emp;
alter table emp enable row movement;
select systimestamp from dual; -- 25/07/09 15:11:19
flashback table emp to timestamp
to_timestamp('2025/07/09 15:01:19', 'RRRR/MM/DD HH24:MI:SS');
ㄴ @demo 돌려서 복구하기
💡
truncate
는 rollback도 안되고 flashback도 안되기 때문에 조심히 수행해야함
drop table emp;
show recyclebin;
flashback table emp to before drop;
select * from emp;
drop table market_2017;
-- 휴지통에 있는 market_2017 테이블 확인
show recyclebin;
-- market_2017 테이블 복구
flashback table market_2017 to before drop;
-- 복구됨
select * from market_2017;