티스토리 뷰

DB

[Oracle]삭제 데이터 복구하기

까오기 2020. 4. 2. 14:29

"혹시 삭제한 데이터 다시 살릴 수 있나요?"

이런 연락을 가끔 받습니다. 

오라클을 사용하고 삭제된지 얼마 안된 경우 간단하게 복구를 할 수 있습니다. 

 

먼저 어느 정도 시간 까지 복구 가능한지 확인을 해야 합니다.  

sql> show parameter undo; 

NAME            TYPE    VALUE    
--------------- ------- -------- 
undo_management string  AUTO     
undo_retention  integer 1800     
undo_tablespace string  UNDOTBS1 

위의 경우 undo_retention 값이 1800으로 되어 있는 것을 확인할 수 있습니다. 

1800/60초 = 30분 

commit된지 30분 이내 실행 된 것이라면 아직 오라클에 남아 있어 복구가 가능하다는 것입니다. 

 

해당 시간을 조정할려면 아래 처럼 하면됩니다. 

alter system set undo_retention = [원하는시간(초)] ;

삭제된 데이터 조회 

SELECT * FROM [테이블명] AS TIMESTAMP(SYSTIMESTAMP-INTERVAL '[시간]' [단위, SECOND/MINUTE/HOUR/DAY]) WHERE 조건

-- 예제
SELECT * FROM USER AS TIMESTAMP(SYSTIMESTAMP-INTERVAL '25' MINUTE) WHERE STAT='Y'
-- 25분전 USER테이블 데이터 조회

복구 예제

INSERT INTO USER
SELECT * FROM USER OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '25' MINUTE) WHERE STAT = 'Y'

 

만약 삭제 후 새로운 데이터가 삽입 된 경우 충돌이 날 수 있습니다. 

필요시 조건을 추가 하거나 새로운 데이터를 삭제해야 할 수 있습니다. 

 

여러가지 문제로 완벽하게 복구할 수 없을 지 모르지만 그래도 급할 때는 유용합니다. 

'DB' 카테고리의 다른 글

MYSQL - WITH 구문  (0) 2023.07.19
[ORACLE]LISTAGG 함수, ONE TO MANY, SINGLE ROW로 보여주기  (0) 2020.04.03
[mysql]암복화 예제  (0) 2020.04.02
[MyBatis]mapper에서 공통 property 사용  (0) 2020.04.02
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함