Korean English Japanese Chinese (Simplified) Chinese (Traditional)

 

 

 

/* Oracle Flashback Database는 데이터베이스를 특정한 시간의 상태로 되돌리는 기능이다. 이 기능이 활성화되면, 데이터베이스는 Flashback log files를 수집하고 FRA(Fast Recovery Area)에 저장한다. Flashback Database를 수행하면 RMAN 백업 파일의 Restoring & Recovering 없이도 데이터베이스를 특정한 상태로 복구할 수 있는 것이다. 참고로, 이후 연재될 Flashback Query, Flashback Transaction Query 등 Flashback Technology들은 Undo log를 이용한 것이다. Flashback Database만 Flashback log files를 이용한다. */

 

 

1. Restore point 생성

SELECT current_scn FROM v$database;

CREATE RESTORE POINT rest_01;
CREATE RESTORE POINT rest_guaranteed_01 GUARANTEE FLASHBACK DATABASE;

DROP RESTORE POINT rest_01;
DROP RESTORE POINT rest_guaranteed_01;

 

2. Flashback Database 활성화

ALTER DATABASE FLASHBACK ON;

ALTER TABLESPACE users FLASHBACK OFF;

ALTER DATABASE FLASHBACK OFF;

 

 

 

 

 

난이도: 

문제 1:  Flashback Database 시나리오를 생성하고, 수행하라. (15분)

 

 

1. Flashback Database를 활성화하고, Flashback Database Retention 파라미터를 6000초로 바꾼다.

SELECT flashback_on FROM v$database;
ALTER DATABASE FLASHBACK ON;
SELECT flashback_on FROM v$database;

SHOW PARAMETER db_flashback
ALTER SYSTEM SET db_flashback_retention_target = 6000;

 

 

2. 테이블 myt를 생성하고 데이터를 추가한 뒤, Commit한다. 그리고, FRA 영역에 flashback 디렉토리가 추가되었는지 확인한다.

CREATE TABLE myt
AS
SELECT	*
FROM	dba_objects;

UPDATE myt SET object_name = 'TEST';

COMMIT;


SELECT * FROM v$flashback_database_stat;
SHOW PARAMETER db_recovery
$ cd /u01/app/oracle/fast_recovery_area/
$ ls -lrth

 

 

3. Restore point를 생성하고, SCN을 확인한다. Restore point 리스트는 v$restore_point 뷰로 확인할 수 있다.

CREATE RESTORE POINT rp1;

SELECT current_scn FROM v$database;

SELECT * FROM v$restore_point;

 

 

 

4. myt 테이블을 삭제하고, commit한다. 이제 Flashback Database 기능을 이용하여 myt 테이블이 삭제되기 전 시간으로 데이터베이스를 되돌릴 것이다. 

DELETE FROM myt;
COMMIT;

SELECT count(1) FROM myt;

 

 

 

5. 데이터베이스를 Mount 모드로 기동하고, FLASHBACK DATABASE를 적용한다. Flashback 로그를 이용하여 데이터베이스 자체의 버전을 과거 상태로 이동하는 것이므로, 데이터베이스를 Open으로 기동할 시 반드시 RESETLOGS 옵션을 사용해야 한다. flashback database가 정상적으로 완료되면, myt의 데이터가 삭제되기 전 시점으로 되돌아 갈 것이다.

SHUT IMMEDIATE;
STARTUP MOUNT;

FLASHBACK DATABASE TO RESTORE POINT rp1;

ALTER DATABASE OPEN RESETLOGS;


SELECT count(1) FROM myt;

 

 

 

 

/* Flashback Database 적용 후에는 반드시 RESETLOGS 옵션으로 데이터베이스를 OPEN해야 하기 때문에, 이전 Incarnation Mode의 SCN에는 이동할 수 없다. myt2 테이블이 생성된 시점에 myt 테이블의 데이터가 날라갔다면, 이 시점으로 Flashback Database을 한다면 myt 테이블의 데이터가 정상적으로 복구되지 않는다. 이럴 경우에는 먼저 myt 테이블에 데이터가 정상적으로 있을 시점으로 Flashback Database를 한 다음 exp를 이용하여 미리 myt 테이블의 데이터를 옮겨놓고, myt2 테이블이 생성된 시점으로 Flashback Database 적용 후 imp로 myt 테이블의 데이터를 다시 흡수한다. */

 

 

 

6. myt 테이블의 데이터를 truncate하고, myt2 테이블을 생성한 뒤 SCN을 확인한다.

TRUNCATE myt;

CREATE TABLE myt2
AS
SELECT	*
FROM	dba_objects;

SELECT current_scn FROM v$database;

 

 

 

7. myt 테이블의 데이터를 truncate하고, myt2 테이블을 생성한 뒤 SCN을 확인한다.

 

SHUT IMMEDIATE;
STARTUP MOUNT;

FLASHBACK DATABASE TO SCN 7741313;
ALTER DATABASE OPEN READ ONLY;

SELECT count(1) FROM myt;
SELECT count(1) FROM myt2;   <-- error


$ exp \'sys/asdf0930k AS SYSDBA\' tables=myt file=/tmp/myt.dmp

 

 

 

 

8. myt2이 생성된 시점으로 FLASHBACK DATABASE 후, imp로 myt 테이블의 데이터를 데이터베이스에 적용한다.

SHUT IMMEDIATE;
STARTUP MOUNT;

FLASHBACK DATABASE TO SCN 7741468;
ALTER DATABASE OPEN RESETLOGS;

$ imp \'sys/asdf0930k AS SYSDBA\' tables=myt file=/tmp/myt.dmp data_only=y


/* 두 테이블 모두 데이터가 있는지 확인 */
SELECT count(1) FROM myt;
SELECT count(1) FROM myt2;
 

If you like this post, please give me a ❤️...!
 
✰Popular Posts✰
✰Recent Posts✰
 

❤ from Seoul, Daejeon, Tokyo, Fukuoka