오라클 복구 시나리오

2010.05.12 08:49

조인상 조회 수:16668

원문 : http://www.ischo.net -- 조인상 // 시스템 엔지니어

Writer : http://www.ischo.net -- ischo // System Engineer in Replubic Of Korea

+++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

본문 : http://www.ischo.net -- 조인상 //시스템 엔지니어

출처 : http://blog.naver.com/redsark/150067387249
+++++++++++++++++++++++++++++++++++++++++++++++++++++++


시나리오 1.

        noarchive mode, offline backup

        datafile 유실 또는 깨졌을 때



        SQL> startup

        ORACLE instance started.



        Total System Global Area  85292300 bytes

        Fixed Size              70924 bytes

        Variable Size          40775680 bytes

        Database Buffers        44367872 bytes

        Redo Buffers            77824 bytes

        Database mounted.

        ORA-01157: cannot identify/lock data file 3 - see DBWR trace file

        ORA-01110: data file 3: 'C:\ORACLE\ORADATA\ORCL1\USERS01.DBF'



=====================================================================

-- startup시 mount 상태이므로 offbackup 파일을 복사하기위해 DB shutdown
shutdown



-- host copy [offbackup 경로] [해당 oracle sid 경로]
host copy c:\oracle\offbackup\. c:\oracle\oradata\orcl1



-- DB open
startup



시나리오 2.

        noarchive mode, offline backup

        temp datafile 유실 또는 깨졌을 때



        SQL> startup

        ORACLE instance started.



        Total System Global Area  85292300 bytes

        Fixed Size              70924 bytes

        Variable Size          40775680 bytes

        Database Buffers        44367872 bytes

        Redo Buffers            77824 bytes

        Database mounted.

        ORA-01157: cannot identify/lock data file 4 - see DBWR trace file

        ORA-01110: data file 4: 'C:\ORACLE\ORADATA\ORCL1\TEMP01.DBF'



        startup 시 문제가 생긴 datafile이 temp 파일인 것을 확인할 수 있다.

        temp 파일은 DB 운영시 데이터가 들어있는 중요한 파일이 아니므로 temp datafile 을 offline 시킨후 DB 가동후 재생성 해준다.

        temp 파일을 일반 datafile 복구시처럼 offbackup 에 있는 데이터를 restore 하면 꽤 많은 시간이 걸리기 때문이다.



=====================================================================

-- DB mount 상태에서
alter database datafile 'C:\ORACLE\ORADATA\ORCL1\TEMP01.DBF' offline drop;

alter database open;

drop tablespace temp;



-- temp tablespace 생성 (orcl1 에 알맞은 sid 명으로 변경한다.)
create tablespace temp
datafile 'c:\oracle\oradata\orcl1\temp01.dbf' size 20m
temporary;


시나리오 5.

        archive mode, offline backup

        datafile 유실 또는 깨졌을 때



        SQL> startup

        ORACLE instance started.



        Total System Global Area  85292300 bytes

        Fixed Size              70924 bytes

        Variable Size          40775680 bytes

        Database Buffers        44367872 bytes

        Redo Buffers            77824 bytes

        Database mounted.

        ORA-01157: cannot identify/lock data file 3 - see DBWR trace file

        ORA-01110: data file 3: 'C:\ORACLE\ORADATA\ORCL1\USERS01.DBF'



        문제가 생긴 파일을 host copy 명령을 사용해 restore 시킨다.



        SQL> startup

        ORACLE instance started.



        Total System Global Area  85292300 bytes

        Fixed Size              70924 bytes

        Variable Size          40775680 bytes

        Database Buffers        44367872 bytes

        Redo Buffers            77824 bytes

        Database mounted.

        ORA-01113: file 3 needs media recovery

        ORA-01110: data file 3: 'C:\ORACLE\ORADATA\ORCL1\USERS01.DBF'



        DB를 빠른시간 내에 open 하기 위해 문제가 생긴 datafile을 offline 시킨뒤 DB open 한 후 recovery를 수행한다.



=====================================================================

-- offbackup 해둔 datafile 을 host copy 명령으로 복사한다.
host copy c:\oracle\offbackup\users01.dbf c:\oracle\oradata\orcl1



-- users01.dbf 는 문제가 생긴 datafile 로 변경한다.
alter database datafile 'C:\ORACLE\ORADATA\ORCL1\USERS01.DBF' offline;



-- DB open
alter database open;



-- 해당 tablespace 를 offline 시킨다.
alter tablespace users offline immediate;



-- 복구
recover tablespace users;



-- 해당 tablespace 를 online 시킨다.
alter tablespace users online;



시나리오 6.

        archive mode, offline backup

        users, temp datafile 유실 또는 깨졌을 때



        SQL> startup

        ORACLE instance started.



        Total System Global Area  85292300 bytes

        Fixed Size              70924 bytes

        Variable Size          40775680 bytes

        Database Buffers        44367872 bytes

        Redo Buffers            77824 bytes

        Database mounted.

        ORA-01157: cannot identify/lock data file 3 - see DBWR trace file

        ORA-01110: data file 3: 'C:\ORACLE\ORADATA\ORCL1\USERS01.DBF'



        startup 시 data file 3, users01.dbf 에만 문제가 있다고 나온다. 하지만 DBWR trace file을 열어보면



        *** 2005-12-25 21:57:51.953

        *** SESSION ID:(2.1) 2005-12-25 21:57:51.937

        ORA-01157: cannot identify/lock data file 3 - see DBWR trace file

        ORA-01110: data file 3: 'C:\ORACLE\ORADATA\ORCL1\USERS01.DBF'

        ORA-27041: unable to open file

        OSD-04002: unable to open file

        O/S-Error: (OS 2) 지정된 파일을 찾을 수 없습니다.

        ORA-01157: cannot identify/lock data file 4 - see DBWR trace file

        ORA-01110: data file 4: 'C:\ORACLE\ORADATA\ORCL1\TEMP01.DBF'

        ORA-27041: unable to open file

        OSD-04002: unable to open file

        O/S-Error: (OS 2) 지정된 파일을 찾을 수 없습니다.



        users01.dbf, temp01.dbf 두 파일에 문제가 있다는 것을 알 수 있다.

       

        users datafile은 시나리오 5 처럼 복구하며,

        temp 파일은 DB 운영시 데이터가 들어있는 중요한 파일이 아니므로 temp datafile 을 offline 시킨후 DB 가동후 재생성 해준다.



=====================================================================

-- users01.dbf 파일 복사
host copy c:\oracle\offbackup\users01.dbf c:\oracle\oradata\orcl1



-- DB open, mount 상태에서 에러가 발생한다.
startup



-- users01.dbf 파일을 offline 시킨다.
alter database datafile 'C:\ORACLE\ORADATA\ORCL1\USERS01.DBF' offline;



-- temp01.dbf open 후 재생성 해주기 위해 제거한다.
alter database datafile 'C:\ORACLE\ORADATA\ORCL1\TEMP01.DBF' offline drop;



-- DB open
alter database open;



-- users tablespace 를 offline 시킨다.
alter tablespace users offline immediate;



-- 복구
recover tablespace users;



-- users tablespace 를 online 시킨다.

alter tablespace users online;



-- temp tablespace를 drop 시킨다.
drop tablespace temp;



-- temp tablespace 생성 (orcl1 에 알맞은 sid 명으로 변경한다.)
create tablespace temp
datafile 'c:\oracle\oradata\orcl1\temp01.dbf' size 20m
temporary;



시나리오 10.

        archive mode, offline backup,    불완전 복구

        사용자의 실수로 중용한 table 을 drop 한 경우

        table 을 drop 한 대략적인 시간을 알고 있을 경우

       

        모든 DBF 파일만을 RESTORE 한 후 다음 mount 단계에서 다음 명령을 수행한다.



        RECOVER DATABASE UNTIL TIME '시간 형식'



=====================================================================
-- 모든 datafile을 host copy 명령으로 복사한다.
host copy c:\oracle\offbackup\*.dbf c:\oracle\oradata\orcl1



-- DB open
startup



-- recover
recover database until time '2005/12/25:23:36:56'



-- DB open with resetlogs option
alter database open resetlogs;



-- 불완전 복구 후에는 반드시 offbackup을 수행한다.
@offback



시나리오 11.

        archive mode, offline backup,    불완전 복구

        archive file 이 유실됬을 경우

        datafile 복구시 유실된 arhive file 직전까지 복구



        모든 DBF 파일만을 RESTORE 한 후 다음 mount 단계에서 다음 명령을 수행한다.



        RECOVER DATABASE UNTIL CANCEL

       

        ORA-00279: change 462868 generated at 12/25/2005 23:47:28 needed for thread 1

        ORA-00289: suggestion : C:\ORACLE\ORADATA\ORCL1\ARCHIVE\ORCL1T001S00013.ARC

        ORA-00280: change 462868 for thread 1 is in sequence #13



        Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

        cancel

        Media recovery cancelled.



        위 명령 수행후 유실된 archive file 이 나오면 cancel 을 입력한다.



=====================================================================

-- 모든 datafile을 host copy 명령으로 복사한다.
host copy c:\oracle\offbackup\*.dbf c:\oracle\oradata\orcl1



-- DB open
startup



-- recover
recover database until cancel



-- DB open with resetlogs option
alter database open resetlogs;



-- 불완전 복구 후에는 반드시 offbackup을 수행한다.
@offback



시나리오 12.

        archive mode, offline backup,    불완전 복구

        사용자의 실수로 중용한 table 을 drop 한 경우

        DBMS_LOGMNR 패키지를 사용하여 해당 명령 의 실행시간을 확인하여 그 명령의 직전까지 복구하는 방법



        pfile 내에 utl_file_dir 파라미터 추가하는 작업이 필요하다.

        ..

        utl_file_dir = "c:\oracle"

        ..



        모든 DBF 파일만을 RESTORE 한 후 다음 mount 단계에서 다음 명령을 수행한다.



        RECOVER DATABASE UNTIL TIME '시간 형식'



=====================================================================

-- dbms_logmnr 패키지가 설치되지 않았을 경우 패키지 설치
@C:\ORACLE\ORA81\RDBMS\ADMIN\DBMSLMD
@C:\ORACLE\ORA81\RDBMS\ADMIN\DBMSLM



-- build, LOGMNR DICTIONARY FILE 을 생성해 준다.
exec dbms_logmnr_d.build('816.ora','c:\oracle');



-- 분석하고자 하는 redo log file, archive log file 을 추가
exec dbms_logmnr.add_logfile('c:\oracle\oradata\orcl1\redo03.log',dbms_logmnr.new);
exec dbms_logmnr.add_logfile('c:\oracle\oradata\orcl1\redo02.log',dbms_logmnr.addfile);
exec dbms_logmnr.add_logfile('c:\oracle\oradata\orcl1\redo01.log',dbms_logmnr.addfile);
exec dbms_logmnr.add_logfile('c:\oracle\oradata\orcl1\archiveORCL1T001S00004.ARC',dbms_logmnr.addfile);
exec dbms_logmnr.add_logfile('c:\oracle\oradata\orcl1\archiveORCL1T001S00003.ARC',dbms_logmnr.addfile);
exec dbms_logmnr.add_logfile('c:\oracle\oradata\orcl1\archiveORCL1T001S00002.ARC',dbms_logmnr.addfile);
exec dbms_logmnr.add_logfile('c:\oracle\oradata\orcl1\archiveORCL1T001S00001.ARC',dbms_logmnr.addfile);



-- logmnr 수행, v$logmnr_c dictionary 가 생성된다.
exec dbms_logmnr.start_logmnr(dictfilename => 'c:\oracle\816.ora');




시나리오 13.

        archive mode, offline backup 이 없을 때, 해당 datafile 에 관한 모든 archive log file 이 존재할때, 완전 복구

        backup 을 하지 않은 datafile 을 유실 또는 깨졌을 때



        control file에는 해당 datafile에 대한 정보가 남아 있으므로 그 정보와 archive log file을 사용하여 복구한다.

        control file에 존재하는 ap01.dbf datafile에 대한 정보를 사용하여 datafile을 생성한 후 복구한다.



=====================================================================

-- 손상돈 datafile을 생성 한다. (
alter database create datafile 'c:\oracle\oradata\orcl1\ap01.dbf';



-- 복구
recover datafile 'c:\oracle\oradata\orcl1\ap01.dbf';



-- DB open
alter database open;





시나리오 14.

        archive mode, offline backup, 완전 복구

        read only tablespace가 손상됬을 때

       

        read only tablespace 에는 데이터가 입력 되거나 변경될 수 없으므로 backup을 한 시점으로 부터 손상될 때까지 read only 옵션이

        변경된 적이 없다면 host copy 명령으로 backup 본을 복사하는 것만으로 복구 가능하다.



=====================================================================

-- read only tablespace 의 datafile backup 본을 restore
host copy c:\oracle\offbackup\ap01.dbf c:\oracle\oradata\orcl1



-- DB open
alter database open;
번호 제목 글쓴이 날짜 조회 수
75 오라클 cold 백업 스크립트(특정데이터파일만 추출) NT용 file 조인상 2010.05.12 9221
74 INCREMENTAL, CUMULATIVE, COMPLETE EXPORT & IMPORT 조인상 2010.05.12 7144
73 Linux 32bit ( EntePrise AS 3.0) - 오라클 9.2.0.4 설치 조인상 2010.05.12 7326
72 오라클 홈디렉토리 변경 ( /oracle_backup => /oracle ) 조인상 2010.05.12 11917
71 AIX 64bit - oracle 10.2.0.1 설치 file 조인상 2010.05.12 12745
70 오라클 삭제하는 방법 조인상 2010.05.12 14082
69 오라클 hotbackup 스크립트 조인상 2010.05.12 9583
68 오라클 인덱스 분리해서 임포트 하는 방법 조인상 2010.05.12 6643
67 Oracle Library Cache and Dictionary Cache 조인상 2010.05.12 8846
66 오라클 온라인백업스크립트 구성 예 조인상 2010.05.12 7442
65 제약조건 이름은 아는데 테이블을 모를경우 찾는 스크립트 조인상 2010.05.12 8448
64 AIO 문제때문에 오라클 실행안될때 조인상 2010.05.12 9664
63 NT기반 오라클환경에서 OS 다시 깔았을때 복구방법 조인상 2010.05.12 9139
62 v$datafile 의 status 에 recover로 표시되는 경우 조인상 2010.05.12 9945
61 캐릭터셋 확인하는 쿼리 조인상 2010.05.12 8121
60 OS의 파일사이즈가 2GB로 제한될때 split으로 나누기 조인상 2010.05.12 6189
59 레드햇리눅스9에 오라클9i설치중 hang 조인상 2010.05.12 8788
58 Redhat Linux 8.0 에 Oracle 9i install 조인상 2010.05.12 7616
57 [설치장애기] 64비트 windows 2003에 오라클 10.2.0.1 32비트 설치시 ORA-12564에러 조인상 2010.05.12 16517
56 [장애처리] 메모리 풀로 인한 OS hang-up 조인상 2010.05.12 9769
서버에 요청 중입니다. 잠시만 기다려 주십시오...