행위

RMAN + ASM환경 에서 HOT백업 복구

DB CAFE

thumb_up 추천메뉴 바로가기


1 ASM 환경에서 Hot Backup 후 Single DB 복구/구축[편집]

1.1 개요[편집]

  1. 12c이후 ASM 환경에서 RMAN으로만 백업 가능함
  2. RMAN + Hot Backup을 이용하여 백업 후 Single DB로 복구
  3. 환경구성
    * 필요한 VM
    - ASM 사용 환경 (Single ASM, RAC(ASM))
    - Single DB 구축할 VM (softonly로 설치)
    - RAC 환경인 경우 양쪽 Node 의 Archive Log 를 가져와야 함

2 = 백업 받을 File 확인[편집]

SQL) select file_name from dba_data_files;
FILE_NAME
-------------------------------------------------
+DATA/orcl/datafile/users.259.824961691
+DATA/orcl/datafile/undotbs1.258.824961691
+DATA/orcl/datafile/sysaux.257.824961689
+DATA/orcl/datafile/system.256.824961687
+DATA/orcl/datafile/sysaux.278.894653489
+DATA2/orcl/datafile/sysaux02.dbf
+DATA/orcl/datafile/sysaux.272.894653613
+DATA/orcl/datafile/sysaux
+DATA/orcl/datafile/mvtest0101.dbf
+DATA/orcl/datafile/mvtest0202.dbf
+DATA2/orcl/datafile/system.268.875036169

2.1 Begin Backup 수행[편집]

sqlplus "/as sysdba"
alter database begin backup;

2.2 SID 변경[편집]

$> . oraenv
ORACLE_SID = [ORCL1] ? +ASM1
The Oracle base remains unchanged with value /u01/app/oracle

2.3 File Copy 수행[편집]

$> asmcmd
ASMCMD> cp +DATA/orcl/datafile/users.259.824961691     /home/oracle/npa/users01.dbf
ASMCMD> cp +DATA/orcl/datafile/undotbs1.258.824961691 /home/oracle/npa/undotbs01.dbf
ASMCMD> cp +DATA/orcl/datafile/sysaux.257.824961689  /home/oracle/npa/sysaux01.dbf
ASMCMD> cp +DATA/orcl/datafile/system.256.824961687  /home/oracle/npa/system01.dbf
ASMCMD> cp +DATA/orcl/datafile/sysaux.278.894653489  /home/oracle/npa/sysaux02.dbf
ASMCMD> cp +DATA2/orcl/datafile/sysaux02.dbf /home/oracle/npa/sysaux05.dbf
ASMCMD> cp +DATA/orcl/datafile/sysaux.272.894653613  /home/oracle/npa/sysaux03.dbf
ASMCMD> cp +DATA/orcl/datafile/sysaux                /home/oracle/npa/sysaux04.dbf
ASMCMD> cp +DATA/orcl/datafile/mvtest0101.dbf        /home/oracle/npa/mvtest01.dbf
ASMCMD> cp +DATA/orcl/datafile/mvtest0202.dbf        /home/oracle/npa/mvtest02.dbf
ASMCMD> cp +DATA2/orcl/datafile/system.268.875036169 /home/oracle/npa/system02.dbf
- End Backup 수행
$> . oraenv
ORACLE_SID = [+ASM1] ? ORCL1
The Oracle base remains unchanged with value /u01/app/oracle
sqlplus "/as sysdba"
SQL) alter database end backup;

2.4 Control file Trace 로 내려 받기[편집]

SQL) alter backup controlfile to trace '/home/oracle/control.trc';

=== Pfile 받기 ===
<source lang=sql>
SQL) create pfile='/home/oracle/pfile.txt' from spfile;

2.5 Single DB에 백업한 설정 파일 복사[편집]

  • FTP 나 SSH로 파일 복사
  • 복사할 백업파일
  1. Single DB 구축할 VM에 Backup 받은 Datafile
  2. Controlfile Trace File
  3. Pfile
  4. Archive Log


2.6 Pfile 수정[편집]

  1. audit_file_dest 폴더를 생성해주어야 함.
  2. controlfile 이 이중화 할 경우 이중화 된 경로 까지 폴더를 생성 해주어야 함.

2.7 Control File 생성[편집]

  • Pfile을 불러오지 못하는 경우
SQL) startup nomount pfile='<pfile 경로>';
  • ControlFile Trace File을 확인 해보면
CREATE CONTROLFILE REUSE DATABASE "TEST"

로 되어 있습니다.

  • 기존에 있던 걸 다시 사용하는 것이 아닌 신규 DB로 구축하는 것 이기 때문에  REUSE -> SET으로 변경
-- nomount로 기동
STARTUP NOMOUNT;
-- 컨트롤 파일 생성
CREATE CONTROLFILE SET DATABASE "TEST" RESETLOGS  ARCHIVELOG
    MAXLOGFILES 192
    MAXLOGMEMBERS 3
    MAXDATAFILES 1024
    MAXINSTANCES 32
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/u01/app/oracle/oradata/test/redo01.log'  SIZE 50M BLOCKSIZE 512,
  GROUP 2 '/u01/app/oracle/oradata/test/redo02.log'  SIZE 50M BLOCKSIZE 512,
  GROUP 3 '/u01/app/oracle/oradata/test/redo03.log'  SIZE 100M BLOCKSIZE 512,
  GROUP 4 '/u01/app/oracle/oradata/test/redo04.log'  SIZE 10M BLOCKSIZE 512,
  GROUP 5 '/u01/app/oracle/oradata/test/redo05.log'  SIZE 10M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
  '/u01/app/oracle/oradata/test/system01.dbf',
  '/u01/app/oracle/oradata/test/sysaux05.dbf',
  '/u01/app/oracle/oradata/test/users01.dbf',
  '/u01/app/oracle/oradata/test/undotbs01.dbf',
  '/u01/app/oracle/oradata/test/system02.dbf',
  '/u01/app/oracle/oradata/test/sysaux01.dbf',
  '/u01/app/oracle/oradata/test/sysaux02.dbf',
  '/u01/app/oracle/oradata/test/sysaux03.dbf',
  '/u01/app/oracle/oradata/test/sysaux04.dbf',
  '/u01/app/oracle/oradata/test/mvtest01.dbf',
  '/u01/app/oracle/oradata/test/mvtest02.dbf'
CHARACTER SET AL32UTF8
;

2.8 복구[편집]

  • Recover(Archive Log 적용)
  • Archive Log Dest 를 적용 시킨 후 해당 위치에 Archive Log 를 Move 해놓으면 Recover 시 따로 경로를 지정 안해도 됨
alter system set log_archive_dest_1='LOCATION=/u01/app/oracle/arch' scope=both;
recover database using backup controlfile
ORA-00279: change 55307193 generated at 11/20/2015 00:52:18 needed for thread 1
ORA-00289: suggestion : /u01/app/oracle/oradata/orcl/1_3_896153147.dbf
ORA-00280: change 55307193 for thread 1 is in sequence #3
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
  • AUTO (% 자동으로 Archive Log 적용)
  • 중간에 Archive Log가 비어있으면 Error 발생함
  • Archive Log를 다 적용 시켰는데도 Archive Log 를 찾는것은 기존 Redo 에 있는 내용을 찾는 것임.
  • 기존 Redo 가 있으면 Redo Log를 적용시켜주면 되고, 없다면 아래의 명령어로 CANCEL 시켜줍니다.
SQL) recover database until cancel using backup controlfile
ORA-00279: change 55307193 generated at 11/20/2015 00:52:18 needed for thread 1
ORA-00289: suggestion : /u01/app/oracle/oradata/npa112db/1_3_896153147.dbf
ORA-00280: change 55307193 for thread 1 is in sequence #3
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
  • CANCEL Media recovery cancelled.
    - 위와 같은 문구가 나왔다면 아래의 명령어로 DB를 OPEN 해줌
SQL> alter database open resetlogs;
Database altered.

-- 상태 확인.
SQL> SELECT INSTANCE_NAME,VERSION,STATUS FROM V$INSTANCE;
INSTANCE_NAME     VERSION     STATUS
-----------------     ----------   ------------
orcl                         11.2.0.2.0     OPEN