IT기술/Oracle

10 무정지 상태에서의 응급 복구

dobbby 2013. 12. 26. 09:32
반응형

10.1 Clone DB 와 exp/imp 를 이용한 drop table 복구


Clone DB 생성 개념

TESTDB (운영)                                    TESTDB2 (복구)

Parameter File        복사        →            Parameter File

Control File            재생성                 Control File

Data File                백업 파일             Data File

Redo log File          아카이브              Redo log File


작업순서

1. 장애상황 발생

 1) 테이블 스페이스 생성

 2) 테이블 생성 후 데이터 입력

 3) 테이블 삭제

2. Clone DB 용 파라미터 파일 생성 (pfile 사용)

3. 백업 데이터 파일 복원

4. 컨트롤 파일 재생성

5. 장애 난 시점 직전까지 시간 기반 복구로 테이블 복구

6. export 수행 후 운영 DB로 import 수행 (또는 DB Link 사용)

7. 복구 확인


복구 순서

1. 복구 서버(testdb2)용 파라미터 파일 생성

$ cd $ORACLE_HOME/dbs

$ cp inittestdb.ora inittestdb2.ora


db_name 과 control_files 값을 clone db 값으로 변경

$ vi inittestdb2.ora

db_name=testdb2


control_files=("/data/temp/clone/control01.ctl",

"/data/temp/clone/control02.ctl",

"/data/temp/clone/control03.ctl"

)


2. control file 생성

control file 을 생성하려면 데이터 파일이 존재해야 하므로 백업파일을 복원한다.

$ mkdir -p /data/temp/clone

$ cp /data/backup/close/*.dbf /data/temp/clone/

$ exit


SYS> select instance_name from v$instance ;

SYS> alter database backup controlfile to trace as '/app/oracle/re.sql' ;

SYS> !

$ vi /app/oracle/re.sql


STARTUP NOMOUNT

CREATE CONTROLFILE SET DATABASE "TESTDB2" RESETLOGS  ARCHIVELOG

    MAXLOGFILES 16

    MAXLOGMEMBERS 3

    MAXDATAFILES 100

    MAXINSTANCES 8

    MAXLOGHISTORY 292

LOGFILE

  GROUP 1 (

    '/data/temp/clone/redo01_a.log',

    '/data/temp/clone/redo01_b.log'

  ) SIZE 50M BLOCKSIZE 512,

  GROUP 2 (

    '/data/temp/clone/redo02_a.log',

    '/data/temp/clone/redo02_b.log'

  ) SIZE 50M BLOCKSIZE 512,

  GROUP 3 (

    '/data/temp/clone/redo03_a.log',

    '/data/temp/clone/redo03_b.log'

  ) SIZE 50M BLOCKSIZE 512

-- STANDBY LOGFILE

DATAFILE

  '/data/temp/clone/system01.dbf',

  '/data/temp/clone/sysaux01.dbf',

  '/data/temp/clone/test01.dbf',

  '/data/temp/clone/users01.dbf',

  '/data/temp/clone/example01.dbf',

  '/data/temp/clone/undo01.dbf'

CHARACTER SET KO16MSWIN949


$ export ORACLE_SID=testdb2

$ sqlplus / as sysdba ;


SYS>@/app/oracle/re.sql

SYS> select name from v$controlfile ;


3. drop 된 테이블 복구하기

SQL> recover database until time '2013-12-26:16:18:26' using backup controlfile ;

auto


SQL> alter database open resetlogs ;

SQL> select instance_name from v$instance ;

SQL> select count(*) from scott.gogak ;

복구 완료


4. 복구된 테이블을 운영서버 (testdb) 로 이동하기

$ export ORACLE_SID=testdb2

$ exp scott/tiger file=gogak.dmp tables=gogak


$ export ORACLE_SID=testdb

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




10.2 Clone DB 를 이용한 drop tablespace 복구

Alert log 에서 삭제된 시간 확인


작업순서 요약

1) 복구 서버용 파라미터 파일 생성

2) 백업 데이터 파일 복원

3) 컨트롤 파일 재생성

4) 불완전 복구 시작

5) test01.dbf 파일 내용 수정하고 다시 복구 시작

6) 복구 완료되면 export 후 운영 서버에 import 수행


위의 2번 과정까지 똑같이 수행 후

3번의

SQL> recover database until time '2013-12-26:16:18:26' using backup controlfile ;

auto


하면 test01.dbf 파일이 없어서 에러가 난다.


SQL> select name from v$datafile ;

SQL> alter database create datafile '/app/oracle/product/11g/dbs/UNNAMED00006'

  2     as '/data/temp/clone/test01.dbf' ;


SQL> recover database until time '2013-12-26:16:18:26' using backup controlfile ;

auto


나머지 과정 동일하게 수행



10.3 Clone DB 로 복구 후 DB Link 이용해서 이동하기









반응형