Clone DB (drop table 복구)

- 기존 testdb 에서 테이블을 생성하고 실습을 위해 drop 시킵니다.

- 또한 운영중인 DB 의 Redo log file 을 복사할 수는 없기에 Redo log group 의 두배 정도의 횟수만큼 switch 를 일으켜 줍니다. 그래서 아카이브 파일에 정보가 기록되게 하는 것 입니다.

SQL>alter system switch logfile;

- Clone DB 용 파라미터 파일을 testdb 파라미터 파일에서 복사한 후 아래 내용을 수정해 줍니다.

Control_files= '/data/temp2/control01.ctl'

db_name='testdb2'

 

- 예전에 백업해 두었던 데이터 파일을 temp2 로 복사 합니다.

 

- testdb2 를 위한 컨트롤 파일을 생성하기 위해 testdb DB 에서 컨트롤 파일 생성을 위한 Trace 를 생성 합니다.

- Redo log file 이 존재 하지 않기에 resetlogs 모드로 편지을 해줍니다.

(resetctl.sql)

 

$export ORACLE_SID=testdb2

- SID 값을 변경하여 testdb2 DB로 접속할 수 있게 파라미터를 변경해 줍니다.

 

 

- TESTDB2 로 접속한 것을 볼 수 있습니다.

- 그리고 트레이스를 실행시켜 mount 단계까지 올려줍니다.

 

- recover 명령어를 통해 불완전 복구를 수행 시키고 resetlogs 옵션으로 DB 를 open 시킵니다.

- Data가 복구된 것을 확인 할 수 있습니다.

- 이제 운영 DB에 Data를 다시 넣기 위하여 Clone DB 에서 export 를 수행 합니다.

 

 

- 다음은 testdb 즉 운영DB에 다시 import 시키는 화면 입니다. 이 작업 전에

$export ORACLE_SID=testdb 명령어를 주어 운영DB 로 접속할 수 있게 환경을 맞춰줘야 합니다.

$imp scott/tiger file=tt100.dmp ignore=y

명령어만 주게되면 다음과 같은 오류를 볼 수가 있는데 이는 서로 다른 계정으로 imp 를 시킬 때 발생하는 오류입니다.

- 다음과 같이 fromuser=scott touser=scott 옵션을 주어 scott 계정으로 table을 import 시키게 만들어 주어야 합니다.

- 만약 system 계정으로 import 시키면 scott 계정의 table이 아닌 system.tt100 으로 입력되기 때문에 주의 하셔야 합니다.

- 다음과 같이 제대로 데이터가 입력된 것을 확인 할 수 있습니다.

Imcomplete Recovery

 

- 1일에 백업을 받았기에 2일에 생성한 테이블 스페이스와 컨트롤 파일에 대한 백업이 존재하지 않음

- Archive log mode

- Close Backup

- test table 에 대한 tablespace Backup 이 존재하지 않음

- 우선 모든 데이터 파일과 컨트롤 파일, 리두로그 파일을 백업합니다.

- Test 를 위하여 테이블 스페이스를 만들고 데이터를 입력 합니다.

- 현재 test 테이블 스페이스가 있기 때문에 test2 를 만들겠습니다.

 

- 백업이 없는 상태에서 Tablespace 를 drop 을 합니다.

 

- drop tablespace 의 경우 alert_SID.log 파일에서 삭제된 시간을 확인 할 수 있습니다.

 

- 혹은 log miner 를 이용하여도 언제 생성된 테이블이 드롭되었는지도 알 수 있습니다.

 

- 이제 DB를 내리고 Data file 과 Control file 만 Backup 된 것을 가져옵니다.

- Redo log file 은 현재 사용하고 있는 것을 가져와야 합니다.

- 이제 파라미터 파일에서 컨트롤 파일의 경로를 temp2/control_0922.ctl 로 변경해줍니다.

 

- DB 를 mount 상태까지 올린 다음 컨트롤 파일에 기록되어 있는 데이터 파일의 경로를 바꾸어 주어야 합니다.

- 이때 복구가 필요하지 않는 파일은 offline drop 을 이용하여 다시 원래 DB 로 원복 해줄 때 영향이 없도록 해줍니다.

- Redo log 파일의 경로 또한 바꿔줘야 합니다.

-

 

- 이제 복구를 합니다.

SQL>recover database until time '시간' using backup controlfile;

  • 여기서 시간은 alert_SID.log 파일에 기록된 시간 혹은 로그 마이어를 이용하여 찾은 시간을 넣어주시면 됩니다.

     

- 그리고 여기서 현재 current 인 Redo log 파일의 경로를 넣어주시면 됩니다.

 

- 현재 문제가 되는 Tablespace 를 보여 줍니다.

NAME

--------------------------------------------------------------------------------

/data/temp2/system01.dbf

/data/temp/test.dbf

/data/temp2/sysaux01.dbf

/data/temp/users01.dbf

/data/temp/example01.dbf

/data/temp/insa.dbf

/data/temp/haksa01.dbf

/data/temp2/undo01.dbf

/home/oracle/product/10g/dbs/UNNAMED00009 <- 새로 생성됨

 

9 rows selected.

 

SQL> alter database create datafile '/home/oracle/product/10g/dbs/UNNAMED00009'

2 as '/data/temp2/test2.dbf';

 

Database altered.

 

SQL>

 

- 다시 한번 복구 명령어를 실행해 줍니다.

 

SQL>alter database open resetlogs; 명령어를 이용하여 DB 를 open 시킵니다.

이 때 주의할 점은 resetlogs 로 open 을 하게되면 redo log 의 scn 이 초기화가 되어 다시는 복구를 위하여 사용할 수가 없습니다. 그렇기 때문에 redo 로그 파일도 오류가 발생한 시점에서 사용하기 전에 다시한번 따로 백업을 하여 올렸을 때 다시 사용할 수 있도록 해야 한다는 것입니다.

 

- 또한 DB 를 resetlogs 로 올리기 전에 복구를 위한 사항들을 모두 확인하고 올리시기를 바랍니다.

 

 

정상적으로 복구가 된 것을 확인 할 수 있습니다.

- 참고도서 -

실전! 오라클 백업과 복구
국내도서>컴퓨터/인터넷
저자 : 서진수
출판 : 생능출판사 2010.09.06
상세보기

'Oracle > Backup&Recover' 카테고리의 다른 글

Datapump Expdp (first)  (0) 2011.09.28
Export and Import (특정 Tablespace)  (0) 2011.09.28
Log Miner 에 Archive log file 등록하는 script  (0) 2011.09.27
Log Miner && Supplemental Logging 설정  (0) 2011.09.27
Open Backup  (0) 2011.09.27

+ Recent posts