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

 
/*****************************************
-- Scenario
*****************************************/
1. DB를 Archive Log Mode로 운영 중 tbs_ttt 테이블스페이스를 생성한다.
2. ttt테이블을 생성하고 데이터를 입력한다.
3. Cold Backup을 사용하여 tbs_ttt의 데이터 파일을 백업 받는다.
4. 다시 데이터를 입력하고 로그 스위칭을 해준다.
5. 데이터 파일 삭제 후 재시작한다.
6. Mount상태에서 삭제된 파을을 Cold Backup에서 복원한다.
7. 삭제된 파일을 Offline 시키고 DB를 Open한다.
8. recover datafile로 복구하고 해당 파일을 online시킨다.

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

-- 테이블 생성
create table ttt
( tno number(10)
, tname varchar(20)
) tablespace tbs_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

/*****************************************
-- 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

/*****************************************
-- 오류 발생 및 DB다운
*****************************************/
-- 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

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


-- confirm
select * from ttt;



반응형

+ Recent posts