본문 바로가기

오라클 백업/복구

Data File 장애 복구 2 - Archive Log Mode 복구



Archive Log Mode

완전복구 / 불완전복구




완전 복구 (Complete Recovery) 

- 물리적 장애 발생 시 사용 

- 장애가 발생할 경우 복구하기 위해서는 해당 파일이 I/O가 발생해서는 안됨

   복구작업 시에는 I/O 가 발생하지 않도록 만들어놓고 작업 해야함 -> offline 시키거나 shutdown



1. offline 가능한 일반 Tablespace 장애 복구 (백업파일 있음)

장애발생 확인 --> 해당 tablespace offline --> restore --> recovery --> 해당 tablespace online     


> alter tablespace 이름 offline ;

> recover tablespace 이름 ;

> alter tablespace 이름 online ;


[실습]




2. offline 안되는 tablespace 장애 복구 => system tablespace나  undo tablespace (백업파일 있음)

장애 발생 --> SHUTDOWN --> restore --> STARTUP --> recovery --> 다시 db open


> recover database ;


[실습]




3. 백업파일 없는 경우 복구

장애 발생 --> 해당 tablespace offline --> Data file 생성 --> recovery --> 해당 tablespace online


> alter tablespace 이름 offline ;

> alter database create datafile '원래 있던 경로'

as '신규로 생성하고자 하는 경로와 이름' ;         --> 원래 있던 경로로 생성해도 됨.

> recover tablespace 이름 ;

> alter tablespace 이름 online ;


주의사항!

신규로 처음에 생성한 Data file은 checkpoint scn이 0번으로 초기화된다

그리고 복구를 수행하고 나면 checkpoint scn 정보가 변경됨


이 복구 방법의 예외 tablespace 5가지가 있음 

system / sysaux / undotbs / users / example


[실습]




4. 임시 경로를 이용한 긴급 복구

백업 Data file 임시경로로 restore --> Data file 경로 변경 --> 백업없는 파일은 신규 생성 --> recovery --> DB OPEN 


> alter database rename file ' ' to ' ' ;

> alter database create datafile '원래경로' as '신규경로' ;

> recover datafile ;

> alter database open ;


[실습]










불완전 복구 (Incomplete Recovery)

- 논리적 장애 발생 시 사용 (명령어 장애)

- 장애난 파일만 과거로 돌리는 것이 아니라 모든 Data File을 과거의 백업 파일로부터 복원시킴

  Archive log 파일을 적용시켜서 장애 직전 시점까지 복구

- Redo Log File과 Control File은 현재 시점의 것을 사용해야 함

- 장애가 난 시점을 대략적으로 알거나 모르는 경우가 많기 때문에, 복구 작업이 실패할 경우가 높음

   따라서, 원본 파일은 그대로 두고 임시 경로를 복구 경로로 지정해서 복구하는 것을 권장




1. drop table로 삭제된 table 복구 (모든 데이터 파일 복원)

백업된 Data File 임시 경로로 복사 --> 현재 쓰고 있던 Redo Log File과 Control File 임시경로로 복사 

--> Parameter file 에서 Control File 위치 변경 --> MOUNT -->Data File, Redo Log File 위치 변경

--> 장애난 시점 전으로 recovery --> resetlogs로 DB OPEN 


> vi $ORACLE_HOME/dbs/initSID.ora 수정

> startup mount ;

> alter database rename file ' ' to ' ' ;

> recover database until time '장애시점 전 시각' ;        --> 특정 시간까지 복구 명령어

> alter database open resetlogs ;                              --> 불완전 복구 시 꼭 resetlogs로 open


※ resetlogs 옵션으로 open 

- 불완전 복구시 꼭 resetlogs로 DB open 해야한다. 

   Data file은 과거 시점의 SCN이고, 나머지 파일들은 현재 SCN 이기 때문에 SCN이 서로 달라서 open이 안됨

- 모든 log의 sequence 정보는 0으로 초기화됨 --> archive log는 더이상 복구에 사용할 수 없음

- Data file의 checkpoint SCN 정보는 open 시점의 SCN으로 업데이트

- 딕셔너리 Data file 정보와 Control file에 있는 Data file 정보를 비교해 

   Control file에 없는 파일을 가짜로 만들어 생성해서 open 됨

- resetlogs로 오픈하고 나서는 반드시 모든파일 다시 백업 받아야함, 이전 백업 파일들은 사용할 수 없는 경우가 대부분.


[실습]




2. drop table 복구 - 일부 파일만 복원하기

백업된 Data File 임시 경로로 복사 (필요한 파일만: system, sysaux, undotbs, 테이블들어있는 tablspace 

--> 현재 쓰고 있던 Redo Log File과 Control File 임시경로로 복사 

--> Parameter file 에서 Control File 위치 변경 

--> MOUNT -->Data File, Redo Log File 위치 변경 (필요없는 Data File은 offline drop) 

--> 장애난 시점 전으로 recovery --> resetlogs로 DB OPEN 


> vi $ORACLE_HOME/dbs/initSID.ora 수정

> startup mount ;

> alter database rename file ' ' to ' ' ;

> alter database datafile ' ' offline drop ;

> recover database until time '시각' ;

> alter database open resetlogs ;


이 복구 방법은 복구에 반.드.시 필요한 파일만 복사해 오고 나머지는 offline drop 

실제 복구에서도 모든 데이터파일을 복사하는데 시간이 많이 걸리므로 이 방법으로 복구하는 경우가 많음!!

잘못된 update나 delete 장애, drop user장애들도 이와같은 방법으로 복구 가능


[실습 - drop table]



[실습 - drop user]




3. 백업 없는 경우 drop table 복구

모든 과정은 위와 동일하지만 Data File 위치 변경할 때 백업이 없는 데이터 파일은

원래 경로에 있던 데이터파일 offline --> 새로 생성하기 --> 새경로의 데이터파일 online

해서 복구해야 한다. 이것 말고는 모든 과정은 동일.

실습에 자세한 예제와 과정이 설명되어있음. 실습참고하기.


> alter database datafile '원래경로' offline ;

> alter database create datafile '원래경로' as '새경로' ;

> alter database datafile '새경로' online ;


[실습]




4. drop tablespace 복구 - 백업 control file있을 경우

drop table 장애 복구마냥 기존방법으로는 복구할 수 없음 (현재의 컨트롤,리두 + 백업된 데이터파일)

why? drop tablespace 는 control filed 안에 있는 해당 테이블스페이스 정보를 삭제해버림, 기존 방법으로 하면





이런식으로 요상한 경로의 데이터파일이 만들어져 있다고 하는데 control file에 정보가 없어서 파일 이름이 저렇게 나옴

즉, 현재 사용되고 있던 control file에는 drop tablespace한 테이블 스페이스 정보가 없기 때문에 

현 시점의 control file은 복구에 사용할 수 없음! 그래서 백업된 control file로 복구!


백업된 데이터파일 + 컨트롤파일 임시경로로 복사 --> 현재 쓰고 있던 리두파일 임시경로로 복사

--> Parameter file 에서 Control File 위치 변경 --> MOUNT 

--> 데이터파일 + 리두로그파일 경로 변경 (사용안하는 데이터파일은 offline drop)

--> 장애나기 전 시간으로 recovery --> resetlogs로 DB OPEN


> vi $ORACLE_HOME/dbs/initSID.ora 수정

> startup mount ;

> alter database rename file ' ' to ' ' ;

> alter database datafile ' ' offline drop ;

> recover database until time '시각' using backup controlfile ;

> alter database open resetlogs ;


※ recover database until time ' ' using backup controlfile; 

복구에 사용되는 Control File이 Data File 보다 더 오래전 파일이라면 Data File SCN 정보가 더 최신이기 때문에

<old control file> 에러 발생하면서 복구가 안될 수 있으니까 옵션을 추가해

recover database until time ' ' using backup controlfile; 사용.

오라클이 우리가 설정하는 시간이나 until cancel 옵션으로만 복구 시점을 결정하게 됨.


이 명령어를 쳤을 때

auto --> archive log를 뒤져서 복구

아카이브 로그로 넘어가지 않고 아직 Redo Log 에 내용이 있을 경우에는 

CURRENT 상태인 리두로그 중 하나를 경로와 함께 적어주면 그 파일을 추적해 복구.

Sequence Number를 보면 알수 있음. ---> 자세한 내용은 7번 복구 참고


꼭,

Log applied.

Media recovery complete. 

가 떠야한다!


[실습]



그럼 해당 데이터파일 백업이 없을 경우는? (3번 장애를 응용해서 복구하면 됨)

[실습2]





5. drop tablespace 복구 - 백업 control file 없을 경우

백업받은 Data file과 Control file 모두 없을경우에는 

> alter database create datafile '원래경로' as '새경로' ;

명령어를 통해 문제가 되는 tablespace 즉, drop된 tablespace를 새로 만들면 된다.


[실습]





연습문제

장애발생시키기

여기서 drop된 tbl_gogak 테이블을 복구하기!






복구하기








'오라클 백업/복구' 카테고리의 다른 글

Log Miner  (0) 2013.01.31
Data File 장애 복구 3 - Undo Tablespace 복구  (0) 2013.01.31
Data File 장애 복구 1 - No Archive Log Mode 복구  (0) 2013.01.27
Parameter File 장애 복구  (0) 2013.01.27
Recovery 원리  (0) 2013.01.23