백업파일이나 아카이브로그에 문제가 있을때 복구하기
 : Clone DB 와 export/import 사용
 
 
 
 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 실습1 시작
실습 1: 정말 일어나서는 안될 장애!!
 
장애유형 - 데이터파일 백업을 잘못 수행해서 백업된 데이터파일끼리 SCN 정보가 다름
             - 아카이브 로그 없음
        
100% 복구 되는 것 아님 - 평소 이런 장애가 발생하지 않도록 최선을 다해서 관리해야함
 
 
장애상황 -------------------------------->>>>>>>>>>>>>>>>>>>>
 
1. Noarchivelog 모드로 만들기
 
SYS> startup mount;
SYS> alter database noarchivelog;
SYS> alter database open;
SYS> archive log list;
노아카이브 모드 확인
 
SYS> select name from v$datafile;
 
SYS> !mkdir /data/backup/temp
 
 
2. Begin backup 명령없이 OS명령어로 그냥 copy 만 받는다.
   : 백업파일의 SCN 정보가 다름
   : 정신놓고 백업하다 보면 실수할수 있으니 평소에 조심!!
   
$ cp /home/oracle/oradata/testdb/system01.dbf /data/backup/temp/
$ cp /home/oracle/oradata/testdb/sysaux01.dbf /data/backup/temp/
$ cp /home/oracle/oradata/testdb/undotbs01.dbf /data/backup/temp/
$ cp /home/oracle/oradata/testdb/users01.dbf /data/backup/temp/
$ cp /home/oracle/oradata/testdb/example01.dbf /data/backup/temp/
 
SYS> conn scott/tiger
 
SCOTT> create table test02 (no nummber) tablespace example;
SCOTT> insert into test02 values (1);
SCOTT> insert into test02 values (2);
SCOTT> commit;
SCOTT> conn / as sysdba;
 
SYS> select name from v$datafile;
 
 
3. 장애 발생 시키기
 
$ rm -fr /home/oracle/oradata/testdb/example01.dbf
 
SYS> shutdown abort;
SQL> staratup
MOUNT 올라오고 에러
ORA-01157: cannot identify/lock data file 5 - see DBWR trace file
ORA-01110: data file 5: '/home/oracle/oradata/testdb/example01.dbf'
 
 
 
복구 -------------------------------->>>>>>>>>>>>>>>>>>>>
CloneDB를 이용하여 복구하기
 : DB SID = testdb3
 : 경로 : /data/backup/temp/

 
 
1. testdb3용 파라미터 파일 생성
 
$ cd /home/oracle/product/10g/dbs/
$ cp inittestdb.ora inittestdb3.ora
$ vi inittestdb3.ora
수정하기
db_name=testdb3
control_files='풀경로1','풀경로2'
:wq!
 
2. 백업 데이터파일 복사
 → 전단계에서 백업을 /data/backup/temp/에 받아 놨기 때문에 생략
 
3. 컨트롤파일 재생성
$ vi re.sql
내용 바꾸기
SET DATABASE "TESTDB3"
로그파일, 데이터파일 경로 지정
 
4. testdb3 오픈 및 복구하기
 
$ export ORACLE_SID=testdb3
$ sqlplus / as sysdba;
SYS> @/home/oracle/re.sql
 
SYS> recover database using backup controlfile;
시퀀스 번호 나오고 아카이브로그 선택하라고 나오면
auto
아카이브 파일이 없어서 복구가 안되고 에러난다.
 
 
5. 파라미터 파일에 히든 파라미터 적용하기
 
$ vi /home/oracle/product/10g/dbs/inittestdb3.ora
기존내용 밑에 추가
_offline_rollback_segments=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)
_corrupted_rollback_segments=true
_allow_resetlogs_corruption=true
:wq!
 
6. 변경한 파라미터 파일을 적용시키기 위해 종료하고 다시시작 후 강제복구
 
SYS> shutdown abort;
SYS> startup mount;
 
SYS> alter session set events '10015 trace name adjust_scn level 1';
 
SYS> recover database until cancel using backup controlfile;
시퀀스 번호 나오고 아카이브로그 선택하라고 나오면
cancel
 
SYS> alter database open resetlogs;
 
 
7. 정리
 
 : 이렇게 open 된 후에는 파라미터 파일에 적용시켰던 히든 파라미터는 지워줘야 한다.
 : 만약 startup이 안된다면
   SYS> alter session set events '10015 trace name adjust_scn level 1;
   에서 숫자를 2,3으로 계속 증가 시켜가면서 시도하면 된다.
 ▶ 최악의 상황에서 하는 응급복구법 : 복구후 반드시 전체 DB를 export로 백업받아야 한다.
 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 실습1 끝
 
 
 
 
 
 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 실습2 시작
실습 2: Incarnation number 다른 백업 파일 사용하여 복구하기
 
장애유형 - 백업 수행 후 resetlogs 로 DB가 open 되어 사용되다가 장애 발생하여 백업 파일로 복구를 하려고 시도 했으나
           Incarnation 에러가 발생하면서 복구가 안되는 경우
 
주의 : 실습1에서 noarchive 모드로 변경한 상태 그대로라면 archive mode로 변경후 실습 진행하기
         MOUNT 상태에서 SYS> alter database archivelog;
 
 
장애상황 -------------------------------->>>>>>>>>>>>>>>>>>>>
 
 
1. 현재 데이터 파일 전체 begin backup 수행
 
SYS> !vi dd.sql
conn / as sysdba
 
set line 200
col tablespace_name for a10
col file_name for a50
col mb for 9999
select tablespace_name, bytes/1024/1024 MB, file_name
from dba_data_files
/
:wq!
 
 
SYS> @dd
 
SYS> alter tablespace example begin backup;
SYS> !cp /home/oracle/oradata/testdb/example01.dbf /data/backup/open
SYS> alter tablespace example end backup;
 
SYS> alter tablespace users begin backup;
SYS> !cp /home/oracle/oradata/testdb/users01.dbf /data/backup/open
SYS> alter tablespace users end backup;
 
SYS> alter tablespace sysaux begin backup;
SYS> !cp /home/oracle/oradata/testdb/sysaux01.dbf /data/backup/open
SYS> alter tablespace sysaux end backup;
 
SYS> alter tablespace undotbs1 begin backup;
SYS> !cp /home/oracle/oradata/testdb/undotbs01.dbf /data/backup/open
SYS> alter tablespace undotbs1 end backup;
 
SYS> alter tablespace system begin backup;
SYS> !cp /home/oracle/oradata/testdb/system01.dbf /data/backup/open
SYS> alter tablespace system end backup;
 
SYS> alter system checkpoint;
 
 
 
2. DB 종료 후 incarnation 번호를 바꾸기 위해 resetlogs로 오픈
 
SYS> shutdown immediate;
SYS> startup mount;
 
SYS> recover database until cancel;
SYS> alter database open resetlogs;
 
SYS> archive log list;
아카이브모드
시퀀스들 1로 됨
 
 
3. 데이터 파일을 삭제하여 장애 발생
 
SYS> create table scott.test100 (no number) tablespace users;
SYS> insert into scott.test100 (1);
SYS> commit;
SYS> select * from scott.test100;
 
SYS> !rm /home/oracle/oradata/testdb/users01.dbf
SYS> alter tablespace users offline;
SYS> alter tablespace users online;
에러
ORA-01157: cannot identify/lock data file 4 - see DBWR trae file
ORA-01110: data file 4: '/home/oracle/oradata/testdb/users01.dbf'
 
SYS> select * from scott.test100;
에러
 
 
 
 
복구 -------------------------------->>>>>>>>>>>>>>>>>>>>
 
4. 백업 파일 복원하여 복구 시도
 
SYS> !cp /data/backup/open/users01.dbf /home/oracle/oradata/testdb/users01.dbf
 
SYS> recover tablespace users;
시퀀스 번호 나오고 아카이브로그 선택하라고 나오면
auto
 
SYS> alter tablespace users online;
SYS> select * from scott.test100;
복구완료
 
 
5. 정리
 : resetlogs 옵션으로 DB를 open 해도 이상 없이 복구가 된다.
 
 
 
 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 실습2 끝
 
 
 
 
 
 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 실습3 시작
실습 3: 전체 데이터 파일 삭제 후 incarnation 번호 다른 파일 사용하여 복구하기
 : 테이터파일(백업) 과 현재 control file 의 incarnation 번호가 다른 경우
 
주의 : 실습1에서 noarchive 모드로 변경한 상태 그대로라면 archive mode로 변경후 실습 진행하기
       MOUNT 상태에서 SYS> alter database archivelog;
 
 
장애상황 -------------------------------->>>>>>>>>>>>>>>>>>>>
 
1. incarnation number를 다르게 하기 위해 resetlogs 로 open
 
SYS> shutdown immediate;
SYS> startup mount;
 
SYS> recover database until cancel;  → resetlogs 옵션을 쓰기 위해 일부러 recovery 수행했음
SYS> alter database open resetlogs;
 
SYS> archive log list;
아카이브모드
시퀀스들 1로 됨
 
SYS> shutdown immediate;
SYS> startup mount;
 
SYS> recover database until cancel;
SYS> alter database open resetlogs;
 
SYS> @dd
 
SYS> !rm -fr /home/oracle/oradata/testdb/*.df
SYS> shutdown abort;
 
 
 
복구 -------------------------------->>>>>>>>>>>>>>>>>>>>
 
2. 백업 데이터 파일 복원 후 복구
 
SYS> startup
MOUNT 까지 올라오고 에러
ORA-01157: cannot identify/lock data file 1 - see DBWR trae file
ORA-01110: data file 1: '/home/oracle/oradata/testdb/system01.dbf'
 
SYS> !cp /data/backup/open/*.dbf /home/oracle/oradata/testdb/
 
SYS> alter database open;
에러
ORA-01190: control file or data file 1 is from before the last RESETLOGS
ORA-01110: data file 1: '/home/oracle/oradata/testdb/system01.dbf'
 
SYS> recover database;
시퀀스 번호 나오고 아카이브로그 선택하라고 나오면
auto
 
 
 
3. DB open 후 데이터 확인
 
SYS> alter database open;
 
SYS> select * from scott.test100;
복구완료
 
 
4. 정리
 : 만약 복구가 되지 않는다면 백업된 DATAFILE고 Control file 간의 체크포인트 정보가 달라서다.
   → Control file 재생성해서 Open 할때 Resetlogs 옵션으로 OPEN 하면된다.
 
 : 만약 백업파일이 Begin backup 이거나 Archive log 가 중간에 없다면
   → 히든파라메터(_allow_resetlogs_corruption=true) 를 적용시킨후 OPEN 할때 Resetlogs 옵션으로 OPEN 하면된다.
 
 ▶ 이런 사태가 생기지 않도록 사전에 백업을 완벽히 해야 하며, 위의 응급복구를 한 후에는 반드시 백업을 수행해야한다!!
 
 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 실습3 끝
 
Posted by 딩구르
,