RMAN을 사용하여 대기 인스턴스 생성

RMAN(Oracle Recovery Manager) 을 사용하여 기본 데이터베이스에서 대기 클라우드 인스턴스를 생성합니다.

아카이브 로그 생성

온-프레미스 Oracle 서버의 로그 모드를 확인하십시오. NOARCHIVELOG 모드인 경우 ARCHIVELOG 모드로 변경하여 아카이브 로그를 생성합니다.

  1. 온-프레미스 서버에 대한 로그 모드를 봅니다.
    SQL> select log_mode from v$database;
    로그 모드가 NOARCHIVELOG 모드인 경우 출력은 다음과 비슷합니다:
    LOG_MODE
    ------------
    NOARCHIVELOG
  2. 온-프레미스 인스턴스를 종료합니다.
    SQL> shutdown immediate;
    다음과 같이 출력됩니다:
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
  3. 온-프레미스 데이터베이스를 마운트합니다.
    SQL> startup mount;
    다음과 같이 출력됩니다:
    ORACLE instance started.
    
    Total System Global Area 4966054520 bytes
    Fixed Size		    9144952 bytes
    Variable Size		  922746880 bytes
    Database Buffers	 4026531840 bytes
    Redo Buffers		    7630848 bytes
    Database mounted.
  4. 데이터베이스 아카이브 로그를 변경한 다음 데이터베이스를 엽니다.
    SQL> alter database archivelog;
    SQL> alter database open;
  5. 로그 모드를 ARCHIVELOG로 변경합니다.
    SQL> select log_mode from v$database;
    LOG_MODE
    ------------
    ARCHIVELOG
  6. 아카이브 로그 목록을 표시합니다.
    SQL> archive log list;
    다음과 같이 출력됩니다:
    Database log mode	       Archive Mode
    Automatic archival	       Enabled
    Archive destination	       /opt/oracle/product/19c/dbhome_1/dbs/arch
    Oldest online log sequence     10
    Next log sequence to archive   12
    Current log sequence	       12
  7. 모든 로그를 아카이브합니다.
    SQL> archive log all;
    ORA-00271:there are no logs that need archiving

OCI에서 대기 데이터베이스 인스턴스화

Oracle Recovery Manager(RMAN) 를 사용하여 OCI(Oracle Cloud Infrastructure) 에서 활성 기본 데이터베이스를 복제합니다. 또는 기본 데이터베이스의 백업에서 복제할 수도 있습니다.

  1. srvctl 유틸리티를 사용하여 데이터베이스를 정지하거나 SQL*Plus를 사용하여 데이터베이스를 종료합니다.
    • $ srvctl stop database -d standby DB_UNIQUE_NAME -o immediate
    • Shutdown immediate;
  2. 데이터베이스에 연결합니다.
    $ rman target /
    RMAN> startup nomount;
  3. 기본 서비스에서 대기 제어 파일을 복원합니다.
    이 예제에서 ORCLCDB는 기본 온-프레미스 데이터베이스입니다.
    RMAN> restore standby controlfile from service 'ORCLCDB';
  4. 다음 오류 메시지가 나타나면 데이터베이스에 다시 접속하십시오.
    RMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-03002: failure of restore command at 09/24/2020 21:10:13
    RMAN-06496: must use the TO clause when the database is mounted or open
    1. 데이터베이스 종료
      RMAN> shutdown;
    2. 데이터베이스에 접속
      RMAN> startup nomount;
  5. 복구 카탈로그 대신 데이터베이스 제어 파일을 사용하여 복원합니다.
    RMAN> restore standby controlfile from service 'ORCLCDB';
    다음과 같이 출력됩니다:
    Starting restore at DD-MM-YY
    using target database control file instead of recovery catalog
    allocated channel: ORA_DISK_1
    channel ORA_DISK_1: SID=182 device type=DISK 
    channel ORA_DISK_1: starting datafile backup set restore
    channel ORA_DISK_1: using network backup set from service ORCLCDB
    channel ORA_DISK_1: restoring control file
    channel ORA_DISK_1: restore complete, elapsed time: 00:00:02
    output file name=/u02/app/oracle/oradata/ORCLCDB_iad1s3/control01.ctl
    output file name=/u03/app/oracle/fast_recovery_area/ORCLCDB_IAD1S3/control02.ctl
    Finished restore at DD-MM-YY
  6. 데이터베이스를 마운트합니다.
    RMAN> alter database mount;
  7. 다음과 유사한 오류 메시지가 나타나면 데이터베이스에 재접속합니다.
    오류 메시지가 표시되지 않으면 8단계로 이동합니다.
    Released channel: ORA_DISK_1
    RMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-03002: failure of sql statement command at 09/24/2020 21:13:41
    RMAN-06189: current DBID 2822997440 does not match target mounted database (2823031995)
    1. 데이터베이스 종료
      RMAN> shutdown immediate;
      다음과 같이 출력됩니다:
      database dismounted
      Oracle instance shutdown
    2. 데이터베이스에 접속
      RMAN> startup nomount;
      다음과 같이 출력됩니다:
      connected to target database (not started)
      Oracle instance startedTotal System Global Area 14495511760 bytesFixed Size 9151696 bytes
      Variable Size 1912602624 bytes
      Database Buffers 12549357568 bytes
      Redo Buffers 24399872 bytes
    3. 데이터베이스 식별자를 설정합니다.
      RMAN> set DBID=2823031995;
      다음과 같이 출력됩니다:
      executing command: SET DBID
  8. OCI 인스턴스에서 루트로 Oracle 디렉토리의 권한을 open(chmod 777) 으로 변경합니다.
    [root@drdb opc]# sudo su
    [root@drdb opc]# cd /opt/
    [root@drdb opt]# ls -lrt
    total 8
    drwx------ 7 root root 4096 Sep 12 00:39 zookeeper
    drwxr-xr-x 6 root root 4096 Sep 12 00:51 oracle
    [root@drdb opt]# chmod 777 oracle/
    [root@drdb opt]# ls -lrt
    total 8
    drwx------ 7 root root 4096 Sep 12 00:39 zookeeper
    drwxrwxrwx 6 root root 4096 Sep 12 00:51 oracle
  9. 기본 데이터베이스(ORCLCDB) 에서 데이터베이스를 복원합니다.
    RMAN> restore database from service 'ORCLCDB' section size 5G;
    비교 검토 백업 및 비교 검토 복사가 완료되면 다음과 같이 카탈로그화된 파일 목록이 출력에 나타납니다:
    Starting restore at 01-SEP-20
    Starting implicit crosscheck backup at 01-SEP-20
    allocated channel: ORA_DISK_1
    channel ORA_DISK_1: SID=184 device type=DISK
    Finished implicit crosscheck backup at 01-SEP-20
    
    Starting implicit crosscheck copy at 01-SEP-20
    using channel ORA_DISK_1
    Finished implicit crosscheck copy at 01-SEP-20
    
    searching for all files in the recovery area
    cataloging files...
    cataloging done
    
    List of Cataloged Files
    =======================
    File Name: /u03/app/oracle/fast_recovery_area/ORCLCDB_IAD1S3/archivelog/2020_08_27/o1_mf_1_3_hngo1gl6_.arc
    File Name: /u03/app/oracle/fast_recovery_area/ORCLCDB_IAD1S3/archivelog/2020_08_27/o1_mf_1_1_hngnvtgb_.arc
    File Name: /u03/app/oracle/fast_recovery_area/ORCLCDB_IAD1S3/archivelog/2020_08_27/o1_mf_1_2_hngnwdfd_.arc
    
    using channel ORA_DISK_1
    
    channel ORA_DISK_1: starting datafile backup set restore
    channel ORA_DISK_1: using network backup set from service ORCLCDB
    channel ORA_DISK_1: specifying datafile(s) to restore from backup set
    channel ORA_DISK_1: restoring datafile 00001 to /opt/oracle/oradata/ORCLCDB/system01.dbf
    channel ORA_DISK_1: restoring section 1 of 1
    channel ORA_DISK_1: restore complete, elapsed time: 00:00:26
    channel ORA_DISK_1: starting datafile backup set restore
    channel ORA_DISK_1: using network backup set from service ORCLCDB
    channel ORA_DISK_1: specifying datafile(s) to restore from backup set
    channel ORA_DISK_1: restoring datafile 00003 to /opt/oracle/oradata/ORCLCDB/sysaux01.dbf
    channel ORA_DISK_1: restoring section 1 of 1
    channel ORA_DISK_1: restore complete, elapsed time: 00:00:15
    channel ORA_DISK_1: starting datafile backup set restore
    channel ORA_DISK_1: using network backup set from service ORCLCDB
    channel ORA_DISK_1: specifying datafile(s) to restore from backup set
    channel ORA_DISK_1: restoring datafile 00004 to /opt/oracle/oradata/ORCLCDB/undotbs01.dbf
    channel ORA_DISK_1: restoring section 1 of 1
    channel ORA_DISK_1: restore complete, elapsed time: 00:00:08
    channel ORA_DISK_1: starting datafile backup set restore
    channel ORA_DISK_1: using network backup set from service ORCLCDB
    channel ORA_DISK_1: specifying datafile(s) to restore from backup set
    channel ORA_DISK_1: restoring datafile 00005 to /opt/oracle/oradata/ORCLCDB/pdbseed/system01.dbf
    channel ORA_DISK_1: restoring section 1 of 1
    channel ORA_DISK_1: restore complete, elapsed time: 00:00:07
    channel ORA_DISK_1: starting datafile backup set restore
    channel ORA_DISK_1: using network backup set from service ORCLCDB
    channel ORA_DISK_1: specifying datafile(s) to restore from backup set
    channel ORA_DISK_1: restoring datafile 00006 to /opt/oracle/oradata/ORCLCDB/pdbseed/sysaux01.dbf
    channel ORA_DISK_1: restoring section 1 of 1
    channel ORA_DISK_1: restore complete, elapsed time: 00:00:08
    channel ORA_DISK_1: starting datafile backup set restore
    channel ORA_DISK_1: using network backup set from service ORCLCDB
    channel ORA_DISK_1: specifying datafile(s) to restore from backup set
    channel ORA_DISK_1: restoring datafile 00007 to /opt/oracle/oradata/ORCLCDB/users01.dbf
    channel ORA_DISK_1: restoring section 1 of 1
    channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
    channel ORA_DISK_1: starting datafile backup set restore
    channel ORA_DISK_1: using network backup set from service ORCLCDB
    channel ORA_DISK_1: specifying datafile(s) to restore from backup set
    channel ORA_DISK_1: restoring datafile 00008 to /opt/oracle/oradata/ORCLCDB/pdbseed/undotbs01.dbf
    channel ORA_DISK_1: restoring section 1 of 1
    channel ORA_DISK_1: restore complete, elapsed time: 00:00:04
    channel ORA_DISK_1: starting datafile backup set restore
    channel ORA_DISK_1: using network backup set from service ORCLCDB
    channel ORA_DISK_1: specifying datafile(s) to restore from backup set
    channel ORA_DISK_1: restoring datafile 00009 to /opt/oracle/oradata/ORCLCDB/ORCLPDB1/system01.dbf
    channel ORA_DISK_1: restoring section 1 of 1
    channel ORA_DISK_1: restore complete, elapsed time: 00:00:07
    channel ORA_DISK_1: starting datafile backup set restore
    channel ORA_DISK_1: using network backup set from service ORCLCDB
    channel ORA_DISK_1: specifying datafile(s) to restore from backup set
    channel ORA_DISK_1: restoring datafile 00010 to /opt/oracle/oradata/ORCLCDB/ORCLPDB1/sysaux01.dbf
    channel ORA_DISK_1: restoring section 1 of 1
    channel ORA_DISK_1: restore complete, elapsed time: 00:00:08
    channel ORA_DISK_1: starting datafile backup set restore
    channel ORA_DISK_1: using network backup set from service ORCLCDB
    channel ORA_DISK_1: specifying datafile(s) to restore from backup set
    channel ORA_DISK_1: restoring datafile 00011 to /opt/oracle/oradata/ORCLCDB/ORCLPDB1/undotbs01.dbf
    channel ORA_DISK_1: restoring section 1 of 1
    channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
    channel ORA_DISK_1: starting datafile backup set restore
    channel ORA_DISK_1: using network backup set from service ORCLCDB
    channel ORA_DISK_1: specifying datafile(s) to restore from backup set
    channel ORA_DISK_1: restoring datafile 00012 to /opt/oracle/oradata/ORCLCDB/ORCLPDB1/users01.dbf
    channel ORA_DISK_1: restoring section 1 of 1
    channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
    Finished restore at 01-SEP-20
  10. 데이터베이스를 종료합니다.
    RMAN> Shutdown immediate;
  11. Server Control(srvctl) 유틸리티 또는 SQL*Plus를 사용하여 대기 데이터베이스를 재시작합니다.
    • srvctl 유틸리티를 사용하여 데이터베이스를 시작합니다:
      srvctl start instance -d standby DB_UNIQUE_NAME -i standby instance name -o mount
    • SQL*Plus를 사용하여 데이터베이스를 시작합니다:
      $ ./sqlplus / as sysdba
  12. 데이터베이스를 마운트합니다.
    SQL> startup mount
    다음과 같이 출력됩니다:
    ORACLE instance started.
    
    Total System Global Area 1.4496E+10 bytes
    Fixed Size		    9151696 bytes
    Variable Size		 1912602624 bytes
    Database Buffers	 1.2549E+10 bytes
    Redo Buffers		   24399872 bytes
    Database mounted.
  13. 데이터베이스를 변경합니다.
    SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
    Database altered.
  14. 데이터베이스에 대한 롤, 스레드 번호, 시퀀스 번호 및 작업을 봅니다.
    SQL> SELECT ROLE, THREAD#, SEQUENCE#, ACTION FROM V$DATAGUARD_PROCESS;
    다음과 같이 출력됩니다:
    ROLE			    THREAD#  SEQUENCE# ACTION
    ------------------------ ---------- ---------- ------------
    post role transition		  0	     0 IDLE
    recovery apply slave		  0	     0 IDLE
    recovery apply slave		  0	     0 IDLE
    recovery apply slave		  0	     0 IDLE
    recovery apply slave		  0	     0 IDLE
    recovery logmerger		  1	     7 WAIT_FOR_LOG
    managed recovery		  0	     0 IDLE
    archive redo			  0	     0 IDLE
    archive local			  0	     0 IDLE
    redo transport timer		  0	     0 IDLE
    gap manager			  0	     0 IDLE
    archive redo			  0	     0 IDLE
    archive redo			  0	     0 IDLE
    redo transport monitor	0	     0 IDLE
    log writer			  0	     0 IDLE
    
    15 rows selected.
  15. (선택사항) 데이터베이스 이름 및 롤을 봅니다.
    SQL> select name, database_role from v$database;
    다음과 같이 출력됩니다:
    NAME	  DATABASE_ROLE
    --------- ----------------
    ORCLCDB   PHYSICAL STANDBY
  16. sysdba로 설정하면 모든 온라인 대기 redo 로그를 지웁니다.
    $ sqlplus “/ as sysdba” 
    SQL> alter system set db_create_online_log_dest_1=<DATA Disk group>; 
    SQL> set pagesize 0 feedback off linesize 120 trimspool on 
    SQL> spool /tmp/clearlogs.sql 
    SQL> select distinct 'alter database clear logfile group '||group#||';' from v$logfile; 
    SQL> spool off 
    SQL> @/tmp/clearlogs.sql 
    SQL> select member from v$logfile;

tnsnames.ora 파일에 RAC 인스턴스 추가

Oracle RAC(Oracle Real Application Clusters)경우 Oracle RAC 인스턴스를 tnsnames.ora에 추가하고 리스너를 재시작합니다. 스캔 이름은 하이브리드 구성에서 어느 방향으로든 분석할 수 없으므로 고가용성을 제공하도록 주소 목록을 구성해야 합니다.

  1. 온-프레미스 데이터베이스 호스트에서 TNSNAMES.ORA 파일을 편집합니다.
    Primary db_unique_name = (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 = PrimaryDB Node 1IP address)(PORT = {1521|port#})) 
    (ADDRESS = (PROTOCOL = TCP)(HOST = StandbyDB Node 2IP address)(PORT = {1521|port#})) 
    ) 
    (CONNECT_DATA = 
    (SERVER = DEDICATED) 
    (SERVICE_NAME = Primary_db_SID) 
    (UR=A) 
    )) 
    
    Standby db_unique_name = (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 = StandbyDB Node 1IP address)(PORT = {1521|port#})) 
    (ADDRESS = (PROTOCOL = TCP)(HOST = StandbyDB Node 2IP address)(PORT = {1521|port#})) 
    ) 
    (CONNECT_DATA = 
    (SERVER = DEDICATED) 
    (SERVICE_NAME = Primary_db_SID) 
    (UR=A) 
    )) 
  2. OCI(Oracle Cloud Infrastructure) 에서 대기 데이터베이스 호스트의 TNSNAMES.ORA 파일을 편집합니다.
    Standby db_unique_name = (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 = StandbyDB Node 1IP address)(PORT = {1521|port#})) 
    (ADDRESS = (PROTOCOL = TCP)(HOST = StandbyDB Node 2IP address)(PORT = {1521|port#})) 
    ) 
    (CONNECT_DATA = 
    (SERVER = DEDICATED) 
    (SERVICE_NAME = Primary_db_SID) 
    (UR=A) 
    )) 
    
    <Primary db_unique_name> = (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 = PrimaryDB Node 1IP address)(PORT = {1521|port#})) 
    (ADDRESS = (PROTOCOL = TCP)(HOST = StandbyDB Node 2IP address)(PORT = {1521|port#})) 
    ) 
    (CONNECT_DATA = 
    (SERVER = DEDICATED) 
    (SERVICE_NAME = Primary_db_SID) 
    (UR=A) 
    ))