본문 바로가기

빅데이터과정/WORKSHOP 2

#28_140722_WSHOP2_복구와 FLASHBACK

728x90

# 복구와 FLASHBACK







복구와 flashback의 차이는?

복구(recover)는 백업 받았던 파일을 복원해서 최신파일로 만들어주는 과정
flashback은 현 시점에서 과거로 되돌리기 위한 작업을 수행하는 것 과거로 되돌리기 위해서 그 동안 했던 DML 작업들을 반대로 수행
flashback은 복구보다 빠르다
flashback의 기능 총 정리






  • flashback database 



– database 전체를 과거로 되돌리는 기능
이 기능을 쓰려면 2가지가 설정 되야 한다


1)     아카이브 모드

2)     flashback database 기능이 활성화 되야 한다

SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------
NO
SQL> shutdown immediate
SQL> startup mount
SQL> alter database flashback on;
SQL> alter database open;
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------
YES
주의할 사항 – flashback 을 활성화 시키면 flashback log가 flash recovery area에 생성 되는데 그 데이터가 점점 많아져서 flash recovery area 영역을 full 시킬 수 있다


3)     SQL> select systimestamp from dual;
현재 시간확인

SQL> select systimestamp from dual;
SYSTIMESTAMP
---------------------------------------------------------------------------
22-JUL-14 04.39.59.992546 PM +09:00

4)     SQL> select current_scn from v$database;
현재 scn 번호 확인(commit할 때 몇번째 commit을 하고 있는지 알리는 번호를 scn 번호라 한다)

SQL> select current_scn from v$database;
CURRENT_SCN
-----------
    1306862

5)     SQL> drop user scott cascade;
유저가 drop 되기 전으로 flashback database 수행

6)     SQL> shutdown immediate
 SQL> startup mount

7)     flashback database to scn 번호
두가지 경우 가능 : flashback database to timestamp to_timestamp('22-JUL-14 04.39.59','DD-MON-RR HH24:MI:SS');

8)     SQL> alter database open resetlogs;

9)     SQL> connect scott/tiger

10)  참고함수
# timestamp를 scn으로 바꾸는 query
select timestamp_to_scn('22-JUL-14 04.39.59' from dual;

# scn을 timestamp로 바꾸는 query
select scn_to_timestamp('1306862') from dual




  • flashback table


table을 과거로 되돌리는 기능
SQL> connect scott/tiger
SQL> select systimestamp from dual;
SQL> select current_scn from v$database;
SQL> delete from emp;
SQL> commit;

1)     alter table emp enable row movement;
# emp 테이블이 flashback이 가능한 상태로 활성화 시키는 명령어

2)     flashback table emp to timestamp (systimestamp – interval '5' minute);
현재 시간에서 emp 테이블을 5분전으로 돌려라

SQL> connect scott/tiger
SQL> select systimestamp from dual;
SYSTIMESTAMP
---------------------------------------------------------------------------
22-JUL-14 05.19.03.423761 PM +09:00
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
    1308264
SQL> delete from emp;
SQL> commit;
SQL> alter table emp enable row movement;
SQL> flashback table emp to timestamp (systimestamp - interval '5' minute);
SQL> select * from emp;
     EMPNO ENAME      JOB              MGR HIREDATE                   SAL       COMM     DEPTNO
---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
      7839 KING       PRESIDENT            1981/11/17:00:00:00       5000                    10
      7698 BLAKE      MANAGER         7839 1981/05/01:00:00:00       2850                    30
      7782 CLARK      MANAGER         7839 1981/05/09:00:00:00       2450                    10
      7566 JONES      MANAGER         7839 1981/04/01:00:00:00       2975                    20
………………………………………………………



마지막문제프로시저를 생성하는데 테이블명과 분을 입력하면 해당 분으로 테이블을 과거로 되돌리는 프로시저를 생성하시오
SQL> exec flash_table('EMP’,5);

CREATE OR REPLACE PROCEDURE flash_table
(p_table VARCHAR2,
p_min number)
IS
 BEGIN
  EXECUTE IMMEDIATE
   'alter table '||p_table|| ' enable row movement';
  EXECUTE IMMEDIATE
   'flashback table '||p_table||' to timestamp (systimestamp - interval '''|| p_min ||''' minute)';
END;
/