백업파일이나 아카이브로그에 문제가 있을때 복구하기
: 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 끝
'Oracle > Oracle - 백업&복구' 카테고리의 다른 글
백업&복구 23 - Flashback : Table Level (0) | 2012.02.20 |
---|---|
백업&복구 22 - Flashback : Row level (0) | 2012.02.17 |
백업&복구 Extra - SQL Loader 문자셋(character set)관련 - 문자셋이 맞지않아 SQL Loader 사용에 애로사항이 꽃핀다면?? (0) | 2012.02.16 |
백업&복구 20 - SQL Loader (2) | 2012.02.16 |
백업&복구 19 - DB Link (2) | 2012.02.15 |