본문 바로가기
Work/DataBase

[Oracle] 오라클 - 원하는 테이블만 휴지통에서 복구하기

 

1. 휴지통 조회

-- 테이블을 삭제했던, 해당계정으로 접속해서 Recycle Bin 조회

-- 휴지통에 오브젝트가 많은경우, 100~200 정도의 rownum을 주어 나눠서 복구진행을 합니다.

-- TYPE은 Table만 검색합니다 (index는 자동복구되며, 이름은 다르게 복구됩니다.)

SELECT * FROM RECYCLEBIN WHERE rownum <=200 AND TYPE ='TABLE';

 

 

2. 휴지통에서 불필요한 테이블 삭제

-- 만약 , 휴지통에 불필요한 과거 삭제한 테이블이 많다면, 복구하기위한 오브젝트를 제외하고 모두 비워주는것 좋습니다.


-- 복구하기를 원하는 시점 이외에 데이터를 지우기위해 아래와같이 조회합니다.


-- 복구를 원하는 오브젝트외에 휴지통을 지워주시는것이 다른 기점으로의 Rollback을 방지할수있습니다.

SELECT ORIGINAL_NAME FROM RECYCLEBIN WHERE DROPTIME NOT LIKE '2021-02-02%' AND TYPE ='TABLE';

 


-- 휴지통에서 특정 오브젝트 삭제문


-- 휴지통에서 원치않는 오브젝트를 조회하여, 영구삭제를 진행합니다. 

 
purge TABLE "OBJECT_NAME"

 

-- 복구할 데이터만 존재하는 경우 PASS

 

 

3. 스키마에서 복구전 해당 테이블 삭제 

-- 이 또한 해당되는 분들만 작업하시면 됩니다.

-- 저는 drop, create을 누군가 무수히 많이 진행하여 삭제된 테이블과 똑같은 이름의 깡통 Table이 존재했기에,

삭제된 테이블들의 이름을 조회하여, 복구대상의 테이블중 존재하는경우 모두 제거하되,

반드시 휴지통으로 가지 않고 지워지도록 제거했습니다.  (주의가 필요합니다. 잘못된 Drop은 영구복원이 안됩니다.)


-- 스키마에서 테이블 복구를 위해 기존 테이블을 영구 삭제합니다. (매우 주의!)
DROP TABLE 테이블명 purge;

 

4. 휴지통에서 모두 복구

-- 휴지통에 있는 가장 최신의 해당 테이블을 복구합니다.
-- 계속적으로 조회하여 Drop table purge문과 병행수행하다보면, RecycleBin 비워질겁니다. 
FLASHBACK TABLE  테이블명 TO BEFORE DROP;

복구할 오브젝트가 1000개정도 있었기 때문에,

Rownum을 걸어 Select 한 대상 오브젝트들을

엑셀로 가져와

복구 쿼리를 만들어 수행시켰습니다.

단계별로 수행시켰습니다.

 

이후 복구된 인덱스이름에 대해서,

재설정 작업을 까지 진행하여, 완전 복구를 완료했습니다.

 

누군가의 응가를 치우는일... 오라클이니깐 가능했습니다. 오라클 만세!