반응형
/******************************************************************************************************
-- Title : [ORA11g] Close Recovery from Cold Backup on Archive Log Mode
-- Reference : Oracle Study Group 김0오
-- Key word : 닫힌 복구 닫힌 복원 backup recovery restore oracle 오라클 
******************************************************************************************************/
/*****************************************
-- Scenario
*****************************************/
1. DB를 Archive Log Mode로 운영중이다.
2. tbs_ttt라는 테이블스페이스를 생성하고 ttt라는 테이블을 생성해서 데이터를 입력한다.
3. 이후 Full Backup을 받고 다시 데이터를 입력한다.
4. 테이터 파일을 삭제하여 오류를 발생시킨다.
5. DB를 셧다운하고 Full Backup에서 삭제된 파일을 복원한다.
6. Mount 상태에서 Recover Database를 하고 Open한다.


/*****************************************
-- Create Tablespace and Table
*****************************************/
-- Create Tablespace
create tablespace tbs_ttt
datafile '/home/oracle/oracle/oradata/OIDB/tbs_ttt.dbf' size 5M;

-- Create table
create table ttt
( tno number(10)
, tname varchar(20)
) tablespace tbs_ttt;

-- Insert data
insert into ttt values (101, 'aaa');
insert into ttt values (102, 'bbb');
insert into ttt values (103, 'ccc');

commit;

select * from ttt;

-- 로그스위치
alter system switch logfile;

$ ll /ARCHIVE

/*****************************************
-- Cold Backup
-- Only Backup data file of tbs_ttt TBS to TEST.
-- Actually, You have to do Full Backup in Real System.
*****************************************/
-- DB Down
shutdown immediate;

-- Cold Backup(Only tsb_ttt.dbf to TEST)
# cp /home/oracle/oracle/oradata/OIDB/tbs_ttt.dbf /BACKUP/cold_backup/

# chown -R oracle.oracle /BACKUP/cold_backup/tbs_ttt.dbf

/*****************************************
-- 재시작 및 데이터 추가 입력
*****************************************/
-- 재시작/확인
startup;

select * from ttt;

-- 데이터 추가 입력
insert into ttt values (201, 'ddd');
insert into ttt values (202, 'eee');
insert into ttt values (203, 'fff');

commit;

select * from ttt;

-- 로그스위치
alter system switch logfile;

$ ll /ARCHIVE

/*****************************************
-- 셧다운 및 오류 발생
*****************************************/
-- shutdown db
shutdown immediate;

-- 파일 삭제
# rm -rf /home/oracle/oracle/oradata/OIDB/tbs_ttt.dbf

/*****************************************
-- 재시작 및 오류 확인
*****************************************/
-- restart db
startup;

Database mounted.
ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
ORA-01110: data file 6: '/home/oracle/oracle/oradata/OIDB/tbs_ttt.dbf'

-- db 상태 확인
select status from v$instance;

STATUS
------------
MOUNTED

-- 에러 파일 확인
select v.*, d.name from v$recover_file v, v$datafile d
where v.file# = d.file#;

FILE# ONLINE  ONLINE_SATUS ERROR          CHANGE# NAME
----- ------- ------------ -------------- ------- --------------------------------------------
6     ONLINE  ONLINE       FILE NOT FOUND 0       /home/oracle/oracle/oradata/OIDB/tbs_ttt.dbf

/*****************************************
-- 복원 및 확인
*****************************************/
-- 데이터 파일 복원
# cp /BACKUP/cold_backup/tbs_ttt.dbf /home/oracle/oracle/oradata/OIDB/

# chown oracle.oracle /home/oracle/oracle/oradata/OIDB/tbs_ttt.dbf

-- recover db
recover database;

-- open db
alter database open;

-- confirm
select * from ttt;

/*****************************************
-- Meaning of Close Recovery
*****************************************/
● Close Recovery 방식은 DB가 Mount된 상태에서 Archive Log File을 DB 전체에 적용시켜 모든 Data File등을
    동기화 시켜 에러가 발생하기 바로 전 시점까지 완전 복구하는 방식이다.
● 이 방식이 가능하기 위해서는 DB를 Full Backup한 내용이 있어야 하고 Archive Mode로 운영되어야 한다. 

/*****************************************
-- 테스트 환경 세팅 초기화
*****************************************/
# rm -rfv /ARCHIVE
# rm -rfv /home/oracle/oracle

# cp -rfv /BACKUP/cold_backup/ARCHIVE /
# cp -rfv /BACKUP/cold_backup/oracle /home/oracle/

# chown -R oracle.oracle /ARCHIVE
# chown -R oracle.oracle /home/oracle/oracle




반응형

+ Recent posts