Oracle Database TIP
실제 상황 테이블 삭제시 복구(Oracle 8i) 9 2 99,999+

by 구루비 RECOVERY RESTORE 불완전복구 [2002.06.03]


  아래는 Oracle 8i 버전에서의 예제 입니다.

  지금 실제로 서비스중인 DB가 있습니다. DB의 케렉터셋은 UTF8이고 이 DB에는 일본어와, 한국어, 영어 데이터가 들어가 있습니다.

  이 DB의 전체 백업은 2001년 5월 21일날 받아 두었습니다. 그리고 그 이후에 아카이브모드로 해서 아카이브파일들을 백업받고 있었죠..

  그러던 어느날(2002년 5월 29일) 신입사원이 테스트DB에서 작업을 하다가 서비스중인 DB에 접속할 일이 있어서..잠시 접속을 해서 작업을 하던중.. 실수로 테이블을 삭제 시켰습니다.

 
 SQL> DROP TABLE kpc_ctnt;
    

  이론..큰 실수를 해 버렸습니다. 긴급사항이 발생했습니다. kpc_ctnt테이블에는 실제 서비스중인 데이터가 2000rows가 넘게 있었거든요..

  근데 이 DB의 특징은 export받은 파일을 import하면 웹어서 일본어가 깨진다는 거죠.. DB를 설치할때 뭘 잘못해났는지 모르겠지만.. 이거 exp파일을 import할 수가 없는 상황이었습니다.

  그래서 생각한 것이 불완전 복구(Incomplete Recovery) 였습니다. 저희 대리님께서 앞장을 서서 복구를 시작 하셨습니다. 우선 운영중인 웹 사이트 서비스를 죽이고..DB를 죽이고.. 전체 백업을 받았습니다.

 
cp -R ctldbf /datas/
cp -R defdbf /datas/
cp -R logdbf /datas/
cp -R kpcdbf /datas/
cp -R tmpdbf /datas/
cp -R oradata /datas/
cp -R sysdbf /datas/
cp -R kpctst /datas/ 
    

  모든 데이터파일과 control파일, 리두로그 파일, 등등..다른 하드디스크로 복사를 했죠.. 그리고 데이터베이스를 마운트 시켰습니다.

 
SVRMGR> STARTUP MOUNT
    

  마운트 상태에서 2001년 5월 21일자 데이터파일들를 RESTORE 시켰습니다.

 
cp -R defdbf /datas/
cp -R kpcdbf /datas/
cp -R tmpdbf /datas/
cp -R oradata /datas/
cp -R sysdbf /datas/ 
    

  그리고 나서 타임베이스로 Incomplete Recovery를 수행 시켰습니다.

 
SVRMGR> RECOVER DATABASE UNTIL TIME '2002-05-29:00:00:00'; 
    

  명령이 잘 수행이 되더라구요.. 오라클에서 알아서 아카이브 파일들을 찾아서 복구를 시킵니다. AUTO로 할건지.. 그냥 엔터키를 치면서 하나하나씩 아카이브 파일을 복구 시킬껀지. 그냥 CANCEL을 쳐서 중간에 복구를 끝마칠수도 있더라구요..

  그래서 복구가 다 끝난지 알았는데.. 맨 마지막 아카이브 파일을 읽는 순간 에러가 발생하더라구요. 이유를 알고 봤더니.. 2001년 5월 21일 풀 백업을 받아놓은 상태에서 테이블 스페이스가 4개가 더 생겼더라구요.. 물리적으로 DBF 파일도 4개가 더 생겼구요..

  그 에러를 해결하기 위해서.. 데이터파일을 복사해서 만들어 주었죠..사실 이게 정확한 방법인줄은 잘 모르겠고 하두 답답해서 우리대리님께서 시도 하시더라구요..

 
-- recreate 작업 수행
SVRMGR> ALTER DATABASE CREATE DATAFILE
        '/datas/kpcdbf/kpc_context01.dbf' 
        AS '/datas/kpcdbf/kpc_context01.dbf';  
    

  이렇게 해서 새로생긴 데이터파일들을 모두 복사했습니다. 명령어를 수행하고..불완적 복구를 다시 시도했습니다.

 
SVRMGR> RECOVER DATABASE UNTIL TIME '2002-05-29:00:00:00';  
    

  아카이브 파일들을 하나씩 복구시키더니.. 무사히 완료되었다고 메세지가 떴습니다. 그리고 모든파일들을 동기화 시키기 위해서 RESETLOGS옵션으로 데이터베이스를 오픈했습니다.

 
SVRMGR> ALTER DATABASE OPEN RESETLOGS; 
    

  그리고 나서 DB를 가동하니 예전의 데이터가 모두 복구가 되었습니다. 다시 데이터베이스를 shutdown하고.. 데이터베이스 FULL Backup를 받았습니다. 무엇보다 중요한것은 archive mode로 운영하고..FULL백업을 자주 받아 두는거 같습니다.

- 강좌 URL : http://www.gurubee.net/lecture/1402

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

by test [2006.01.26 09:52:49]
그 신입사원 꽤 난감했겠네용...^^

by 김법용 [2007.06.22 09:35:15]
엔터치고 사고친걸 알았을순간..직장근육이 움찔했을겁니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입