RMAN 백업을 사용하여 오브젝트 스토리지에서 데이터베이스 복구

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

선행 조건

다음이 필요합니다.

가정

아래 절차는 다음을 가정합니다.

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 스토리지를 지정해야 합니다.

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

  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_HOME 및 ORACLE_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 RMAN의 Installing 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>

    지역 이름을 조회하려면 지역 및 가용성 도메인을 참조하십시오.

    예:

    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. 원본 데이터베이스에서 블록 변경 사항 추적(Block Change Tracking)이 활성화된 경우 블록 변경 사항 추적 파일의 디렉토리를 생성합니다. 이 디렉토리는 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. 데이터베이스를 복원하고 Recovery합니다.

    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. resetlogs를 사용하여 데이터베이스를 엽니다.

    ALTER DATABASE OPEN RESETLOGS;

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