백업에서 복원

원본 데이터베이스의 데이터베이스 백업에서 Target Database로 데이터를 복원합니다.

대상 데이터베이스에 Oracle Database Backup 설치

oci_install.jar 파일을 대상 데이터베이스 호스트로 복사하고 명령을 실행하여 대상에 Oracle Database Backup을 설치합니다.

소스 데이터베이스에 Oracle Database Backup Cloud Service 설치
  1. 배스천 호스트를 통해 대상 데이터베이스 호스트로 oci_install.jar 파일을 복사하고 압축을 해제합니다.
    BASTION_IP=BASTION_IP # public IP
    DB_HOST=DB_HOST # private IP
    
    scp -o ProxyCommand="ssh -W %h:%p
    opc@${BASTION_IP}" oci_install.jar 
    opc@${DB_HOST}:~/
    
    ssh -J opc@${BASTION_IP} opc@${DB_HOST} 'sudo chown oracle:oinstall oci_install.jar; sudo mv oci_install.jar
    /home/oracle/'
  2. 배스천 호스트를 통해 OCI 대상 데이터베이스에 SSH로 접속하고 oracle 사용자로 전환합니다.
    ssh -J opc@${BASTION_IP} opc@${DB_HOST}
    sudo su - oracle
  3. 현재 전자 지갑을 백업하고 대상 데이터베이스에 전자 지갑을 설치합니다.
    mv $ORACLE_HOME/data/wallet $ORACLE_HOME/data/wallet_bck
    mkdir -p $ORACLE_HOME/data/wallet
    unzip wallet.zip -d $ORACLE_HOME/data/wallet/
  4. Database Cloud Backup Module 명령을 실행하여 라이브러리를 설치하고 config 파일을 만듭니다.
    ORACLE_HOME 변수가 다를 수 있지만 이 명령은 소스 데이터베이스에 Oracle Database Backup Cloud Service를 설치하기 위해 실행한 명령과 동일합니다.
    java -jar oci_install.jar \
    -host https://objectstorage.region.oraclecloud.com \
    -pubFingerPrint wallet_public_key_fingerprint \
    -tOCID tenancy_OCID \
    -uOCID user_OCID \
    -cOCID compartment_OCID \
    -libDir $ORACLE_HOME/lib \
    -walletDir $ORACLE_HOME/data/wallet \
    -pvtKeyFile $ORACLE_HOME/data/wallet/oci_pvt \
    -bucket bucket_name \
    -configFile ~/config
    
    config 파일이 oracle 유저의 home 폴더에 나타납니다.
  5. SID_NAME를 사용하여 원래 대상 데이터베이스 SPF 파일을 백업합니다.
    원본 대상 데이터베이스 SPF 파일을 백업하지 않으면 RMAN는 이 파일을 사용하여 백업을 복원하고 실패합니다.
    mv $ORACLE_HOME/dbs/spfileSID_NAME.ora $ORACLE_HOME/dbs/spfileSID_NAME.ora.bck

대상 데이터베이스에서 백업 저장 영역 구성

대상 데이터베이스에서 백업 SBT_TAPE 저장 장치를 구성합니다.

  1. RMAN 대상 명령을 실행합니다.
    rman target /
  2. 대상 데이터베이스에서 백업 SBT_TAPE 저장 장치를 구성합니다.
    ORACLE_HOME 환경 변수를 사용하여 SBT 라이브러리를 정의합니다.
    RMAN> CONFIGURE CHANNEL DEVICE TYPE 'SBT_TAPE' PARMS 'SBT_LIBRARY=ORACLE_HOME/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/home/oracle/config)';
    

DBID 설정 및 백업에서 SPF 파일 복원

RMAN 명령을 실행하여 DBID 및 암호 해독(decryption) 암호를 설정하여 백업에서 SPF 파일을 복원합니다. DBID를 설정할 때는 RMAN을 사용하여 대상 DBID를 소스 DBID로 바꿉니다.

  1. DBID(데이터베이스 ID)를 설정합니다.
    RMAN> run {
    shutdown immediate;
    set dbid DBID number;
    STARTUP FORCE NOMOUNT;
    }
  2. 암호 해독 암호(암호화에 사용된 암호)를 설정하고 백업에서 SPF 파일을 복원합니다.
    RMAN> SET DECRYPTION IDENTIFIED BY password;
    RMAN> set controlfile autobackup format for device type sbt to '%F';
    RMAN> run {
      allocate channel c1 device type sbt PARMS 'SBT_LIBRARY=ORACLE_HOME/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/home/oracle/config)';
      restore spfile from autobackup;
    }
  3. RMAN을 종료합니다.

감사 파일에 대한 디렉토리 생성

감사 파일의 대상 디렉토리를 만듭니다.

기본 위치는 /u01/app/oracle/admin/$ORACLE_SID/adump입니다. 복원된 spfile에서 audit_file_dest 문자열을 검색하여 원래 데이터베이스에서 사용하는 설정을 확인할 수 있습니다.

spfile는 문자열이 제대로 구문 분석되어야 하는 이진 파일입니다. 그러나 간단한 grep이 전체 경로를 제공하지 못하도록 줄 바꿈이 있을 수 있습니다. 문자열의 -s "" 옵션은 줄바꿈을 제거하고 sed 명령은 audit_file_dest 뒤에 있는 텍스트를 구문 분석합니다. sed 명령은 non-greedy 정규 표현식을 처리하지 않으므로 파일 끝을 자르는 데 awk 명령이 필요합니다.

  • 추가된 xargs 명령으로 폴더를 생성합니다.
    strings -s "" ${ORACLE_HOME}/dbs/spfile*.ora | sed -E "s|.*audit_file_dest='(.*)'.*|\1|" | awk -F"'" '{print $1}' | xargs mkdir -p 

데이터베이스 복원 및 복구

RMAN를 사용하여 백업에서 제어 파일을 복원한 다음 데이터베이스를 복원 및 복구합니다. RMAN은 아카이브된 리두 로그를 사용하여 데이터베이스를 recovery합니다.

  1. RMAN을 열고 백업에서 Control File을 복원합니다. 이전에 설정한 DBID 번호 및 해독 비밀번호를 사용합니다.
    Rman target /
    RMAN> set dbid DBID number;
    RMAN> STARTUP FORCE NOMOUNT;
    RMAN> SET DECRYPTION IDENTIFIED BY password;
    RMAN> set controlfile autobackup format for device type sbt to '%F';
    RMAN> run {
    allocate channel c1 device type sbt PARMS 'SBT_LIBRARY=ORACLE_HOME/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/home/oracle/config)';
      restore controlfile from autobackup;
      alter database mount;
    }
  2. RMAN을 사용하여 데이터베이스 복원 및 복구
    RMAN> run {
    CONFIGURE CHANNEL DEVICE TYPE 'SBT_TAPE' PARMS 'SBT_LIBRARY=ORACLE_HOME/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/home/oracle/config)';
    RESTORE DATABASE;
    RECOVER DATABASE;
    }
    RMAN이 백업에서 마지막으로 아카이브된 리두 로그를 적용하여 더 이상 로그를 찾을 수 없는 경우 다음과 유사한 메시지가 나타납니다. unable to find archived log
  3. resetlogs를 사용하여 데이터베이스를 엽니다.
    RMAN> ALTER DATABASE OPEN RESETLOGS;
  4. 접속을 수신할 대상 데이터베이스를 준비합니다.
  5. 정적 리스너를 생성하기 위해 리스너 구성을 편집하여 TNS 리스너를 복원합니다.
    nano $ORACLE_HOME/network/admin/listener.ora
  6. 다음 섹션을 TNS 리스너에 추가하여 소스 데이터베이스의 ORACLE_HOME 및 CDB 이름을 정의합니다.

    ORACLE_HOME를 경로 값 ORACLE_HOME 및 SID_NAME로 소스 데이터베이스의 서비스 이름(CDB 이름)으로 바꿉니다.

    SID_LIST_LISTENER=
      (SID_LIST=
        (SID_DESC=
          (ORACLE_HOME=ORACLE_HOME)
          (SID_NAME=SID_NAME))
      )
    
  7. tnsname 파일을 편집합니다.
    nano $ORACLE_HOME/network/admin/tnsnames.ora
  8. 도메인 이름 없이 소스 데이터베이스의 SID 이름과 일치하도록 SERVICE_NAME를 편집합니다.
    (SERVICE_NAME = SID_NAME)
  9. 리스너를 재시작합니다.
    $ORACLE_HOME/bin/lsnrctl stop
    $ORACLE_HOME/bin/lsnrctl start
    $ORACLE_HOME/bin/lsnrctl status
    
데이터베이스에 액세스할 수 있어야 합니다.