토폴로지 배치 준비

Data Guard가 작동하려면 서로 다른 지역에 있는 두 데이터베이스가 통신해야 합니다. 따라서 각 DRG를 통해 OCI의 두 영역 간에 원격 피어링 접속을 설정해야 합니다. DRG는 Azure 설정용 OracleDB에 의해 생성되므로 기존 DRG 간에 원격 피어링 연결만 설정하면 됩니다.

네트워크 설정

네트워크를 설정하려면 다음 단계를 수행합니다.

  1. Azure VM 및 Azure 데이터베이스 시스템용 OracleDB에 대한 네트워크 연결을 설정합니다.Set up network connectivity for the Azure VM and OracleDB for Azure database systems.
    • Azure VM에서 사용 가능한 Oracle DB 시스템에 대한 SSH 전용 키가 있는지 확인합니다.
    • Azure VM과 Azure DB 시스템용 OracleDB 간의 연결을 테스트합니다.Test the connectivity between the Azure VMs and the OracleDB for Azure DB systems.
  2. OCI에서 데이터베이스 시스템에 대한 네트워크를 설정합니다.
    1. 먼저 영역 1에서 DB 시스템의 VCN 세부정보로 이동하여 동적 경로 지정 게이트웨이 연결, DRG 이름 순으로 선택하여 DRG 세부정보를 영역 1로 로드합니다. 그런 다음 Remote Peering Connection Attachments를 선택합니다. 두번째 브라우저 window에서 영역 2에 대해 정확히 동일한 작업을 수행합니다.
    2. 다음으로 두 영역에서 원격 피어링 접속 생성을 선택하여 RPC를 생성합니다.
    3. 두 RPC가 모두 생성되면 영역 1에서 RPC 이름을 선택하고 OCID를 복사합니다.
    4. 영역 2에서 RPC 이름을 선택하고 연결 설정을 선택합니다. 영역 1에 대해 올바른 영역 이름(연결하려는 위치)을 선택하고 이전 단계에서 복사한 영역 1에서 RPC에 대한 OCID를 제공합니다. 연결을 설정한 후 잠시 후 피어 상태가 "피어링"이어야 합니다.
    5. 다음으로 두 지역의 VCN 간 트래픽을 허용합니다. VCN 세부 사항으로 이동하여 기본 보안 목록을 선택합니다. 반대 VCN의 CIDR 범위로부터의 트래픽을 허용하려면 수신 규칙 추가를 선택합니다.
    6. 마지막으로 Azure의 VM에서 각 OCI 기본 DB 시스템에 연결합니다. 다른 데이터베이스에 연결되도록 두 Base DB 시스템에 대한 tnsnames.ora 파일을 편집합니다.
    7. 두 DB 시스템에서 반대 데이터베이스로 tnsping가 제대로 작동하는지 확인합니다.

Oracle Database for Azure DR 구성 설정

Azure DR 구성을 위해 Oracle 데이터베이스를 설정하려면 아래 설명된 대로 기본 데이터베이스와 보조 데이터베이스를 모두 준비해야 합니다.To set up the Oracle database for Azure DR configuration, you need to prepare both a primary and a secondary database, as described below.

주:

명령줄에 붙여 넣기 위해 명령 예제를 클립보드에 저장하려면 복사를 누릅니다. variables를 사용자의 구현과 관련된 값으로 바꿔야 합니다.

기본 데이터베이스 준비

기본 데이터베이스를 준비하려면 정적 리스너를 구성하고, tnsnames.ora 파일을 업데이트하고, 다양한 데이터베이스 설정 및 매개변수를 구성해야 합니다.

  1. SQL> 프롬프트에서 다음 정보를 확인합니다.
    • 데이터베이스 플래시백이 사용으로 설정되었는지 확인하십시오.
    • 데이터베이스 강제 로깅이 사용으로 설정되었는지 확인하십시오.
    • 데이터베이스가 아카이브 로그 모드인지 확인합니다.
    • 데이터베이스가 개방 모드인지 확인
    • 데이터베이스가 기본 데이터베이스 롤에 있는지 확인하십시오.
    다음 명령을 실행합니다.
    select log_mode, FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE from v$database ;
    출력은 다음과 유사해야 합니다.
    LOG_MODE              FORCE_LOGGING               FLASHBACK_ON               OPEN_MODE                 DATABASE_ROLE
    ----------------      ------------------------   ----------------------     --------------------        -----------------------
    ARCHIVELOG            YES                         YES                        READ WRITE                  PRIMARY
  2. 다음 명령을 실행하여 자동 standby file management가 auto로 설정되었는지 확인합니다.
    show parameter standby_file_management
    출력은 다음과 유사해야 합니다.
    NAME                                          TYPE          VALUE
    ------------------------------------          -----------  ----------
    standby_file_management                       string       AUTO
  3. Broker 구성 파일을 설정합니다.
    show parameter dg_broker_config_file1;
    출력은 다음과 유사해야 합니다.
    NAME                                          TYPE          VALUE
    ------------------------------------         ----------- ------------------------------
    dg_broker_config_file1                        string        /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/dr1dbuks_898_lhr.dat
    

    다음 명령을 입력합니다.

    show parameter dg_broker_config_file2;
    출력은 다음과 유사해야 합니다.
    
    NAME                                                     TYPE          VALUE
    ------------------------------------         ----------- ------------------------------
    dg_broker_config_file2                             string          /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/dr2dbuks_898_lhr.dat
  4. Data Guard broker를 활성화합니다.
    show parameter dg_broker_start
    출력은 다음과 유사해야 합니다.
    NAME                                             TYPE         VALUE
    ------------------------------------            ----------- --------------
    dg_broker_start                                  boolean      FALSE
    그런 다음 다음 다음 명령을 입력합니다.
    alter system set dg_broker_start=true scope=both;
    
    show parameter dg_broker_start
    출력은 다음과 유사해야 합니다.
    NAME                                             TYPE        VALUE
    ------------------------------------            ----------- --------------
    dg_broker_start                                  boolean     TRUE
  5. 명령 프롬프트(예: [oracle@ldbuksdr ]$)에서 listerner 상태를 확인합니다.
    lsnrctl status
  6. 주 데이터베이스 구성 세부 정보:
    srvctl config database -d db_unique_name
  7. tns 항목을 확인합니다.
    cat $ORACLE_HOME/network/admin/tnsnames.ora
  8. sqlnet.ora 출력에 유의하십시오.
    cat $ORACLE_HOME/network/admin/sqlnet.ora
  9. 다음 명령을 입력하여 Password File을 /tmp 위치의 standby DB 시스템에 복사합니다.
    cd .ssh
    scp -i private_key /tmp/orapw<sid> opc@ip_standby_vm:/tmp/orapwsid   
  10. 전자 지갑 파일을 찾아서 /tmp 위치의 standby DB 시스템에 복사합니다.
    select CON_ID, WRL_PARAMETER, WRL_TYPE, STATUS, WALLET_TYPE from V$ENCRYPTION_WALLET;
    출력은 다음과 유사해야 합니다.
    CON_ID         WRL_PARAMETER                                                                      STATUS       WALLET_TYPE
    ----------    ------------------------------------------------------------------------------     ------------  ------------ ----------------------------
    1              /opt/oracle/dcs/commonstore/wallets/dbuks_898_lhr/tde/                             OPEN          AUTOLOGIN
    2                                                                                                 OPEN          AUTOLOGIN
    3                                                                                                 OPEN          AUTOLOGIN
    
    그리고 다음을 입력합니다.
    cd /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde
    ls -ltra
    
    다음과 같은 결과가 표시됩니다.
    -rw------- 1 oracle asmadmin  5467 Jun 19 18:59 ewallet.p12
    -rw------- 1 oracle asmadmin  5512 Jun 19 18:59 cwallet.sso
    
    그런 다음 다음 다음 명령을 입력합니다. 여기서 db_unique_name은 전자 지갑 데이터베이스의 고유 이름입니다.
    
    [oracle@ ~]$ cp /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde/ewallet.p12/tmp/cwallet.p12
    cp /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde/cwallet.sso/tmp/cwallet.sso
    chmod 777 /tmp/ewallet.p12
    chmod 777 /tmp/cwallet.sso
    scp -i private_key /tmp/ewallet.p12 opc@ip_standby_vm:/tmp/ewallet.p12
    scp -i private_key /tmp/cwallet.sso opc@ip_standby_vm:/tmp/cwallet.sso.
  11. 정적 리스너를 구성합니다.
    standby database의 초기 Instantiation을 위해서는 정적 리스너가 필요합니다. 데이터베이스가 작동 중지되면 정적 리스너가 Instance에 대한 원격 연결을 활성화하므로 Oracle Data Guard를 사용하여 Instance를 시작할 수 있습니다. listener.ora 파일에 줄 바꿈이나 공백이 없어야 합니다.

    기본 데이터베이스에서 listener.ora 파일에 SID_LIST_LISTENER 파일을 추가하여 기본 데이터베이스의 데이터베이스 고유 이름, Oracle 홈 및 Oracle SID(시스템 식별자)를 포함합니다.

    lsnrctl status 
    vi listener.ora 
    다음 항목을 listener.ora에 추가합니다. 설명:
    • DB_UNIQUE_NAME은 기본 데이터베이스의 고유한 이름입니다.
    • ORACLE_HOME는 기본 데이터베이스의 로컬 Oracle 홈입니다.
    • ORACLE SID는 기본 데이터베이스의 SID입니다.
    SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(GLOBAL_DBNAME=DB_UNIQUE_NAME)(ORACLE_HOME=ORACLE_HOME) 
    (SID_NAME = ORACLE SID)))
    항목은 다음과 유사해야 합니다. GLOBAL_DBNAME, ORACLE_HOMESID_NAME에 대한 항목은 서로 다릅니다.
    SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(GLOBAL_DBNAME=dbuks_898_lhr.odsp129521.cvcn.oraclevcn.com)
    (ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1)(SID_NAME=dbuks)))
    리스너를 재로드하고 상태를 확인합니다.
    lsnrctl reload
    lsnrctl status
  12. tns 항목을 구성합니다.
    리두 전송을 제대로 수행하려면 primary 및 standby tnsnames.ora 파일 모두에 각 데이터베이스에 대한 항목이 필요합니다. IP 주소는 서버 이름을 IP 주소로 분석하기 위해 데이터베이스 간에 DNS가 없기 때문에 사용됩니다. 다음 예를 사용하여 구성과 관련된 값을 바꿉니다. Oracle RAC(Oracle Real Application Clusters) 구성은 스캔 리스너 이름을 분석할 수 없으므로 주소 목록을 사용하여 모든 노드를 정의해야 합니다. 이러한 IP 주소는 나중에 추가됩니다. 초기 인스턴스는 Oracle Recovery Manager(RMAN)가 항상 동일한 노드에 연결되도록 하기 위해 tns 항목에 하나의 IP 주소만 나열해야 합니다.
    [oracle@~]$ cd $ORACLE_HOME/network/admin 
    [oracle@~]$ vi tnsnames.ora
    tnsnames.ora 파일의 항목은 다음과 같아야 합니다.
    DBUKS_R2J_AMS=(DESCRIPTION=(SDU=65536)(RECV_BUF_SIZE=134217728)(SEND_BUF_SIZE=134217728)(ADDRESS_LIST=(FAILOVER=on)(CONNECT_TIMEOUT=3)
    (RETRY_COUNT=3)(ADDRESS=(PROTOCOL=TCP)(HOST=10.91.0.177)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)
    (SERVICE_NAME=dbuks_r2j_ams.odsp083156.cvcn.oraclevcn.com)(UR=A))) 
    
    DBUKS_898_LHR=(DESCRIPTION=(SDU=65535)(RECV_BUF_SIZE=134217728)(SEND_BUF_SIZE=134217728)(ADDRESS_LIST=(FAILOVER=on)(CONNECT_TIMEOUT=3)
    (RETRY_COUNT=3)(ADDRESS=(PROTOCOL=TCP)(HOST=10.90.0.246)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)
    (SERVICE_NAME=dbuks_898_lhr.odsp129521.cvcn.oraclevcn.com)(UR=A)))

대기 데이터베이스 준비

그런 다음 standby database를 perpare합니다.

  1. Oracle Database for Azure 툴에서 생성된 데이터베이스를 수동으로 삭제합니다.
    standby database를 삭제하기 전에 현재 db_unique_name를 저장하고 나중에 사용될 전자 지갑 위치를 기록해 둡니다. 다음 질의는 전자 지갑 위치에 대한 세부정보를 제공합니다.
    1. sqlplus 명령 프롬프트에서 다음을 입력합니다.
      select * from V$ENCRYPTION_WALLET; 
    2. 그런 다음 rm_dbfiles.sql 스크립트를 준비하여 데이터베이스 관련 파일을 제거합니다.
      srvctl config database -d db_unique_name
    3. 다음 스크립트를 실행하여 대기 데이터베이스로 작성 중인 데이터베이스를 종료하고 데이터베이스 파일을 제거합니다.
      vi rm_dbfiles.sql 
      set heading off linesize 999 pagesize 0 feedback off trimspool on 
      spool /home/oracle/demo/files.lst 
      select 'asmcmd rm '||name from v$datafile union all select 'asmcmd rm '||name from v$tempfile union all select 'asmcmd rm '||member from v$logfile; 
      spool off 
      create pfile='/home/oracle/demo/ORACLE_UNQNAME.pfile' from spfile; 
      exit
      
    4. 그런 다음 시스템 DBA로 sqlplus 프롬프트로 이동합니다.
      sqlplus "/ as sysdba"
      다음 명령을 실행합니다.
      @rm_dbfiles.sql
      exit
    5. 그런 다음 읽기, 쓰기 및 실행 권한을 부여합니다. 여기서 db_unique_name은 영향을 받는 데이터베이스의 고유한 이름입니다.
      chmod 777 files.lst
      srvctl stop database -d db_unique_name
    6. 스크립트를 저장하고 실행합니다.
      ./files.lst 
    이제 시작 데이터베이스의 모든 파일이 제거되었습니다.
  2. /tmp에 수신된 비밀번호 파일과 전자 지갑 파일을 기본 데이터베이스에서 대기 데이터베이스 DB 시스템의 해당 위치로 복사합니다.
    1. 기본 데이터베이스 DB 시스템에서 /tmp로 수신된 데이터베이스 비밀번호 파일과 전자 지갑 파일을 대기 데이터베이스 DB 시스템의 해당 위치로 복사합니다. 여기서 orapwsid는 SID 비밀번호입니다.
      sudo cp /tmp/orapwsid $ORACLE_HOME/dbs/orapwsid 
      예:
      sudo ls -ltra /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/orapwdbuks 
      다음과 비슷한 출력이 나타나야 합니다.
      
      -rw-r-----1 oracle oinstall 2048 Jul3 13:42 /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/orapwdbuks
    2. 암호 파일의 md5sum 출력이 Primary 및 Standby(여기서 orapwsid는 SID passsword임)에서 일치하는지 확인합니다.
      md5sum /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/orapwsid 
      기본 데이터베이스의 출력은 다음과 같아야 합니다(여기서 orapwsidorapwdbuks임).
      
      b3895fa6357471f80c6e0f4ac16fdc23 /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/orapwdbuks 
      
      그리고 standby database의 경우:
      
      b3895fa6357471f80c6e0f4ac16fdc23 /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/orapwdbuks
    3. 기존 전자 지갑 파일을 제거하고 /tmp에서 TDE 위치로 전자 지갑 파일을 복사합니다. 여기서 db_unique_name은 영향을 받는 데이터베이스의 고유 이름입니다.
      [oracle@ ~]$ cd /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde/
      rm ewallet.p12 cwallet.sso
      sudo cp /tmp/ewallet.p12 /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde/ewallet.p12
      sudo cp /tmp/cwallet.sso /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde/cwallet.ss
      chown oracle:asmadmin /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde/ewallet.p12
      sudo chown oracle:asmadmin /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde/cwallet.sso
  3. 정적 리스너 구성:
    1. OCI의 대기 데이터베이스에서 데이터베이스 고유 이름, OCI의 Oracle 홈 및 기본 데이터베이스의 Oracle SID(시스템 식별자)를 포함하는 SID_LIST_LISTENER 파일을 추가합니다.
      lsnrctl status
      vi listener.ora
    2. 다음 항목을 listener.ora 파일에 추가합니다. 설명:
      • DB_UNIQUE_NAME은 기본 데이터베이스의 이름입니다.
      • ORACLE_HOME는 기본 데이터베이스의 로컬 Oracle 홈입니다.
      • ORACLE SID는 기본 데이터베이스의 SID입니다.
       SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(GLOBAL_DBNAME=DB_UNIQUE_NAME)(ORACLE_HOME=ORACLE_HOME) 
      (SID_NAME = ORACLE_SID)))
      예를 들어, 항목은 다음과 유사해야 합니다.
      SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(GLOBAL_DBNAME= dbuks_r2j_ams. odsp083156.cvcn.oraclevcn.com)
      (ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1)(SID_NAME=dbuks))) 
    3. 리스너 재로드 및 상태 검사
      lsnrctl reload 
      lsnrctl status
  4. tns 항목을 구성합니다.
    cd $ORACLE_HOME/network/admin
    vi tnsnames.ora
    tnsnames.ora 파일의 항목은 다음과 같아야 합니다.
     DBUKS_R2J_AMS=(DESCRIPTION=(SDU=65536)(RECV_BUF_SIZE=134217728)(SEND_BUF_SIZE=134217728)(ADDRESS_LIST=(FAILOVER=on)(CONNECT_TIMEOUT=3)
    (RETRY_COUNT=3)(ADDRESS=(PROTOCOL=TCP)(HOST=10.91.0.177)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)
    (SERVICE_NAME=dbuks_r2j_ams.odsp083156.cvcn.oraclevcn.com)(UR=A))) 
    
    DBUKS_898_LHR=(DESCRIPTION=(SDU=65535)(RECV_BUF_SIZE=134217728)(SEND_BUF_SIZE=134217728)(ADDRESS_LIST=(FAILOVER=on)(CONNECT_TIMEOUT=3)
    (RETRY_COUNT=3)(ADDRESS=(PROTOCOL=TCP)(HOST=10.90.0.246)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)
    (SERVICE_NAME=dbuks_898_lhr.odsp129521.cvcn.oraclevcn.com)(UR=A)))