불완전 복구 - DDL 관련 장애복구(1-2) 

truncate table명령으로 삭제된 table 복구.

 

[ 백 업 하 기 ]

 1. datafile, control file, redo log file을 조회.

 

2. db를 종료 후 전체 백업을 받는다.

 

3. db를 startup 한다.

 

[ 장 애 발 생 ]

1. tablespace 생성하고 table 생성한 뒤  값을 insert한다.

 

2. 복구에 필요한 현재 리눅스 시간을 조회한 후, datafile을 삭제한다.

 

3. table을 truncate해서 사용하고 있던 공간과 데이터를 전부 삭제한다.

(truncate : 테이블의 데이터를 전부 삭제하고, 사용하고 있던 공간도 반납함. delete는 공간이 그대로 존재해서 용량이 그대로지만, truncate는 용량이 줄어든다.)

 

[ 해 결 ]

1. db를 끄고 임시경로에 파일을 복사하려고하는데, db에 무리가 가서 강제로 db가 나가버렸다.

-> 다시 startup을 해도 service handle not initialized 에러가 나면서 켜지지 않는데, 이 에러는 이 전에 끈 작업이 정상적으로 꺼지지 않아서 뜨는 에러이다.

-> 이럴 땐, quit해서 접속을 끄고, 다시 sys로 접속하면 정상적으로 접속된다.

 

2. 다시 db를 끄고, 임시폴더에 필요한 파일들을 복사한다.

 

3. 파라미터 파일을 열어서 control file의 경로를 수정해준다.

 

4. mount로 db를 open후, 변경된 control file경로를 확인하고, 변경전의 data file과 redolog file의 경로를 조회한다.

 

5. 이 장애 복구에서 주의할 점은, table만 삭제한 게 아니라, data file자체를 rm명령어로 지워버렸기 때문에, 시간을 되돌려 복구를 해도 복구가 되지 않으므로, 데이터파일을 생성하면서 새로운 경로로 지정해준다.

 

6. 해당 data file을 제외한, 나머지 데이터파일들의 경로를 변경해준다.

 

7. redolog file의 경로를 변경해준다.

 

8. 데이터파일을 삭제하기 전에 조회했던 리눅스 시간으로 recover 복구한 뒤 resetlogs옵션으로 db를 open한다.

Print Friendly and PDF Posted by JJ*
: