데이터 복구
- FLASHBACK QUERY
- FLASHBACK TABLE
- FLASHBACK DROP
- FLASHBACK VERSION QUERY
- FLASHBACK TRANSACTION QUERY
FLASHBACK QUERY
: 복구 없이 과거 시점 데이터 조회
- 골든 타임 : 15분
기본
--사용법1
SELECT *
FROM tablename1
AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '10' MINUTE)
WHERE column1='KOREA';
--사용법2
SELECT *
FROM tablename1
AS OF TIMESTAMP '20/09/24 08:00:00'
WHERE column1='KOREA';
: 10분 전 기준으로 데이터 조회
- AS OF TIMESTAMP (과거 시점)
- SYSTIMESTAMP : 현재 시간
시간 조회
--현재 시간
SELECT SYSTEMIESTAMP
FROM DUAL;
--과거 시간
SELECT SYSTIMESTAMP - INTERVAL '10' MINUTE
FROM DUAL;
골든타임 확인
- 데이터베이스 파라미터 UNDO_RETENTION으로 확인
SELECT column1, column2
FROM V$PARAMETER
WHERE column1='UNDO_RETENTION';
FLASHBACK TABLE
: DELETE 후 COMMIT 했을 경우 복구
--tablename 테이블이 플래쉬백 가능한 상태로 변경
ALTER TABLE tablename1 ENABLE ROW MOVEMENT;
--플래쉬백 가능 여부 확인
SELECT row_movement
FROM user_tables
WHERE table_name='tablename1';
기본
FLASHBACK TABLE tablename TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '10' MINUTE);
: 현재 시점에서 10분 전으로 FLASHBACK.
- 백업을 가지고 복구하는 것이 아님
- 10분 전부터 현재까지 수행한 DML 작업을 반대로 수행하며 복구시킴
EX) INSERT -> DELETE, DELETE -> INSERT
- COMMIT 을 반드시 진행 해야 영구반영됨
특정 테이블만 특정 시점으로 되돌리기
FLASHBACK TABLE tablename TO TIMESTAMP
TO_TIMESTAMP ('20/09/24 09:00:00', 'RR/MM/DD HH24:MI:SS';
: 20/09/24 09:00:00 부터 현 시점까지 모든 DML을 반대로 수행하며 tablename 테이블을 되돌림
- DDL, DCL문이 있었다면 에러가 발생함
FLASHBACK DROP
: DROP한 테이블 복구
기본
FLASHBACK TABLE tablename TO BEFORE DROP;
: 휴지통에서 복구
휴지통에 DROP한 테이블 존재 확인
SELECT ORIGINAL_NAME, DROPTIME
FROM USER_RECYCLEBIN;
복구 시 테이블명 변경
FLASHBACK TABLE tablename1 TO BEFORE DROP RENAME TO tablename2;
FLASHBACK VERSION QUERY
: 테이블 데이터 변경 이력 확인
SELECT column1, column2, versions_starttime, versions_endtime, versions_operation
FROM tablename
VERSIONS BETWEEN TIMESTAMP
TO_TIMESTAMP('2020/09/24 09:00:00', 'RRRR/MM/DD HH24:MI:SS')
AND MAXVALUE
WHERE column1='KOREA'
ORDER BY versions_starttime;
: tablename 테이블이 2020/09/24 09:00:00 부터 현재까지 어떻게 변경되었는지 이력을 출력
FLASHBACK TRANSACTION QUERY
: 특정 테이블을 과거시점으로 되돌리기 위한 DML 추출
SELECT undo_sql
FROM flashback_transaction_query
WHERE table_owner='id' AND table_name='tablename1'
AND commit_scn BETWEEN 9123450 AND 9123455
ORDER BY start_timestamp DESC;
: 취소할 수 있는 SQL을 조회
- commit_scn : system change numer, commit 할 때 생성되는 번호. 특정 시간대의 scn번호를 범위로 지정
'CS > 데이터베이스' 카테고리의 다른 글
[Oracle] WITH절 (WITH ~ AS) (0) | 2020.09.25 |
---|---|
[Oracle] 데이터 품질 향상 (0) | 2020.09.25 |
[Oracle] 중복되지 않는 번호 (SEQUENCE) (0) | 2020.09.23 |
[Oracle] 검색 속도 향상 (INDEX) (0) | 2020.09.23 |
[Oracle] 쿼리를 단순하게 (VIEW) (0) | 2020.09.23 |