오라클 복구 시나리오

2010.05.12 08:49

조인상 조회 수:16666

원문 : 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 10g ORA-32004 : obsolete and/or deprecated parameter(s) specified 조인상 2010.05.12 10750
74 centOS 5.2 에 오라클 10g 설치 조인상 2010.05.12 109931
73 히든 파라미터 확인하는 쿼리 조인상 2010.05.12 62446
» 오라클 복구 시나리오 조인상 2010.05.12 16666
71 골든 5.7 버전 데모 file 조인상 2010.05.12 7864
70 오라클 온라인백업 스크립트 (ksh 용) [1] file 조인상 2010.05.12 100773
69 [9i feature] DB_CACHE_ADVICE / V$DB_CACHE_ADVICE 에 대해서 조인상 2010.05.12 8085
68 exp error - ORA-19206: Invalid value for query or REF CURSOR parameter 조인상 2010.05.12 156631
67 exp실행시 에러. ORA-06512 SYS.DBMS_METADATA_INT 조인상 2010.05.12 32654
66 OPN 가입시의 장점 file 조인상 2010.05.12 6721
65 오라클에 접속하는 최대 인스턴스개수(세션개수)를 늘리는 방법 조인상 2010.05.12 24651
64 Red Hat Enterprise Linux AS release 3 (Taroon) 기반에서 오라클 9.2.0 설치하기 조인상 2010.05.12 8081
63 Unix 에서 Raw Device 사용법 조인상 2010.05.12 14108
62 오라클 10g OCP 라이센스 업그레이드 정보 조인상 2010.05.12 7519
61 .net 과 오라클 연동에 대하여 조인상 2010.05.12 10334
60 [장애처리] 메모리 풀로 인한 OS hang-up 조인상 2010.05.12 9769
59 [설치장애기] 64비트 windows 2003에 오라클 10.2.0.1 32비트 설치시 ORA-12564에러 조인상 2010.05.12 16517
58 Redhat Linux 8.0 에 Oracle 9i install 조인상 2010.05.12 7616
57 레드햇리눅스9에 오라클9i설치중 hang 조인상 2010.05.12 8788
56 OS의 파일사이즈가 2GB로 제한될때 split으로 나누기 조인상 2010.05.12 6189
서버에 요청 중입니다. 잠시만 기다려 주십시오...