- 온프레미스 데이터베이스에 대한 하이브리드 DR 토폴로지 배포
- RMAN을 사용하여 대기 인스턴스 생성
RMAN을 사용하여 대기 인스턴스 생성
RMAN(Oracle Recovery Manager) 을 사용하여 기본 데이터베이스에서 대기 클라우드 인스턴스를 생성합니다.
아카이브 로그 생성
온-프레미스 Oracle 서버의 로그 모드를 확인하십시오. NOARCHIVELOG
모드인 경우 ARCHIVELOG
모드로 변경하여 아카이브 로그를 생성합니다.
- 온-프레미스 서버에 대한 로그 모드를 봅니다.
SQL> select log_mode from v$database;
로그 모드가NOARCHIVELOG
모드인 경우 출력은 다음과 비슷합니다:LOG_MODE ------------ NOARCHIVELOG
- 온-프레미스 인스턴스를 종료합니다.
SQL> shutdown immediate;
다음과 같이 출력됩니다:Database closed. Database dismounted. ORACLE instance shut down.
- 온-프레미스 데이터베이스를 마운트합니다.
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.
- 데이터베이스 아카이브 로그를 변경한 다음 데이터베이스를 엽니다.
SQL> alter database archivelog;
SQL> alter database open;
- 로그 모드를
ARCHIVELOG
로 변경합니다.SQL> select log_mode from v$database;
LOG_MODE ------------ ARCHIVELOG
- 아카이브 로그 목록을 표시합니다.
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
- 모든 로그를 아카이브합니다.
SQL> archive log all;
ORA-00271:there are no logs that need archiving
OCI에서 대기 데이터베이스 인스턴스화
Oracle Recovery Manager(RMAN) 를 사용하여 OCI(Oracle Cloud Infrastructure) 에서 활성 기본 데이터베이스를 복제합니다. 또는 기본 데이터베이스의 백업에서 복제할 수도 있습니다.
srvctl
유틸리티를 사용하여 데이터베이스를 정지하거나 SQL*Plus를 사용하여 데이터베이스를 종료합니다.-
$ srvctl stop database -d standby DB_UNIQUE_NAME -o immediate
-
Shutdown immediate;
-
- 데이터베이스에 연결합니다.
$ rman target / RMAN> startup nomount;
- 기본 서비스에서 대기 제어 파일을 복원합니다.이 예제에서 ORCLCDB는 기본 온-프레미스 데이터베이스입니다.
RMAN> restore standby controlfile from service 'ORCLCDB';
- 다음 오류 메시지가 나타나면 데이터베이스에 다시 접속하십시오.
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
- 데이터베이스 종료
RMAN> shutdown;
- 데이터베이스에 접속
RMAN> startup nomount;
- 데이터베이스 종료
- 복구 카탈로그 대신 데이터베이스 제어 파일을 사용하여 복원합니다.
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
- 데이터베이스를 마운트합니다.
RMAN> alter database mount;
- 다음과 유사한 오류 메시지가 나타나면 데이터베이스에 재접속합니다.오류 메시지가 표시되지 않으면 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)
- 데이터베이스 종료
RMAN> shutdown immediate;
다음과 같이 출력됩니다:database dismounted Oracle instance shutdown
- 데이터베이스에 접속
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
- 데이터베이스 식별자를 설정합니다.
RMAN> set DBID=2823031995;
다음과 같이 출력됩니다:executing command: SET DBID
- 데이터베이스 종료
- 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
- 기본 데이터베이스(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
- 데이터베이스를 종료합니다.
RMAN> Shutdown immediate;
- 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
- 데이터베이스를 마운트합니다.
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.
- 데이터베이스를 변경합니다.
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Database altered.
- 데이터베이스에 대한 롤, 스레드 번호, 시퀀스 번호 및 작업을 봅니다.
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.
- (선택사항) 데이터베이스 이름 및 롤을 봅니다.
SQL> select name, database_role from v$database;
다음과 같이 출력됩니다:NAME DATABASE_ROLE --------- ---------------- ORCLCDB PHYSICAL STANDBY
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
에 추가하고 리스너를 재시작합니다. 스캔 이름은 하이브리드 구성에서 어느 방향으로든 분석할 수 없으므로 고가용성을 제공하도록 주소 목록을 구성해야 합니다.
- 온-프레미스 데이터베이스 호스트에서
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) ))
- 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) ))