반응형
/******************************************************************************************************
-- Title : [ORA11g] Open Recovery from Hot Backup on Archive Log Mode
-- Reference : Oracle Study Group 김0오
-- Key word : 열린 복구 열린 복원 backup recovery restore oracle 오라클 hot backup  온라인 핫 백업 핫백업
******************************************************************************************************/

 
/*****************************************
-- Scenario
*****************************************/
1. DB를 Archive Log Mode로 운영 중 tbs_ttt 테이블스페이스를 생성한다.
2. ttt테이블을 생성하고 데이터를 입력한다.
3. Hot Backup을 사용하여 tbs_ttt의 데이터 파일(원래는 전체)을 백업 받는다.
4. 다시 데이터를 입력하고 로그 스위칭을 해준다.
5. 데이터 파일을 강제로 삭제한다.
6. 에러를 확인하고 shutdown abort 시킨다.
6. Mount상태로 시작하고 파일을 Hot Backup본에서 복구 후 offline시킨다.
7. DB를 alter database open;한다.
8. recover datafile로 복구하고 해당 파일을 online시킨다.

/*****************************************
-- Create Tablespace and Table
*****************************************/
-- 테이블스페이스 생성
create tablespace tbs_ttt
datafile '/home/oracle/oracle/oradata/OIDB/tbs_ttt.dbf' size 20M
AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED;

-- 테이블 생성(ttt계정)
create table ttt
( tno number(10)
, tname varchar(20)
) tablespace tbs_ttt;

-- 데이터 입력(ttt계정)
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

/*****************************************
-- Hot Backup
*****************************************/
-- References : dbrang.tistory.com/886

/*****************************************
-- 데이터 추가 입력
*****************************************/

-- 데이터 추가 입력(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

/*****************************************
-- 오류 발생 및 DB다운
*****************************************/
-- 파일 삭제
# rm -rf /home/oracle/oracle/oradata/OIDB/tbs_ttt.dbf


select * from ttt.ttt;  -- 출력됨(Cacheing?)

-- 데이터 추가 입력(ttt계정)
insert into ttt values (301, 'hhh');
insert into ttt values (302, 'iii');
insert into ttt values (303, 'jjj');

commit;

select * from ttt;

alter system checkpoint;
alter system switch logfile;

-- 파일 상태 확인(에러가 왜 안나는지 모름!!)
select * from dba_data_files where tablespace_name = 'TBS_TTT';


/*****************************************
-- 오류 확인 및 Shutdown
*****************************************/
-- shutdown abort
shutdown abort;

-- startup
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;

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

/*****************************************
-- 복원
*****************************************/
-- mount로 오픈
startup mount;

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

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

-- 데이터 파일 복원
# cd /BACKUP/hot_backup
# tar zzxvf TBS_TTT_backup_20140721.tar.gz

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

-- error file offline
alter database datafile '/home/oracle/oracle/oradata/OIDB/tbs_ttt.dbf' offline;

-- db open 
alter database open;

-- file status
select tablespace, file_name, file_status from sp_tablespace0;

select name, status from v$datafile;

-- recover database file
recover datafile '/home/oracle/oracle/oradata/OIDB/tbs_ttt.dbf';

-- database file online
alter database datafile '/home/oracle/oracle/oradata/OIDB/tbs_ttt.dbf' online;

-- 확인(ttt계정)
select * from ttt;

반응형

+ Recent posts