오라클 drop 된 테이블 복원 ( Flashback ) Recycle Bin 에서 테이블 복원
실수로 삭제하지 않아야 할 테이블을 삭제했을 경우 당혹스러울 때가 있는데 오라클에서는 drop 된 테이블도 복원할 수 있는 기능이 있습니다.
바로 Flashback 이라는 기능인데 테이블을 drop 할 때 데이터베이스는 테이블과 연관된 공간을 바로 제거하지는 않습니다.
데이터베이스는 테이블의 이름을 변경하여 관련 오브젝트를 Recycle Bin에 넣습니다.
위에서 말한대로 사용자가 실수로 테이블을 drop 했을 때 복구할 수 있습니다.
이 기능을 Flashback Drop 이라고하며 FLASHBACK TABLE 문을 사용하여 테이블을 복원 가능합니다.
FLASHBACK TABLE 문을 사용하기 전에 Recycle Bin의 작동 방식과 관리방법을 이해하도록 하겠습니다.
FlashBack 에 대한 내용은 4가지 주제로 구성됩니다.
2. Recycle Bin 에 있는 객체 조회 및 쿼리방법
4. Recycle Bin 에서 테이블 복원
4. Recycle Bin 에서 테이블 복원
FLASHBACK TABLE ~ TO BEFORE DROP
위의 문법을 사용하여 Recycle Bin 에서 객체를 복구할 수 있습니다.
Recycle Bin에 있는 테이블이 이름이나 원래 테이블 이름을 지정할 수 있습니다.
선택적으로 RENAME TO 절을 사용하면 복구할 때 테이블의 이름을 변경하여 복구할 수 있습니다.
Recycle Bin 의 이름은 Recycle Bin 에 있는 View 및 Query 에 표시된대로 DBA_RECYCLEBIN 또는 USER_RECYCLEBIN View 에서 가져올 수 있습니다.
FLASHBACK TABLE ... TO BEFORE DROP 문을 사용하려면 테이블을 삭제하는것과 동일한 권한이 필요합니다.
아래의 예제는 TB_USER_INFO 테이블을 지우고 새로운 이름으로 복원하는 방법에 대한 예시입니다.
FLASHBACK TABLE TB_USER_INFO TO BEFORE DROP RENAME TO TB_USER_INFO2 ;
시스템에서 생성한 Recycle Bin 의 이름은 테이블을 여러번 삭제한 경우 매우 유용합니다.
예를 들어 Recycle Bin 에 TB_USER_INFO 테이블의 버전이 5가지가 있으며 4번째 버전을 복구하려고 한다고 가정합니다.
두개의 FLASHBACK TABLE 문을 실행하여 이 작업을 수행하거나 아래의 예제와 같이 휴지통을 Query 한 다음
시스템에서 만든 이름으로 FLASHBACK 할 수 있습니다.
쿼리에 테이블 생성시간을 포함시키면 OBJECT NAME 을 확인 후 정확한 테이블을 복원할 수 있습니다.
SELECT OBJECT_NAME, ORIGINAL_NAME, CREATETIME FROM RECYCLEBIN ; BIN$UofUBMjLnkDgUOABLqNFXg==$0 TB_USER_INFO 2017-06-22:15:44:26 BIN$UofUBMjMnkDgUOABLqNFXg==$0 TB_USER_INFO 2017-06-22:15:45:26 BIN$UofUBMjNnkDgUOABLqNFXg==$0 TB_USER_INFO 2017-06-22:15:45:52 BIN$UofUBMjOnkDgUOABLqNFXg==$0 TB_USER_INFO 2017-06-22:15:46:08 BIN$UofUBMjPnkDgUOABLqNFXg==$0 TB_USER_INFO 2017-06-22:15:46:17 FLASHBACK TABLE "BIN$UofUBMjOnkDgUOABLqNFXg==$0" TO BEFORE DROP;
Recycle Bin 에서 테이블을 복원할 때 인덱스와 같은 종속된 객체는 원래 이름으로 다시 가져오지 않습니다.
종속된 객체는 시스템에서 생성한 Recycle Bin 의 OBJECT_NAME 을 그대로 유지합니다.
원본 이름으로 복원하려면 종속된 객체의 이름을 수동으로 변경해야 합니다.
종속 객체의 원래 이름을 수동으로 복원하려면 테이블을 복원하기전에 각 종속 객체의 시스템에서 생성한 Recycle Bin 에서 ORIGINAL_NAME을 기록해두어야 합니다.
아래 예시는 TB_USER_INFO 에서 생성한 일부 인덱스의 이름을 원래 이름으로 복원하는 예입니다.
이 예에서는 SCOTT 사용자로 로그인 했다고 가정합니다.
1. 테이블 생성 후 테이블 삭제
CREATE TABLE TB_USER_INFO ( USER_NO VARCHAR2(10 BYTE) , USER_NM VARCHAR2(50 BYTE) , AGE NUMBER , CONSTRAINT "PK_TB_USER_INFO" PRIMARY KEY ( USER_NO ) ) ; DROP TABLE TB_USER_INFO ;
2. Recycle Bin 에서 복원하기 전에 아래의 쿼리를 실행합니다.
SELECT OBJECT_NAME, ORIGINAL_NAME, TYPE, CREATETIME FROM RECYCLEBIN ORDER BY CREATETIME; BIN$UofUBMjZnkDgUOABLqNFXg==$0 TB_USER_INFO TABLE 2017-06-22:16:04:19 BIN$UofUBMjYnkDgUOABLqNFXg==$0 PK_TB_USER_INFO INDEX 2017-06-22:16:04:19
3. 테이블을 복원합니다.
FLASHBACK TABLE TB_USER_INFO TO BEFORE DROP ;
4. 아래의 쿼리를 실행하여 TB_USER_INFO 의 인덱스가 시스템에서 생성한 Recycle Bin 에 이름이 있는지 확인합니다.
SELECT INDEX_NAME FROM USER_INDEXES WHERE TABLE_NAME = 'TB_USER_INFO';BIN$UofUBMjYnkDgUOABLqNFXg==$0
5. 아래와 같이 인덱스의 원래 이름을 복원합니다.
ALTER INDEX "BIN$UofUBMjYnkDgUOABLqNFXg==$0" RENAME TO PK_TB_USER_INFO;
시스템에서 생성된 이름은 큰따옴표로 감싸줍니다.
'IT > Oracle' 카테고리의 다른 글
오라클 다양한 INSERT INTO 방법 (0) | 2017.07.03 |
---|---|
오라클 LOCK 걸린 개체 확인 및 LOCK 해제 (10) | 2017.06.25 |
오라클 drop 된 테이블 복원 ( Flashback ) Recycle Bin 에서 객체제거 (0) | 2017.06.23 |
오라클 drop 된 테이블 복원 ( Flashback ) Recycle Bin 에 있는 객체 조회 및 쿼리방법 (2) | 2017.06.22 |
오라클 drop 된 테이블 복원 ( Flashback ) Recycle Bin 이란 무엇인가 (0) | 2017.06.21 |