Oracle Flashback
DB data 관리 중 데이터를 삭제(delete)하거나 데이터값을 잘못 변경(update)하는 경우
commit 이전이라면 rollback 명령어로 변경내용을 원복 할 수 있다.
하지만 commit 까지 수행한 경우 특정한 시간 또는 특정 시점으로 되돌릴수 있는 기능이 Oracle FlashBack 이다.
● dump파일 없이 논리적 장애를 (DML, DDL)을 빠르게 복구
● Oracle Enterprise 버전만 가능
● row level, table level, database level 3개로 분류
● row level, table level : oracle 에서 기본 권한 사용 가능
● database level : system 권한 필요, system down 후 진행
● undo_retention 파라미터에 설정된 시간 만큼 undo data를 유지 하겠다는 뜻이며, 결국 flash back query는 undo_retention 범위 안에서 유효
Oracle Flashback 사용벙법
1. row level
SQL> SELECT * FROM SCOTT.EMP AS OF TIMESTAMP ( SYSTIMESTAMP - INTERVAL '10' MINUTE); -- 10분전 EMP 테이블 데이터 조회
SQL> SELECT * FROM SCOTT.EMP AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' DAY); -- 하루 전 EMP 테이블 데이터 조회(undo_retention 시간이 86400(하루 이상 필요))
SQL> SELECT * FROM SCOTT.EMP AS OF TIMESTAMP TO_TIMESTAMP ('20230117133000','yyyyMMdd hh24:mi:ss'); -- 2023년 1월 17일 13:30 시점 데이터 조회
SQL> INSERT INTO SCOTT.EMP (SELECT * FROM SCOTT.EMP AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10' MINUTE) -- 10분전 EMP 테이블 데이터를 EMP 테이블로 INSERT
);
SQL> select versions_startscn start_scn, versions_endscn end_scn, versions_xid vxid, versions_operation vopt
, scott.emp.*
from scott.emp
versions between scn minvalue and maxvalue; -- opt 에서 D면 delete, I면 insert
2. table level
commit 이 발생하게 되면 LGWR에 해당 트랜잭션에 고유 scn(system commit number) 번호를 남기게 됩니다.
이 번호를 이용하여 복구 진행
scn 이용하여 복구
SQL> select versions_startscn start_scn, versions_endscn end_scn, versions_xid vxid, versions_operation vopt
, scott.emp.*
from scott.emp
versions between scn minvalue and maxvalue; -- 조회한 start_scn 기준으로 롤백진행 준비
SQL> flashback table scott.emp to scn 'start_scn 번호 기입'; -- 변경 이전의 scn 넘버 입력
시점으로 테이블 복구
SQL> FLASHBACK TABLE SCOTT.EMP TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '10' MINUTE);
-- 10분전으로 되돌리기
SQL> FLASHBACK TABLE SCOTT.EMP TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' DAY);
-- 1일전 테이블 데이터 복원
SQL> FLASHBACK TABLE SCOTT.EMP TO timestamp to_timestamp('20230117133000','yyyyMMdd hh24:mi:ss');
※ ORA-01466: unable to read data - table definition has changed 에러 시 undo 에 원복 시킬 데이터 없을 때 발생
3. database 복구
sys 계정으로 수행
SQL> shutdown immediate;
SQL> startup mount; -- 마운트 상태에서 실행
SQL> flashback database to timestamp (systeimstamp - interval '10' minute);
SQL> alter database open resetlogs;
SQL> select * from scott.emp;
'oracle' 카테고리의 다른 글
[ORACLE] SNAP_ID 찾는 스크립트 (0) | 2023.02.03 |
---|---|
[ORACLE] TABLE, INDEX TABLESPACE MOVE (1) | 2023.02.01 |
[ORACLE] ORA-00245: control file backup failed; in Oracle RAC, target might not be on shared storage (0) | 2023.01.26 |
[ORACLE] TTS (TRANSPORTABLE TABLESPACE) (0) | 2023.01.20 |
[ORACLE] IMPDP 명령어 모음 (0) | 2023.01.19 |