Oracle

게시글 보기
작성자 유건데이타 등록일 2015-08-14
제목 9I)FLASHBACK QUERY
9I)FLASHBACK QUERY
===================

10g이상에서도 사용가능함

Oracle9i에는 flashback query라는 기능이 추가되었다.
만약 실수로 data를 지운 후 commit까지 하면 이전의 version에서는 recover를
이용하여 특정시점까지 불완전 recovery후에 이를 export하고, 기존의 database를
다시 restore한후 import하는 여러가지 절차를 거쳐서 복구를 해야만 했다.
Oracle9i에서는 이전의 특정 시점의 view를 제공하여 data를 복구할 수 있는 방법을
제공한다.
여기서는 flashback을 setting하는 방법과 사용하는 방법을 간략하게 설명한다.

Set up database for Flashback Use
---------------------------------

1. init.ora나 spfile.ora에 UNDO_MANAGEMENT = AUTO로 setting

SQL> show parameter undo

NAME TYPE VALUE
-------------------------------- ----------- -------------------------
undo_management string MANUAL

위의 parameter를 setting하여 Automatic Undo Management를 enable한다.

2. UNDO retention period를 setting

SQL> ALTER SYSTEM SET undo_retention = 1200;
System altered.

이 parameter는 undo정보가 undo segment에 보관되는 시간을 정의한다. transaction이 commit되더라도 20분동안 undo정보가 유지된다.

Set up user and tables
----------------------

1. flash user생성

SQL> create user flash identified by gordon;
User created.

SQL> grant connect, resource to flash;
Grant succeeded.
SQL> grant execute on dbms_flashback to flash;
Grant succeeded.

SQL> connect flash/gordon
Connected.
SQL> set echo on

2. user table생성, data가 insert된 시각을 저장할 table생성


SQL> CREATE TABLE tst(t number(5));
Table created.

SQL> INSERT INTO tst VALUES(1);
1 row created.
SQL> INSERT INTO tst VALUES(2);
1 row created.
SQL> COMMIT;
Commit complete.

SQL> CREATE TABLE keep_date (date_scn_tracking date);
Table created.

SQL> SELECT * FROM tst;

T
----------
1
2

3. delete row

SQL> execute dbms_flashback.disable;
PL/SQL procedure successfully completed.

SQL> INSERT INTO keep_date select sysdate from dual;
1 row created.
SQL> COMMIT;
Commit complete.

SQL> DELETE FROM tst WHERE t = 1;
1 row deleted.
SQL> COMMIT;
Commit complete.

SQL> SELECT * FROM tst;

T
----------
2
delete작업을 commit하여 1개의 row만 남아있다.

4. flashback활성화

SQL> COMMIT;
Commit complete.

SQL> declare
2 restore_scn date;
3 begin
4 select date_scn_tracking into restore_scn from keep_date;
5 dbms_flashback.enable_at_time(restore_scn);
6 end;
7 /

PL/SQL procedure successfully completed.

SQL> SELECT * FROM tst;

T
----------
1
2

flashback으로 과거에 delete했던 row를 조회할수 있다.

위에서 말한 것처럼 ALTER SYSTEM SET undo_retention = 1200 명령은 undo 정보를
1200동안 유지한다는 의미이다. 그러나 undo space 부족 현상이 나타나면 1200초
이내의 undo 정보라고 해도 overwrite가 된다. 따라서 flashback이 해당 시간 내의
모든 과거 data를 query하는 것은 보장할 수 없다.
Comment
등록된 코멘트가 없습니다.