본문 바로가기
DB/오라클

오라클 데이터, 테이블 복구하는 방법

by 무지성개발자 2024. 4. 4.

🤔 문제발생

DELETE를 잘못사용하여 삭제하지 말아야 할 데이터를 삭제했을 때,
데이터를 복구하기 위해 사용하는 방법이다.
참고 사이트 : https://loklee9.tistory.com/73

🎉 TIP 실행했던 쿼리 시간대 조회 방법

  • 실행했던 쿼리의 시간대를 알기 위해서는 쿼리를 실행한 시간이 30분 이내여야 한다.
SELECT 컬럼1
    , 컬럼2
    , 컬럼3
    , VERSIONS_STARTTIME
    , VERSIONS_ENDTIME
    , VERSIONS_OPERATION
FROM TB_MH_WORK_RSLT
VERSIONS BETWEEN TIMESTAMP TO_TIMESTAMP('년년/월월/일일 시시:분분:초초', 'RR/MM/DD HH24/MI/SS') AND MAXVALUE 
WHERE 절
ORDER BY VERSIONS_ENDTIME

🎉 해결방법 1 

  • DELETE 했던 WHERE 절을 참고하여 아래처럼 조회하면 실수로 삭제했던 데이터가 나온다.
  • 다만, 몇 시간이 흐른 뒤에는 해당 방법으로 복구가 불가능하다.
SELECT * 
FROM 원복하고 싶은 테이블명 AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '전으로 돌리고 싶은 시간' MINUTE)
WHERE 절

🎉 해결방법 2 

  • 첫 번째, 테이블이 FLASHBACK 할 수 있는 상태로 설정한다.
  • 두 번째,  테이블을 FLASHBACK 한다.
  • 다만, 15분 이상 흐른 뒤에는 해당 방법으로 복구가 불가능하다.
ALTER TABLE 테이블명 ENABLE ROW MOVEMENT

FLASHBACK TABLE 테이블명 TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '전으로 돌리고 싶은 시간' MINUTE)

🎉 해결방법 3

  • 첫 번째, 오라클 휴지통에 삭제한 테이블을 조회한다.
  • 두 번째, DROP 된 테이블을 FALSHBACK 한다.
SELECT * FROM RECYCLEBIN 

FLASHBACK TABLE 테이블명 TO BEFORE DROP

👏 결과

시간적 제약이 가장 널널한 것은 해결방법1이 였으며,
근본적인 사고를 막기 위해서는 DELETE, DROP 전 미리 SELECT 로 조회하고 데이터를 확인한 뒤 처리하는 것이 올바르다.

'DB > 오라클' 카테고리의 다른 글

오라클 테이블 생성 방법  (0) 2024.04.03