Active Data Guard Far Sync 인스턴스 배치

각 리전의 OCI Compute VM에 Far Sync 인스턴스를 배포하여 리전 간 데이터 손실이 발생하지 않도록 보장합니다.

  1. Primary 데이터베이스에서 Far Sync 제어 파일을 생성하고 Far Sync 호스트로 복사합니다.
    SQL> alter database create far sync instance controlfile as '/home/oracle/controlfs.ctl';

    새로 생성된 콘트롤 파일을 Far Sync 인스턴스 호스트로 복사합니다.

    scp -p controlfs.ctl farsync-region1:/u01/app/oracle/oradata/fstor/controlfs/
    scp -p controlfs.ctl farsync-region2:/u01/app/oracle/oradata/fssyd/controlfs/
  2. Far Sync 인스턴스 이름을 사용하여 기본 데이터베이스의 암호 파일을 Far Sync 호스트에 복사합니다.
    이 예에서는 기본 영역(지역 1)에 있는 Far Sync 인스턴스의 이름이 FSTOR로 지정됩니다. 따라서 암호 파일의 이름은 orapwFSTOR입니다.
    # check the location of the password file
    SQL> select file_name from v$passwordfile_info;
                        
    # as grid user, copy the file from ASM to the local filesystem
    asmcmd -p
    cp +DATAC2/DB_REGION1/PASSWORD/pwddb_region1.421.1185102507 /home/grid/orapw
                       
    # as root user, change the owner of the password file to oracle user
    cp /home/grid/orapw /home/oracle/
    chown oracle:oinstall /home/oracle/orapw
                        
    # copy the files to the Far Sync instance hosts using the new names "orapwFSTOR" and "orapwFSSYD"
    scp -p /home/oracle/orapw farsync-region1:/u01/app/oracle/product/19c/dbhome_1/dbs/orapwFSTOR
    scp -p /home/oracle/orapw farsync-region2:/u01/app/oracle/product/19c/dbhome_1/dbs/orapwFSSYD
  3. 기본 데이터베이스에서 Far Sync 인스턴스에 대한 매개변수 파일을 생성하고 Far Sync 인스턴스 호스트에 복사한 다음 Far Sync 인스턴스의 매개변수 값 및 디렉토리 경로를 반영하도록 매개변수를 조정합니다. 또는 Far Sync 인스턴스 호스트(예: 기본 영역)에서 새 매개변수 파일로 시작할 수 있습니다.
    1. 기본 영역(FSTOR)에서 다음을 수행합니다.
      # create a parameter file
      vi /u01/app/oracle/product/19c/dbhome_1/dbs/init_FSTOR.ora
      *.db_name='DBTOR'
      *.db_unique_name='FSTOR'
      *.compatible='19.0.0'
      *.control_files='/u01/app/oracle/oradata/fstor/controlfs/controlfs.ctl'
      *.diagnostic_dest='/u01/app/oracle/oradata/fstor/diag/'
      *.core_dump_dest='/u01/app/oracle/oradata/fstor/coredump/'
      *.audit_file_dest='/u01/app/oracle/oradata/fstor/audit/'
      *.audit_trail='DB'
      *.db_recovery_file_dest='/u01/app/oracle/oradata/fstor/fra/'
      *.db_recovery_file_dest_size=250g
      *.dg_broker_config_file1='/u01/app/oracle/oradata/fstor/dg_broker/fstor_01.dat'
      *.dg_broker_config_file2='/u01/app/oracle/oradata/fstor/dg_broker/fstor_02.dat'
      *.dg_broker_start=TRUE*.dispatchers='(PROTOCOL=TCP) (SERVICE=FSTORXDB)'
      *.standby_file_management='AUTO'
                                  
      # start the instance with the parameter file
      export ORACLE_SID=FSTOR
      sqlplus / as sysdba
      startup pfile='/u01/app/oracle/product/19c/dbhome_1/dbs/init_FSTOR.ora' nomount;
                                  
      # create an spfile
      create spfile='/u01/app/oracle/product/19c/dbhome_1/dbs/spfileFSTOR.ora' from pfile='/u01/app/oracle/product/19c/dbhome_1/dbs/init_FSTOR.ora';
                                  
      # restart the instance with the spfile
      shutdown immediate;
      startup mount;
      select name, db_unique_name, database_role, open_mode from v$database;
    2. 대기 영역(FSSYD)에서 다음을 수행합니다.
      # create a parameter file
      vi /u01/app/oracle/product/19c/dbhome_1/dbs/init_FSSYD.ora
      *.db_name='DBTOR'
      *.db_unique_name='FSSYD'
      *.compatible='19.0.0'
      *.control_files='/u01/app/oracle/oradata/fssyd/controlfs/controlfs.ctl'
      *.diagnostic_dest='/u01/app/oracle/oradata/fssyd/diag/'
      *.core_dump_dest='/u01/app/oracle/oradata/fssyd/coredump/'
      *.audit_file_dest='/u01/app/oracle/oradata/fssyd/audit/'
      *.audit_trail='DB'
      *.db_recovery_file_dest='/u01/app/oracle/oradata/fssyd/fra/'
      *.db_recovery_file_dest_size=250g
      *.dg_broker_config_file1='/u01/app/oracle/oradata/fssyd/dg_broker/fssyd_01.dat'
      *.dg_broker_config_file2='/u01/app/oracle/oradata/fssyd/dg_broker/fssyd_02.dat'
      *.dg_broker_start=TRUE
      *.dispatchers='(PROTOCOL=TCP) (SERVICE=FSSYDXDB)'
      *.standby_file_management='AUTO'
                                  
      # start the instance with the parameter file
      export ORACLE_SID=FSSYD
      sqlplus / as sysdba
      startup pfile='/u01/app/oracle/product/19c/dbhome_1/dbs/init_FSSYD.ora' nomount;
                                  
      # create an spfile
      create spfile='/u01/app/oracle/product/19c/dbhome_1/dbs/spfileFSSYD.ora' from pfile='/u01/app/oracle/product/19c/dbhome_1/dbs/init_FSSYD.ora';
                                  
      # restart the instance with the spfile
      shutdown immediate;
      startup mount;
      select name, db_unique_name, database_role, open_mode from v$database;
  4. 각 Far Sync 호스트에서 데이터베이스 리스너를 생성하고 시작합니다.
    1. Primary 영역:
      vi $ORACLE_HOME/network/admin/listener.ora
      LISTENER =
        (DESCRIPTION_LIST =
          (DESCRIPTION =
            (ADDRESS = (PROTOCOL = TCP)(HOST = farsync-region1.hubsubnetregion1.hubvcnregion1.oraclevcn.com)(PORT = 1521))
            (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
          )
        )
                                  
      lsnrctl start
      lsnrctl services
    2. Standby 영역에서:
      vi $ORACLE_HOME/network/admin/listener.ora
      LISTENER =
        (DESCRIPTION_LIST =
          (DESCRIPTION =
            (ADDRESS = (PROTOCOL = TCP)(HOST = farsync-region2.hubsubnetregion2.hubvcnregion2.oraclevcn.com)(PORT = 1521))
            (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
          )
        )
                                  
      lsnrctl start
      lsnrctl services
  5. Far Sync 호스트에 기본 및 대기 TNS 항목을 추가합니다.
    vi $ORACLE_HOME/network/admin/tnsnames.ora
                        
    DB_REGION1 =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = vmc1ca-4vzoi-scan.ocidbdelegated.ocivnoffsitedb.oraclevcn.com)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = db_region1.ocidbdelegated.ocivnoffsitedb.oraclevcn.com)
        )
      )
    
    DB_REGION2 =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = abvmc1auseh-glcfo-scan.ociabvnet5subn.ociabvirtualne.oraclevcn.com)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = db_region2.ociabvnet5subn.ociabvirtualne.oraclevcn.com)
        )
      )
  6. 기본 및 대기 데이터베이스 호스트에 Far Sync TNS 항목을 추가하고 연결을 테스트합니다.

    Far Sync 인스턴스의 TNS 접속 문자열을 기본 및 대기 데이터베이스 호스트(Exadata VM 클러스터의 모든 호스트)의 tnsname.ora 파일에 추가합니다.

    vi $ORACLE_HOME/network/admin/dbtor/tnsnames.ora
    FSTOR =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = farsync-region1)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = FSTOR)
        )
      )
    
    FSSYD =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = farsync-region2)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = FSSYD)
        )
      )
    # Test the connectivity
    sqlplus SYS@FSTOR as sysdba
    show parameter instance_name
    
    sqlplus SYS@FSSYD as sysdba
    show parameter instance_name
    
    # If the connection fails, ensure port 1521 is open on Far Sync hosts
    sudo firewall-cmd --permanent --add-port=1521/tcp
    sudo firewall-cmd --reload
  7. 기본 데이터베이스의 Active Data Guard 브로커 구성에서 Far Sync 인스턴스를 추가하고 사용으로 설정합니다.

    기본 데이터베이스에 연결된 상태에서 Active Data Guard 브로커를 사용하여 Far Sync 인스턴스를 기존 Active Data Guard 구성에 추가합니다.

    dgmgrl SYS as sysdba
    
    DGMGRL> ADD FAR_SYNC FSTOR AS CONNECT IDENTIFIER IS FSTOR;
    DGMGRL> ENABLE FAR_SYNC FSTOR;
    
    DGMGRL> ADD FAR_SYNC FSSYD AS CONNECT IDENTIFIER IS FSSYD;
    DGMGRL> ENABLE FAR_SYNC FSSYD;
  8. 기본 데이터베이스 및 Far Sync 인스턴스에 대해 브로커에서 RedoRoutes 속성을 구성합니다.

    Active Data Guard 브로커의 RedoRoutes 속성을 사용하여 redoFastSync 모드의 로컬 Far Sync 인스턴스로 전송하고 Far Sync 인스턴스를 사용하여 redoASYNC 모드의 원격 대기 데이터베이스로 전달하도록 기본 데이터베이스를 구성합니다.

    DGMGRL> EDIT DATABASE 'db_region1' SET PROPERTY RedoRoutes = '( LOCAL : ( FSTOR FASTSYNC PRIORITY=1, db_region2 ASYNC PRIORITY=2 ))';
    DGMGRL> EDIT FAR_SYNC 'FSTOR' SET PROPERTY RedoRoutes = '( db_region1 : db_region2 ASYNC )';
    
    DGMGRL> EDIT DATABASE 'db_region2' SET PROPERTY RedoRoutes = '( LOCAL : ( FSSYD FASTSYNC PRIORITY=1, db_region1 ASYNC PRIORITY=2 ))';
    DGMGRL> EDIT FAR_SYNC 'FSSYD' SET PROPERTY RedoRoutes = '( db_region2 : db_region1 ASYNC )';
    primary, standby 및 Far Sync 인스턴스에 대한 데이터베이스 log_archive_dest_n 매개변수는 그에 따라 설정됩니다.
  9. 구성 보호 모드를 Maximum Availability로 변경합니다.
    DGMGRL> EDIT CONFIGURATION SET PROTECTION MODE AS MAXAVAILABILITY;
  10. Active Data Guard 구성을 확인합니다.
    DGMGRL> SHOW CONFIGURATION
    
    Configuration - dbtor_dgconf
    
    Protection Mode: MaxAvailability
    Members:
      db_region1 - Primary database
      fstor      - Far sync instance
      db_region2  - Physical standby database
    
    Members Not Receiving Redo:
      fssyd      - Far sync instance
    
    Fast-Start Failover:  Disabled
    
    Configuration Status:
      SUCCESS   (status updated 57 seconds ago)

    주:

    처음에는 원격 Far Sync 인스턴스에 redo 데이터가 처음으로 수신될 때까지 Warning: ORA-16789: standby redo logs configured incorrectly가 표시될 수 있습니다. 예를 들어, 역할 전환 후 또는 일시적으로 redo 경로를 업데이트합니다.

    스위치오버 후 구성을 확인합니다.

    DGMGRL> SHOW CONFIGURATION
    
    Configuration - dbtor_dgconf
    
    Protection Mode: MaxAvailability
    Members:
      db_region2  - Primary database
      fssyd      - Far sync instance
      db_region1 - Physical standby database
    
    Members Not Receiving Redo:
      fstor      - Far sync instance
    
    Fast-Start Failover:  Disabled
    
    Configuration Status:
      SUCCESS   (status updated 54 seconds ago)