
특정 테이블에 대해서 그동안 변경해왔던 이력정보를 가지고
다시 과거로 되돌리기 위한 DML 문장을 보여주는 쿼리문
아주 상세하게 데이터를 복구할 수 있게 됨
예: 과거에 delete 를 했다면 ------> insert 문장을 보여줌
sqlplus sys/oracle_4U as sysdba

sql developer 를 종료합니다
그리고 db를 정상 종료 합니다
show user
shutdown immediate

db 를 mount 로 올립니다
startup mount

나중에 복구가 가능하도록 로그를 자동으로 기록하게 설정하기
alter database archivelog;

DML 문이 기록될 수 있도록 설정합니다
alter database add supplemental log data;

db 를 open 시킵니다
alter database open;

잘 설정되었는지 확인합니다
archive log list

sqldeveloper 를 다시 켜고 c##scott 으로 접속합니다
update emp
set deptno = 20
where ename = 'KING';
commit;
update emp
set sal = 8000
where ename = 'KING';
commit;
select versions_startscn, versions_endscn, versions_operation, sal, deptno
from emp
versions between scn minvalue and maxvalue
where ename='KING'
order by versions_starttime asc nulls first;
select undo_sql
from flashback_transaction_query
where table_owner='C##SCOTT' and table_name='EMP';
update "C##SCOTT"."EMP" set "SAL" = '0' where ROWID = 'AAATPSAAHAAAAHHAAA';
update "C##SCOTT"."EMP" set "DEPTNO" = '10' where ROWID = 'AAATPSAAHAAAAHHAAA';
💡 과거로 되돌리기 위해서 시간으로 모두 되돌리는게 아니라
특정 DML 문장만 추출해서 그것만 수행해서 되돌림
update emp
set comm = 7000, job = 'PRESIDENT'
where ename = 'ALLEN';
commit;
-- ALLEN의 rowid 조회
select rowid, ename -- AAATOuAAHAAAAInAAF
from emp
where ename='ALLEN';
select undo_sql
from flashback_transaction_query
where table_owner='C##SCOTT' and table_name='EMP';