특정과거시점의 데이터로 테이블을 되돌려 놓는것
앞서 배웠던 query 복구는 플래시백 하여서 그 결과값을 새로 백업 파일로 만들어
만든 backup table 을 다시 원래 테이블로 데이터 insert 하는 과정을 거쳤다면
지금하는 Table 복구는 복구 할 시점부터 현재까지 수행했던 DML 작업 ( insert,update,delete, merge ) 을
반대로 수행하며 과거로 돌리는 것이다.
그런데 만약 복구할 시점부터 현재시점 사이에 DDL(create, alter, drop, truncate, rename)과 , DCL (grant, revoke ) 문이 수행되었다면, 해당 flashback table 명령어가 수행되지 않고 에러가 발생합니다.
delete 후 commit 된 테이블
delete from emp14;
commit;
복구시작
1. 현재시간확인
select systimestamp from dual;
2. 테이블이 FLASHBACK 이 가능한상태인지 확인
select table_name, row_movement
from user_tables
where table_name='테이블명';
→ 테이블명 (대문자로적을것)
→ 확인해보면 ROW_MOVEMENT 가 disable 로 되어있다.
이것을 enable 형태로 바꾸어야한다.
3. enable 하는방법 (*************)
alter table 테이블명 enable row movement;
후에 다시 2번의 식을 쿼리해보면
→ row_movement 가 enable 형태로 변경 되었다.
21/11/26 15:24:29 시간(1분전)으로 테이블을 되돌린다.
flashback table 테이블명 to timestamp
to_timestamp('21/11/26 15:25:29','RR/MM/DD HH24:MI/SS');
15분이 지나도 복구가 가능한 이유는 db 에 별 작업 (ddl, dcl ) 이 없었기때문!!
SELECT 해보면 복구된거 확인 가능하다
'Oracle > SQL' 카테고리의 다른 글
SQL - Flashback Version Query (데이터 변경내역 이력 확인) (0) | 2021.12.05 |
---|---|
SQL - Flashback DROP 된 데이터 복구 (인덱스도 함께 복구) (0) | 2021.12.03 |
SQL - Flashback 데이터 복구 query 복구 (0) | 2021.12.03 |
SQL - SEQUENCE 절대 중복되지않는 번호 (0) | 2021.12.03 |
SQL - INDEX 데이터검색속도 높이기(2) order by 없이 index 정렬 (desc 도 가능!) (0) | 2021.12.03 |