불완전 복구 - DML 관련 장애복구.

 

* 불완전 복구(Icomplete Recover)란??

 : 장애가 발생했을 경우에 현재 시점까지 전부 복구하는 것이 아니라 장애가 발생한 과거의 특정 시점까지만 복구하는 것.

영화 if only를 예를 들어 설명. 사랑하는 남자와 여자가 있는데, 여자가 교통사고 발생하여 여자 주인공이 drop 되었다. 남자가 후회를 하다가 자고 일어나니 과거로 돌아갔다. 이 때 과거로 돌아갈 때는 여자만 과거로 돌아가면 안되고 남자,여자,행인 모두가 과거로 돌아가야 하며, 여자가 drop되기 직전의 상태까지만 복구를 해야한다.

 

 

case1. 잘못된 update 수행 후 commit 수행하여 장애 발생 - 임시경로 사용하여 복구.

 (no archive mode/ archive mode 둘 다 상관 없음.) (저는 archive mode 상태로 했습니다.)

 

[ 백 업 하 기 ]

1.datafile , logfile, controlfile의 경로를 조회.

 

2. db를 종료 후 full backup을 수행.

 

[ 장 애 발 생 ]

1. db를 open한 뒤, 테스트용 데이터를 생성.

 

2. 테이블에 데이터를 insert한 후, commit.

 

3. 현재 리눅스 시간을 조회해서, 기억해 둔다.

 

4. update시 where절을 누락해서 전체 데이터가 'DDD'로 업데이트 되었는데, commit치는 바람에 rollback할 수 없는 장애가 발생함.

 

5. rollback을 수행해도 데이터가 돌아오지 않는다.

 

 

[ 해 결 ]

1. 복구를 하기 위해 DB를 종료한 후 복구에 필요한 파일들을 임시 디렉토리에 복사.

 datafile들은 백업폴더에서 복사하고, control file과 redo log file들은 현재 사용중인 폴더에서 복사해온다. (data file에 장애발생했으므로)

 

2. pfile로 변경해서 실습. (mount로 startup후 spfile로부터 pfile을 생성해서-> db종료후 spfile을 지움.

 

3. parameter file에 있는 control file의 경로를 변경. (control file만 datafile, redologfile과 경로변경해주는 방식이 다름.)

- control file은 1개만 있어도 되므로 control02.ctl 은 백업에서 제외.

 

4. db를 껐다 켜서 변경된 것을 확인한다.

 

5. data file의 위치를 복구 경로로 변경 : alter database rename file '경로' to '바꿀경로'

 ** 이때 주의사항!! : system, sysaux, undotbs, users, example 파일 말고도, 추가로 data file을 만들어 준 것이 있다면, 그것도 *.dbf 처럼 모두 복사 해놨었으므로, 그것도 rename 으로 경로를 변경해줘야 한다.**

 

6. logfile의 위치를 복구 경로로 변경 : alter database rename file '경로' to '바꿀경로'

 

7. 복구 명령을 내렸더니 아까 경로를 변경해주지 않은 data file때문에 old control file 에러가 뜸. (내가 실수해서 에러뜬 화면 해결중)

 

8. datafile을 다시 rename해서 경로를 변경해 준 후, recover database until time 으로 복구해준다.

 (until time 시간 부분을 추가하면 그때까지만 복구를 한다.)

 

9. db를 일반 방식으로 open하려고 하면, data file들과 redo log file, control file의 SCN이 다르기 때문에 open되지 않으므로,

alter database open resetlogs; 를 통해 resetlogs 모드로 open한다.

** resetlogs모드 : control file의 번호를 data file의 번호와 맞춰주고, redo log를 초기화한다.

 

 

 

 

case2.잘못된delete수행후 commit 수행하여 장애발생 - 필요한 파일만 사용하여복구.

 

[ 백 업 하 기 ]

 1. datafile, controlfile, redologfile을 조회한다.

 

2. db를 끄고 전체 백업을 받는다. 

 

3. db를 startup한다.

 

[ 장 애 발 생 ]

1. user tablespace에 테스트용 데이터를 생성한다.

 

2. 복구할 시간을 확인 한 후, 데이터를 delete하는 장애를 발생시킨다.

 

 

[ 해 결 ]

 1. db를 끄고, 복구할 임시 경로 /data/temp2를 만든 후, 파라미터 파일에서 control file 경로를 수정한다.

 

2. data file은 반드시 필요한 파일만 (system, sysaux, undotbs, 장애데이터가 들어있는 파일) 복사 한 후, control file과 redo log file도 복사.

 

3. mount 상태로 db를 open.

 

4. control file을 조회해보면 변경된 것을 확인 할 수 있고, 변경전 data file의 경로를 조회한다.

 

5. data file 의 경로를 rename 하고, 복구에 필요없는 data file은 offline drop 시킨다.

 

6. 변경전 logfile의 경로를 조회한 후, rename 해준다.

 

7. until time 옵션을 이용해서 해당 시간으로 복구한 뒤, resetlogs 옵션을 이용해 db를 open한다. -> 테이블 조회해보니 복구되었다.

 

Print Friendly and PDF Posted by JJ*
: