RMAN 백업을 사용하여 객체 스토리지에서 데이터베이스 복구

이 문서에서는 오브젝트 스토리지에 저장된 RMAN(Recovery Manager) 백업을 복구하는 방법에 대해 설명합니다.

필요 조건

다음이 필요합니다.

가정

아래 절차는 다음과 같이 가정합니다.

  • 복원된 데이터베이스를 호스트하기 위한 새 DB 시스템이 생성되었으며 새 DB 시스템에 다른 데이터베이스가 존재하지 않습니다. 기존 데이터베이스가 있는 DB 시스템으로 복원할 수 있지만 이 항목의 범위를 벗어납니다.
  • 원본 데이터베이스가 손실되었으며 남아 있는 모든 백업은 최신 RMAN 백업입니다. 이 프로시저에서는 DB 시스템(데이터베이스 포함)이 더 이상 존재하지 않는다고 가정합니다.

    주:

    최신 백업에 포함되지 않은 데이터는 모두 손실됩니다.
  • 마지막 백업 시 원래 데이터베이스에서 사용된 Oracle Wallet 및/또는 암호화 키를 사용할 수 있습니다.
  • RMAN 백업에는 가장 최근의 백업을 기준으로 하는 제어 파일 및 spfile의 복사본과 완전 데이터베이스 복구를 수행하는 데 필요한 모든 데이터 파일 및 archivelog 백업이 포함됩니다.
  • 복원 중에는 RMAN 카탈로그가 사용되지 않습니다.

DB 시스템에 스토리지 설정

  1. DB 시스템에 SSH로 접속합니다.
    ssh -i <private_key_path> opc@<db_system_ip_address>
  2. opc로 로그인한 다음 root 유저로 sudo합니다. sudo su -를 하이픈과 함께 사용하여 루트 사용자의 프로파일을 호출합니다. 그러면 PATH가 dbcli 디렉토리(/opt/oracle/dcs/bin)로 설정됩니다.
    login as: opc
    sudo su -
  3. 기존 빈 데이터베이스 홈을 사용하거나 복원할 새 데이터베이스 홈을 생성할 수 있습니다. 해당 명령을 사용하여 이 단계를 완료할 수 있습니다.

    기존 데이터베이스 홈을 사용하려는 경우:

    • Dbhome 명령을 사용하여 데이터베이스 홈을 나열합니다.

      dbcli list-dbhomes
      출력:
      ID                                       Name                 DB Version Home Location
      ---------------------------------------- -------------------- ---------- ---------------------------------------------
      2e743050-b41d-4283-988f-f33d7b082bda     OraDB12102_home1     12.1.0.2   /u01/app/oracle/product/12.1.0.2/dbhome_1
    • 데이터베이스 명령을 사용하여 데이터베이스 홈이 데이터베이스와 연관되지 않았는지 확인합니다.

    필요한 경우 Dbhome 명령을 사용하여 복원할 데이터베이스 홈을 만듭니다.

  4. Dbstorage 명령을 사용하여 DATA, RECO 및 REDO 스토리지에 대한 디렉토리를 설정합니다. 다음 예에서는 rectest 데이터베이스에 대해 10GB의 ACFS 저장소를 만듭니다.
    dbcli create-dbstorage --dbname rectest --dataSize 10 --dbstorage ACFS 

    주:

    버전 11.2 데이터베이스를 복원할 때는 ACFS 저장소를 지정해야 합니다.

데이터베이스 복원 및 복구 수행

  1. DB 시스템에 SSH로 접속하고 opc로 로그인한 다음 oracle 유저로 로그인합니다.
    sudo su - oracle
  2. /etc/oratab에 데이터베이스에 대한 항목을 생성합니다. 원본 데이터베이스와 동일한 SID를 사용합니다.
    db1:/u01/app/oracle/product/12.1.0.2/dbhome_1:N
  3. oraenv 유틸리티를 사용하여 ORACLE_HOMEORACLE_SID 환경 변수를 설정합니다.
    . oraenv
  4. 원본 데이터베이스의 DBID를 구합니다. 이 정보는 백업 매체의 controlfile 자동 백업 파일 이름에서 가져올 수 있습니다. 파일 이름에는 DBID를 포함하는 문자열이 포함됩니다. 문자열의 일반적인 형식은 c-DDDDDDDDDDDD-YYYYMMDD-NN입니다. 여기서 DDDDDDDDDDDD는 DBID, YYYYMMDD는 백업이 생성된 날짜, NN는 파일 이름을 고유하게 만드는 시퀀스 번호입니다. 다음 예제의 DBID는 1508405000입니다. DBID는 다릅니다.

    다음 컬 구문을 사용하여 오브젝트 스토리지에 대한 일반 질의를 수행합니다. 빨간색 매개변수는 Back Up a Database to Object Storage Using RMANInstalling the Backup Module on the DB System에 설명된 대로 백업 모듈을 설치할 때 지정한 매개변수와 동일합니다.

    curl -u '<user_ID>.com:<auth_token>' -v https://swiftobjectstorage.<region_name>.oraclecloud.com/v1/<object_storage_namespace>

    영역 이름을 조회하려면 Regions and Availability Domains을 참조하십시오.

    예:

    curl -u 'djones@mycompany.com:1cnk!d0++ptETd&C;tHR' -v https://swiftobjectstorage.<region_name>.oraclecloud.com/v1/myobjectstoragenamespace

    제어 파일 이름에서 DBID를 가져오려면 다음 구문을 사용합니다.

    curl -u '<user_id>.com:<auth_token>' -v https://swiftobjectstorage.<region_name>.oraclecloud.com/v1/<object_storage_namespace>/<bucket_name>?prefix=sbt_catalog/c-

    예:

    curl -u 'djones@mycompany.com:1cnk!d0++ptETd&C;tHR' -v https://swiftobjectstorage.<region_name>.oraclecloud.com/v1/myobjectstoragenamespace/dbbackups/?prefix=sbt_catalog/c-

    아래 샘플 출력에서 1508405000은 DBID입니다.

    {
        "bytes": 1732,
        "content_type": "binary/octet-stream",
        "hash": "f1b61f08892734ed7af4f1ddaabae317",
        "last_modified": "2016-08-11T20:28:34.438000",
        "name": "sbt_catalog/c-1508405000-20160811-00/metadata.xml"
    }
  5. RMAN을 실행하고 Target Database에 연결합니다. pfile 또는 spfile를 생성하거나 controlfile 백업을 사용할 필요가 없습니다. 이는 다음 단계에서 복원됩니다. 대상 데이터베이스는 (not started)입니다. 이는 정상적이며 이 시점에서 예상됩니다.
    rman target /
    출력:
    Recovery Manager: Release 12.1.0.2.0 - Production on Wed Jun 22 18:36:40 2016
    Copyright (c) 1982, 2014, Oracle and/or its affiliates.  All rights reserved.
    connected to target database (not started)
  6. 위에서 얻은 값을 사용하여 DBID를 설정합니다.
    set dbid 1508405000;
  7. 다음 명령을 실행합니다. 서버 파라미터 파일을 사용할 수 없는 경우 RMAN은 더미 서버 파라미터 파일을 사용하여 Instance를 시작하려고 시도합니다. ORA-01078 및 LRM-00109 오류는 정상이며 무시할 수 있습니다.
    STARTUP NOMOUNT
    startup failed: ORA-01078: failure in processing system parameters
    LRM-00109: could not open parameter file '/u01/app/oracle/product/12.1.0.2/dbhome_1/dbs/initdb1.ora'
     
    starting Oracle instance without parameter file for retrieval of spfile
    Oracle instance started
     
    Total System Global Area    2147483648 bytes
     
    Fixed Size                     2944952 bytes
    Variable Size                847249480 bytes
    Database Buffers            1254096896 bytes
    Redo Buffers                  43192320 bytes
  8. 자동 백업에서 서버 파라미터 파일을 복원합니다.

    SBT_LIBRARY는 백업 모듈이 설치될 때 -libDir 매개변수로 지정된 것과 동일한 라이브러리입니다(예: /home/oracle/lib/).

    OPC_PFILE는 백업 모듈이 설치될 때 -configfile 매개변수로 지정된 것과 동일한 파일입니다(예: /home/oracle/config).

    set controlfile autobackup format for device type sbt to '%F';
    run {
      allocate channel c1 device type sbt PARMS  'SBT_LIBRARY=/home/oracle/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/home/oracle/config)';
      restore spfile from autobackup;
    }
  9. audit_file_dest에 대한 디렉토리를 생성합니다. 기본값은 /u01/app/oracle/admin/$ORACLE_SID/adump입니다. spfile에서 문자열 audit_file_dest을 검색하여 원본 데이터베이스에 사용되는 설정을 확인할 수 있습니다.
    strings ${ORACLE_HOME}/dbs/spfile${ORACLE_SID}.ora | grep audit_file_dest
    *.audit_file_dest='/u01/app/oracle/admin/db1/adump'
     
    mkdir -p /u01/app/oracle/admin/db1/adump
  10. 원본 데이터베이스에서 블록 변경 추적이 활성화된 경우 블록 변경 추적 파일의 디렉토리를 생성합니다. 이 디렉토리는 db_create_file_dest 아래에 있는 디렉토리입니다. spfile에서 디렉토리 이름을 검색합니다.
    strings ${ORACLE_HOME}/dbs/spfile${ORACLE_SID}.ora | grep db_create_file_dest
    *.db_create_file_dest='/u02/app/oracle/oradata/db1'
     
    mkdir -p /u02/app/oracle/oradata/db1/<$ORA_UNQNAME if available or database name>/changetracking
  11. 복원된 서버 파라미터 파일로 Instance를 재시작합니다.
    STARTUP FORCE NOMOUNT;
  12. RMAN 자동 백업에서 제어 파일을 복원하고 데이터베이스를 마운트합니다.
    set controlfile autobackup format for device type sbt to '%F';
    run {
      allocate channel c1 device type sbt PARMS 'SBT_LIBRARY=/home/oracle/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/home/oracle/config)';
      restore controlfile from autobackup;
      alter database mount;
    }
  13. 데이터베이스 복원 및 복구.
    RESTORE DATABASE;
    RECOVER DATABASE;
  14. RMAN은 더 이상 찾을 수 없을 때까지 아카이브된 리두 로그를 사용하여 recovery합니다. RMAN이 백업에서 마지막으로 아카이브된 리두 로그를 적용하여 로그를 더 이상 찾을 수 없는 경우 아래와 유사한 오류가 발생하는 것은 정상입니다.
    unable to find archived log
    archived log thread=1 sequence=29
    RMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-03002: failure of recover command at 06/28/2016 00:57:35
    RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 29 and starting SCN of 2349563
  15. 재설정 로그를 사용하여 데이터베이스를 엽니다.
    ALTER DATABASE OPEN RESETLOGS;

복구가 완료되었습니다. 데이터베이스에는 마지막으로 백업된 아카이브된 리두 로그를 기준으로 모든 커밋된 트랜잭션이 포함됩니다.