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;
문제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
반응형
'Study > class note' 카테고리의 다른 글
sql중급 / 데이터분석 복습 (0) | 2021.11.30 |
---|---|
sql중급 / primary key, unique, not null, check, foreign key (0) | 2021.11.29 |
sql 중급 / flashback query,table, drop (0) | 2021.11.26 |
sql중급 / sequene (0) | 2021.11.26 |
sql중급 / DDL문 (index) (0) | 2021.11.26 |