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
'⚙️Backend > DB' 카테고리의 다른 글
[DB] 로킹(Locking) 단위 , 로킹과 병행성, DB 로킹 기법 (0) | 2025.02.26 |
---|---|
[DB] MyBatis vs. JPA (2) | 2024.10.16 |
[DB/OracleDB] SQL문 조회, 함수 정리 (2) | 2024.09.09 |
[DB/OracleDB] Oracle Cloud , DBeaver 개발 환경 설정하기 (2) | 2024.09.08 |