행위

"오라클 데이터 복구"의 두 판 사이의 차이

DB CAFE

(오라클 데이터 복구 FlashBack TIMESTAMP 이용)
1번째 줄: 1번째 줄:
 
== 오라클 데이터 복구 FlashBack TIMESTAMP 이용 ==
 
== 오라클 데이터 복구 FlashBack TIMESTAMP 이용 ==
  
데이터를 실수로 삭제(delete, truncate는 불가) 하고 commit하였을때 실수로 지운다던지,
+
데이터를 실수로 삭제(truncate는 복구 불가) 할 경우
복원을 시켜야 한다던지 당황하고 멘붕이 왔던 경험이 많을 것이다.
+
특정시간 또는 시점으로 되돌릴 수 있는 기능이 Oracle Flashback 기능이다.  
  
이때 특정시간 또는 시점으로 되돌릴 수 있는 기능이 Oracle Flashback 기능이다.
 
 
이 플래시백 기능을 통해 as of timestamp 구문을 사용하여 삭제 전의 데이터를 조회하여 복구 할 수 있다.  
 
이 플래시백 기능을 통해 as of timestamp 구문을 사용하여 삭제 전의 데이터를 조회하여 복구 할 수 있다.  
  
 
+
=== FLASHBACK 설정 조건 ===
▶ Flashback을 사용할 수 있는 조건
+
1. 자동 언두 관리 시스템을 사용(UNDO_MANAGEMENT 파라미터를 AUTO로 설정)
※ 설정
 
1. 자동 언두 관리 시스템을 사용해야 합니다. (UNDO_MANAGEMENT 파라미터를 AUTO로 설정)
 
 
<source lang=sql>
 
<source lang=sql>
 
     UNDO_MANAGEMENT = AUTO
 
     UNDO_MANAGEMENT = AUTO
 
</source>
 
</source>
2. 이전의 어느 시점까지의 언두(UNDO)정보를 보유하여 Flashback Query를 수행할것인지 UNDO_RETENTION 파라미터를 설정해야 한다.
+
 
<source>
+
2. 이전의 어느 시점까지의 언두(UNDO)정보를 보유하여 Flashback Query를 수행할것인지 UNDO_RETENTION 파라미터를 설정.
 +
<source lang=sql>
 
   ALTER SYSTEM SET UNDO_RETENTION=1200
 
   ALTER SYSTEM SET UNDO_RETENTION=1200
 
</source>
 
</source>
  
설정 확인 =>
+
설정 확인 SQL
 
<source  lang=sql>
 
<source  lang=sql>
 
show paramter undo;
 
show paramter undo;
35번째 줄: 33번째 줄:
 
</source>
 
</source>
  
※ 사용자
+
※ 사용자 권한
Flashback 기능을 이용하기 위해서 DBMS_FLASHBACK 패키지에 대한 EXECUTE권한이 있어야 합니다.
+
Flashback 기능을 이용하기 위해서 DBMS_FLASHBACK 패키지에 대한 EXECUTE권한 필요.
  
 
▶ Flashback을 사용할 수 있는 조건
 
▶ Flashback을 사용할 수 있는 조건
하지만 모두 복구 할 수 있는 것은 아니다.
+
모두 복구 할 수 있는 것은 아님.
 +
시스템의 설정, 버퍼의 크기에 따라 복구 할 수 있는 시간은 제한적 이다. (오라클 서버의 메모리 세팅.)
 +
'''제약조건이 추가되거나 컬림이 추가 된 경우, DROP한 후 PURGE한 경우 복원할 수 없다.'''
  
오라클은 데이터를 FLASHBACK이라는 임시 저장소에 가지고 있는다.
+
▶ 테이블
자료가 쌓이는 로그이다. 그렇기 때문에 일정시간 이내의 자료들은 어느정도 복구 가능하다.
+
* 10 분전 데이터 조회
시스템의 설정, 버퍼의 크기에 따라 복구 할 수 있는 시간은 제한적 이다. (오라클 서버의 메모리 세팅에 따라 달라진다.)
+
<source lang=sql>
 +
SELECT *
 +
  FROM [TABLE 명] AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10' MINUTE) -- 단위는 SECOND, MINUTE, HOUR, DAY
 +
WHERE [조회조건]
 +
</source>
  
'''또한 제약조건이 추가되거나 컬림이 추가 된 경우, DROP한 PURGE한 경우 복원할 수 없다.'''
+
* 10 분전 데이터 조회 입력
 
 
▶ 테이블
 
 
<source lang=sql>
 
<source lang=sql>
 +
INSERT INTO TB_XXX
 
SELECT *
 
SELECT *
   FROM [TABLE 명] AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '수치' 단위)
+
   FROM [TABLE 명] AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10' MINUTE) -- 단위는 SECOND, MINUTE, HOUR, DAY
 
WHERE [조회조건]
 
WHERE [조회조건]
 
</source>
 
</source>
+
 
 +
* 다른 테이블명으로 복구
 +
<source lang=sql>
 +
FLASHBACK TABLE EMP.XTB_EVN
 +
      TO BEFORE DROP
 +
  RENAME TO EMP.XTB_EVN_COPY;
 +
</source>
 +
 
 +
* 이전테이블로 복구
 +
<source lang=sql>
 +
FLASHBACK TABLE RTIS_DEV.XTB
 +
            TO BEFORE DROP;
 +
 
 +
FLASHBACK TABLE "BIN$hAmsdSFUTtrgUwEAAH8yIQ==$0"
 +
            TO BEFORE DROP;
 +
</source>
  
  
 +
▶ 인덱스
 +
ALTER INDEX "BIN$UofUBMjYnkDgUOABLqNFXg==$0"
 +
      RENAME TO PK_TB_USER_INFO;
  
 
▶ 프로시저
 
▶ 프로시저
 
<source lang=sql>
 
<source lang=sql>
 
SELECT *
 
SELECT *
FROM DBA_SOURCE AS OF TIMESTAMP (SYSTIMESTAMP-INTERVAL '수치' 단위)
+
  FROM DBA_SOURCE AS OF TIMESTAMP (SYSTIMESTAMP-INTERVAL '수치' 단위) -- 단위는 SECOND, MINUTE, HOUR, DAY
WHERE NAME = '프로시저이름'
+
WHERE NAME = '프로시저이름'
 
</source>
 
</source>
 
   
 
   
 
 
 
▶ EX)
 
▶ EX)
 
<source lang=sql>
 
<source lang=sql>
 
SELECT  *   
 
SELECT  *   
FROM TEST_TABLE AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '20' MINUTE)   
+
FROM TEST_TABLE AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '20' MINUTE)  -- 단위는 SECOND, MINUTE, HOUR, DAY
 
WHERE COMPANY = 'SK'
 
WHERE COMPANY = 'SK'
 
</source>
 
</source>
 
테이블명과 조건을 입력하고 조회화면 20분 이전의 데이터가 조회된다.
 
테이블명과 조건을 입력하고 조회화면 20분 이전의 데이터가 조회된다.
단위는 SECOND, MINUTE, HOUR, DAY로 바꿔 쓸 수 있다.
 
  
 
----
 
----
79번째 줄: 97번째 줄:
 
== FLASHBACK 명령 이용 복구 ==
 
== FLASHBACK 명령 이용 복구 ==
  
=== 휴지통 조회 ===
+
=== 휴지통(RECYCLEBIN) 조회 ===
  
 
-- 사용자 휴지통 조회  
 
-- 사용자 휴지통 조회  
86번째 줄: 104번째 줄:
 
   FROM RECYCLEBIN ;
 
   FROM RECYCLEBIN ;
 
</source>
 
</source>
 +
 
-- DBA권한 전체휴지통 조회  
 
-- DBA권한 전체휴지통 조회  
 
<source lang=sql>
 
<source lang=sql>
102번째 줄: 121번째 줄:
 
  WHERE A.ORIGINAL_NAME LIKE 'XTB'
 
  WHERE A.ORIGINAL_NAME LIKE 'XTB'
 
;
 
;
</source>
 
=== 다른 이름 으로 복구 ===
 
 
<source lang=sql>
 
FLASHBACK TABLE RTIS_dev.XTB
 
            TO BEFORE DROP
 
        RENAME TO XTB2;
 
</source>
 
 
=== 이전테이블로 복구 ===
 
<source lang=sql>
 
FLASHBACK TABLE RTIS_DEV.XTB
 
            TO BEFORE DROP;
 
 
FLASHBACK TABLE "BIN$hAmsdSFUTtrgUwEAAH8yIQ==$0"
 
            TO BEFORE DROP;
 
</source>
 
 
=== 이전 인덱스 복구 ===
 
 
<source lang=sql>
 
ALTER INDEX RTIS."BIN$UofUBMjYnkDgUOABLqNFXg==$0"
 
    RENAME TO PK_TB_;
 
 
</source>
 
</source>

2019년 9월 26일 (목) 15:00 판

thumb_up 추천메뉴 바로가기


1 오라클 데이터 복구 FlashBack TIMESTAMP 이용[편집]

데이터를 실수로 삭제(truncate는 복구 불가) 할 경우 특정시간 또는 시점으로 되돌릴 수 있는 기능이 Oracle Flashback 기능이다.

이 플래시백 기능을 통해 as of timestamp 구문을 사용하여 삭제 전의 데이터를 조회하여 복구 할 수 있다.

1.1 FLASHBACK 설정 조건[편집]

1. 자동 언두 관리 시스템을 사용(UNDO_MANAGEMENT 파라미터를 AUTO로 설정)

UNDO_MANAGEMENT = AUTO

2. 이전의 어느 시점까지의 언두(UNDO)정보를 보유하여 Flashback Query를 수행할것인지 UNDO_RETENTION 파라미터를 설정.

ALTER SYSTEM SET UNDO_RETENTION=1200

설정 확인 SQL

show paramter undo;

NAME                     TYPE
-----------------------------------------------
VALUE
------------------------
undo_management          string
auto
auto_retention           integer
1200
UNDOTBS1
SQL

※ 사용자 권한 Flashback 기능을 이용하기 위해서 DBMS_FLASHBACK 패키지에 대한 EXECUTE권한 필요.

▶ Flashback을 사용할 수 있는 조건 모두 복구 할 수 있는 것은 아님. 시스템의 설정, 버퍼의 크기에 따라 복구 할 수 있는 시간은 제한적 이다. (오라클 서버의 메모리 세팅.) 제약조건이 추가되거나 컬림이 추가 된 경우, DROP한 후 PURGE한 경우 복원할 수 없다.

▶ 테이블

  • 10 분전 데이터 조회
SELECT *
  FROM [TABLE 명] AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10' MINUTE) -- 단위는 SECOND, MINUTE, HOUR, DAY
WHERE [조회조건]
  • 10 분전 데이터 조회 후 입력
INSERT INTO TB_XXX
SELECT *
  FROM [TABLE 명] AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10' MINUTE) -- 단위는 SECOND, MINUTE, HOUR, DAY
WHERE [조회조건]
  • 다른 테이블명으로 복구
FLASHBACK TABLE EMP.XTB_EVN
       TO BEFORE DROP
   RENAME TO EMP.XTB_EVN_COPY;
  • 이전테이블로 복구
FLASHBACK TABLE RTIS_DEV.XTB
             TO BEFORE DROP;

FLASHBACK TABLE "BIN$hAmsdSFUTtrgUwEAAH8yIQ==$0" 
             TO BEFORE DROP;


▶ 인덱스

ALTER INDEX "BIN$UofUBMjYnkDgUOABLqNFXg==$0"
     RENAME TO PK_TB_USER_INFO;

▶ 프로시저

SELECT *
  FROM DBA_SOURCE AS OF TIMESTAMP (SYSTIMESTAMP-INTERVAL '수치' 단위) -- 단위는 SECOND, MINUTE, HOUR, DAY
 WHERE NAME = '프로시저이름'

▶ EX)

SELECT  *  
FROM TEST_TABLE AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '20' MINUTE)  -- 단위는 SECOND, MINUTE, HOUR, DAY
WHERE COMPANY = 'SK'

테이블명과 조건을 입력하고 조회화면 20분 이전의 데이터가 조회된다.


2 FLASHBACK 명령 이용 복구[편집]

2.1 휴지통(RECYCLEBIN) 조회[편집]

-- 사용자 휴지통 조회

SELECT OBJECT_NAME, ORIGINAL_NAME, CREATETIME 
  FROM RECYCLEBIN ;

-- DBA권한 전체휴지통 조회

SELECT *
  FROM DBA_RECYCLEBIN A 
 WHERE A.ORIGINAL_NAME LIKE 'XTB'
;

-- 삭제된 오브젝트로 조회

SELECT * 
  FROM "BIN$Ulu8B5c+Oz3gUOABLqObkg==$0";
  
SELECT *
  FROM DBA_RECYCLEBIN A 
 WHERE A.ORIGINAL_NAME LIKE 'XTB'
;