본문 바로가기

Study/class note

sql중급/ flachback version query, transaction query

102 실수로 지운 데이터 복구하기 4(FLASHBACK VERSION QUERY)

특정 테이블의 데이터가 그동안 어떻게 변해 왔는지 이력정보를 확인할 때 사용하는 기능(insert, update, delete, merge문에 대한 변경이력정보)

-- KING의 직업을 ANALYST로 변경하시오
update emp
 set job = 'ANALYST'
 where ename = 'KING';

commit;

-- KING의 월급을 0으로 변경하시오
update emp
 set sal = 0
 where ename = 'KING';
 
commit;
 
-- KING의 데이터를 지우시오
delete from emp
 where ename = 'KING';
 
commit;

-- 그동안 emp테이블의 데이터가 어떻게 변경이 되어왔는지 이력정보를 확인하시오
select systimestamp from dual;  --현재시간 확인 21/11/29 09:58:01.168000000 +09:00
                                --09:48 ~ 현재까지 emp테이블이 어떻게 변경되었는지 확인 
select ename, sal, job, versions_operation
 from emp
 versions between timestamp to_timestamp('21/11/29 09:48:01','RR/MM/DD HH24:MI:SS')
             and maxvalue
 where ename = 'KING'
 order by versions_starttime nulls first;

KING에 대한 데이터 변경이력

문제560. emp테이블을 21/11/29 09:48:13으로 되돌리시오

select table_name, row_movement
 from user_tables
 where table_name = 'EMP';
 
alter table emp enable row movement;

flashback table emp to timestamp to_timestamp('21/11/29 09:48:13','RR/MM/DD HH24:MI:SS');

 


103 실수로 지운 데이터 복구하기 5(FLASHBACK TRANSACTION QUERY)

그동안 특정 테이블에 어떠한 작업들이 일어났는지 그 DML문들을 다시 거꾸로 되돌리는 DML문장이 출력되는 쿼리문.

현재 XE에서는 제공되지 않는 기능 > enterprise edition버전에서만 사용 가능

-- 내가 사용하고 있는 오라클 버전 확인하기
select *
 from v$version;

예제. 만약 다음과 같은 insert작업을 수행했다면?

insert into emp(empno, ename, sal)

   values(1234, 'AAA', 3000);

그렇다면 transaction query사용 시 다음과 같은 문장이 결과로 나옴.

delecte from emp

 where empno = 1234; (정확하게는 rowid가 나옴)

(책 268페이지를 보면 flashback transaction query문 참고)

 

ㅁUNDO SQL = 취소하는 sql

 

반응형