Tiny Bunny
본문 바로가기
⚙️Backend/DB

[DB/OracleDB] Oracle DB 삭제한 데이터 복구하기 (TIMESTAMP)

by soonybutter 2025. 1. 23.
728x90

 

Oracle DB 삭제한 데이터 복구하기 (TIMESTAMP)

 

 


 

 

 

문제상황

 

1. 프로젝트를 진행하며 중복된 상품이 메인화면에 뜨는 오류가 발생해서 DB 정리를 맡게되었고, 쿼리문으로 테이블에 있는 데이터들을 정리시작.
2. 'ORA-02292: 무결성 제약조건이 위배되었습니다- 자식 레코드가 발견되었습니다.' 라는 오류가 뜨며 해당 데이터가 삭제되지 않음.

(해당테이블은 여러 자식테이블이 참조하고 있었기 때문이다..)
3. 그래서 쿼리문을 통해 여러 테이블을 이것저것 삭제를 하다가 , 전혀 상관없는 상위의 쌩(?)데이터를 삭제하는 대실수를 저지름... 

(이제 해당 테이블로부터 작동하던 모든 동작에 오류발생... ㅎ)
 
 
 



 
찾아보니 삭제한 데이터를 시간을 기준으로해서 해당 테이블을 복구하는 방식이 있었다! 
 
 
 
 
💡데이터를 실수로 삭제(DELETE) 했다면, TIMESTAMP를 사용하여 이전의 데이터를 조회하여 복구할 수 있다.

오라클 9i Release 2부터 Flashback이라는 기능이 생겼는데, 일종의 휴지통이라고 생각하면 된다고 한다.


Flashback의 사이즈만큼만 과거 데이터를 보관하고 있으니,
변경이 자주 발생하는 테이블은 복구 가능한 시점이 짧을 수 있다.

 SELECT * 
   FROM test_table AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '10' MINUTE)    
  WHERE id = '1234'

 

위의 쿼리를 조회하면 10분 이전의 데이터가 조회된다. 

단위는 SECOND, MINUTE, HOUR, DAY로 바꿔 쓸 수 있다.
 
 
원하는 시점의 시간을 직접 입력하여 변경 전 데이터를 조회할 수도 있다.

SELECT * 
FROM test_table AS OF TIMESTAMP(TO_DATE('2021-08-27 13:10:00', 'YYYY-MM-DD HH24:MI:SS'))
WHERE id = '1234'

 
 
 
 
 
 
 
아무 문제 없이 복구하여 다시 테이블 수정을 진행할 수 있었다. 🥳🥲
 
 
 
 

728x90

TOP

Designed by 티스토리