오라클 Oracle Table 잘못 삭제된 데이터를 복구하는 방법(삭제된 Table rows 조회)

Oracle DB 작업을 하는 과정에 DELETE 구문을 잘못 사용하여 Table의 데이터를 잘못 삭제한 아찔한 경험을 가지고 있지는 않나요?

흔히 범하는 실수로 DELETE 쿼리 문에서 WHERE절의 조건을 잘못 선언해서 의도치 않은 Table의 데이터를 삭제하는 경우가 생길 때가 있습니다.
UPDATE 구문을 잘못 사용하여 예기치 않은 데이터를 수정하는 경우도 생길 때가 있습니다.

이렇게 잘못 수정하거나 삭제한 Table rows를 바로 조회해 볼 수 있다면 복구하는데 큰 도움이 될 수 있습니다.

이번 글에서는 오라클 Oracle Table 잘못 삭제된 데이터를 복구하는 방법(삭제된 Table rows 조회)에 대해 알아보겠습니다.

Oracle DB 삭제된 테이블 데이터 조회(DELETE TABLE rows 조회)

1. 아래 화면은 DELETE 구문으로 데이터를 삭제하기 전의 Table Rows 입니다.

  • SELECT * FROM TAB
오라클 Oracle Table 잘못 삭제된 데이터를 복구하는 방법(삭제된 Table rows 조회) 1

2. 아래 화면은 DELETE 구문을 실행 한 이후의 테이블 SELECT 결과입니다.

  • DELETE FROM TAB WHERE ACSACANNERID=’11’;
    COMMIT;
    SELECT * FROM TAB;
오라클 Oracle Table 잘못 삭제된 데이터를 복구하는 방법(삭제된 Table rows 조회) 2

3. 아래 화면은 방금 DELETE 구문으로 삭제하기 전의 데이터를 조회하기 위해 TIMESTAMP를 사용하는 SELECT 결과 입니다.

  • SELECT * FROM TAB AS OF TIMESTAMP(SYSTIMESTAMP – INTERVAL ’60’ MINUTE) WHERE 1=1;
오라클 Oracle Table 잘못 삭제된 데이터를 복구하는 방법(삭제된 Table rows 조회) 3

4. 앞에서 설명한 과정을 실제 실행한 전체 쿼리 문입니다.

  • TINTDAL’이라는 테이블에서 ACSCANNERID’11’인 데이터를 모두 삭제하는 쿼리 문이 실행되고 있습니다.
오라클 Oracle Table 잘못 삭제된 데이터를 복구하는 방법(삭제된 Table rows 조회) 4

오라클 DB에서 잘못 삭제된 테이블의 데이터를 복구할 때 활용 방법

오라클 TIMESTAMP 기능을 이용하면 삭제되기 전의 테이블 데이터를 조회해 볼 수 있습니다.

SELECT * FROM 테이블명 AS OF TIMESTAMP(SYSTIMESTAMP – INTERVAL ‘30‘ MINUTE) WHERE 1=1;

  • 30분 전의 테이블 Rows가 조회 됩니다.
  • 30분 이내에 처리된 삭제(DELETE) 또는 추가(INSERT)는 조회 되지 않습니다.
  • 시간 값을 무한정으로 지정할 수는 없습니다.
    시간 값이 클 경우 ORA-01555: snapshot too old:rollback segment number %s with name “%s” too small 에러가 발생할 수 있습니다.
  • WHERE 조건 절에 필요한 데이터만 가져오도록 지정해서 사용할 수 있습니다.
    • WHERE 1=1; – 모든 대상(WHERE 절을 생략한 것과 동일).
    • WHERE ACSCANNERID=’11’; – ACSCANNERID가 ’11’인 것만.

1. 시간 단위는 SECOND, MINUTE, HOUR, DAY로 바꾸어 사용할 수 있습니다.

2. 원하는 조회 시점을 직접 입력해서 변경 전 데이터를 조회할 수도 있습니다.

  • SELECT * FROM 테이블명 AS OF TIMESTAMP(TO_DATE(‘2025-04-01 15:30:00’, ‘YYYY-MM-DD HH24:MI:SS’)) WHERE 1=1;

마무리

DELETE 구문을 잘못 사용하여 중요한 테이블의 데이터가 삭제된 경우 식은땀이 날만큼 당황하게 됩니다.
또는 UPDATE 구문을 잘못 사용하여 중요한 데이터를 엉뚱한 내용으로 덮어쓰기 한 경우에도 당황하기는 마찬가지 입니다.
경험을 해 본 사람은 많이 공감하시겠죠.

테이블의 데이터를 잘못 삭제했다는 것을 인식했다면 곧바로 Oracle DB의 TIMESTAMP 기능을 사용해서 원하는 시점의 테이블 데이터를 조회해서 다시 복구 작업을 진행하면 됩니다.

거의 사용할 일은 없지만(사용할 일이 없는 것이 당연한 것이죠) 결정적인 순간에 꼭 필요한 내용이니 꼭 기억하고 계시길 바랍니다.





이 글이 도움이 되었기를 바랍니다. ^-^
댓글로 흔적을 남겨 주세요.

답글 남기기