반응형
/******************************************************************************************************
-- Title : [ORA11g] Recovery damaged file without backup media (remake, rename)
-- Reference : study group 김0오
-- Key word : 오라클 oracle 복원 recovery restore create datafile rename file
******************************************************************************************************/
/*****************************************
-- Scenario
*****************************************/
1. DB를 Archive Log Mode로 운영 중 tbs_ttt 테이블스페이스를 생성한다.
2. ttt테이블을 생성하고 데이터를 입력한다.
3. 이후에 tbs_fff를 생성하고 테이블 생성/데이터 입력을 한다.
4. tbs_fff 파일이 손상된다(백업본이 없다).
5. 해당 파일을 비활성화 시킨다.
6. DB를 오픈한다.
7. 손상된 파일을 새로 생성(또는 이동/이름 변경)한다.
8. 복구를 수행한다.
9. 복구된 파일을 활성화 시킨다.

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

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

-- 데이터 입력(ttt계정)
insert into ttt.ttt values (101, 'aaa');
insert into ttt.ttt values (102, 'bbb');
insert into ttt.ttt values (103, 'ccc');

commit;

select * from ttt.ttt;

-- 로그스위치(6회 이상)
alter system switch logfile;

$ ll /ARCHIVE

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

-- db down
shutdown abort;

/*****************************************
-- Shutdown 및 오류 확인
*****************************************/
-- 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'

/*****************************************
-- 복원(Recovery)
*****************************************/
-- 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 file#, name, status from v$datafile;

-- remake damaged file
alter database create datafile '/home/oracle/oracle/oradata/OIDB/tbs_ttt.dbf';

/* 디스크 손상 등의 이류로 다른 위치에 생성이 필요할 때!
   1. 백업본을 카피 시킨 후 아래 명령 수행
      alter database
      rename file '/home/oracle/oracle/oradata/OIDB/tbs_ttt.dbf'
               to '/home/oracle/oracle/oradata/OIDB/tbs_ttt222.dbf';
         
   2. 빈 껍데기 만들고 아래 명령 수행
      alter database 
      create datafile '/home/oracle/oracle/oradata/OIDB/tbs_ttt.dbf'
                   as '/home/oracle/oracle/oradata/OIDB/tbs_ttt555.dbf';

*/

-- recovery re-made file
recover datafile 6;

-- database file online
alter database datafile 6 online;

-- 확인
select * from ttt.ttt;






반응형

+ Recent posts