- Deploy a hybrid DR topology for an on-premises Oracle Exadata
- Create a Standby Instance
Create a Standby Instance
Create a standby cloud instance from the primary database.
Create an Archive Log
Check the log mode of your on-premises Oracle Exadata Database Machine. If it's in NOARCHIVELOG mode, then change it to
ARCHIVELOG mode to create an archive log.
- View the log mode for the on-premises server.
SQL> select log_mode from v$database;The output will look similar to the following when the log mode is inNOARCHIVELOGmode:LOG_MODE ------------ NOARCHIVELOG - Shut down the on-premises instance.
SQL> shutdown immediate;The output will look similar to the following:Database closed. Database dismounted. ORACLE instance shut down. - Mount the on-premises database.
SQL> startup mount;The output will look similar to the following: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. - Alter the database archive log, then open the database.
SQL> alter database archivelog;SQL> alter database open; - Change the log mode to
ARCHIVELOG.SQL> select log_mode from v$database;LOG_MODE ------------ ARCHIVELOG - Display the archive log list.
SQL> archive log list;The output will look similar to the following:Database log mode Archive Mode Automatic archival Enabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 4 Next log sequence to archive 7 Current log sequence 7 - Archive all logs.
SQL> archive log all;ORA-00271:there are no logs that need archiving
Instantiate the Standby Database on OCI
Instantiate the standby Oracle Database Exadata Cloud Service database.
- Stop or shutdown the Oracle Database Exadata Cloud
Service database using the
srvctlutility.-
$ srvctl stop database -d standby DB_UNIQUE_NAME -o immediate -
$ srvctl stop database -d DB1_phx3g7 -o immediate
-
- Connect to the database.
SQL> startup nomount; - On the primary on-premises Oracle Exadata Database Machine, run the following series of commands to force logging and define the log
file.
SQL> alter database force logging;SQL> set linesize 500 pages 0 SQL> col value for a90 SQL> col name for a50 SQL> select name, value from v$parameter where name in ('db_name','db_unique_name','log_archive_config', 'log_archive_dest_1','log_archive_dest_2','log_archive_dest_state_1','log_archive_de st_state_2', 'remote_login_passwordfile', 'log_archive_format','log_archive_max_processes','fal_server','db_file_name_convert' ,'log_file_name_convert', 'standby_file_management');The output will look similar to the following:db_file_name_convert log_file_name_convert log_archive_dest_1 location=USE_DB_RECOVERY_FILE_DEST valid_for=(ALL_LOGFILES,ALL_ROLES) MAX_FAILURE=1 REOPEN =5 DB_UNIQUE_NAME=db1 ALTERNATE=LOG_ARCHIVE_DEST_2 log_archive_dest_2 location=+DATAC1 valid_for=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=db1 ALTERNATE=LOG_ARCHI VE_DEST_1 log_archive_dest_state_1 ENABLE log_archive_dest_state_2 ALTERNATE fal_server log_archive_config log_archive_format %t_%s_%r.dbf log_archive_max_processes 4 standby_file_management MANUAL remote_login_passwordfile EXCLUSIVE db_name db1 db_unique_name db1 14 rows selected. - Set the standby file management.
SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO SID='*'; - On the primary on-premises Oracle Exadata Database Machine, define the following parameters for log archive and standby management.
LOG_ARCHIVE_CONFIG='DG_CONFIG=(PROD1,STAND1)' LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=PROD1' LOG_ARCHIVE_DEST_2='SERVICE=STAND1 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=STAND1' LOG_ARCHIVE_DEST_STATE_1=ENABLE LOG_ARCHIVE_DEST_STATE_2=ENABLE REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE LOG_ARCHIVE_FORMAT=%t_%s_%r.arc LOG_ARCHIVE_MAX_PROCESSES=8 FAL_SERVER=STAND1 DB_FILE_NAME_CONVERT='STAND1',' PROD1' LOG_FILE_NAME_CONVERT= 'STAND1',' PROD1' STANDBY_FILE_MANAGEMENT=AUTOThe following sample includes the parameter values:ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(DB1, DB1_phx3g7)'; ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=DB1'; ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=DB1_phx3g7 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DB1_phx3g7’; ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1=ENABLE; ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=DEFER; ALTER SYSTEM SET FAL_SERVER=DB1_phx3g7; ALTER SYSTEM SET FAL_CLIENT=DB1; ALTER SYSTEM SET DB_FILE_NAME_CONVERT='DB1_phx3g7','DB1' scope=spfile; ALTER SYSTEM SET LOG_FILE_NAME_CONVERT='DB1_phx3g7','DB1' scope=spfile; ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO; - On the primary on-premises Oracle Exadata Database Machine, log in as
sysdba, then run the following series of commands to force logging.$ sqlplus / as sysdbaSQL> ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(DB1, DB1_phx3g7)'; System altered. SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=DB1'; System altered. SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=DB1_phx3g7 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DB1_phx3g7'; System altered. SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1=ENABLE; System altered. SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=DEFER; System altered. SQL> ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE;ERROR at line 1: ORA-02095: specified initialization parameter cannot be modified SQL> ALTER SYSTEM SET FAL_SERVER=DB1_phx3g7; System altered. SQL> ALTER SYSTEM SET FAL_CLIENT=DB1; System altered. SQL> ALTER SYSTEM SET DB_FILE_NAME_CONVERT='DB1_phx3g7','DB1' scope=spfile; System altered. SQL> ALTER SYSTEM SET LOG_FILE_NAME_CONVERT= 'DB1_phx3g7','DB1' scope=spfile; System altered. SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO; System altered.Do not create apfileon the primary on-premises Oracle Exadata Database Machine. Instead, use the defaultPfilecreated by the Oracle Database Exadata Cloud Service. - On the standby Oracle Database Exadata Cloud
Service, log in as
sysdba, then start the instance without mounting the database.$ sqlplus / as sysdbaSQL> startup nomount; - On the standby Oracle Database Exadata Cloud
Service, run the following series of commands to define the server, logging, and file
management.
alter system set fal_server='DB1' scope =spfile; alter system set fal_client='DB1_PHX3G7' scope =spfile; alter system set log_archive_config='DG_CONFIG=(DB1, DB1_phx3g7)' scope =spfile; alter system set log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=DB1_PHX3G7' scope =spfile; alter system set log_archive_dest_2='SERVICE=DB1 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DB1' scope =spfile; alter system set log_archive_dest_state_1='ENABLE' scope =spfile; alter system set log_archive_dest_state_2='ENABLE' scope =spfile; alter system set log_archive_format='%t_%s_%r.dbf' scope =spfile; alter system set log_file_name_convert='DB1','DB1_phx3g7' scope =spfile; alter system set db_file_name_convert='DB1','DB1_phx3g7' scope =spfile; alter system set remote_login_passwordfile='exclusive' scope =spfile; alter system set standby_file_management='AUTO' scope =spfile; - On the standby Oracle Database Exadata Cloud
Service, use Oracle Recovery Manager (RMAN) to define a test target and standby in the cloud, then run RMAN to create the
standby.
rman target sys/Test_Dr_123@DB1 auxiliary sys/Test_Dr_123@DB1_Phx3g7The output will be similar to the following:connected to target database: DB1 (DBID=1657313530) connected to auxiliary database: DB1 (not mounted)RMAN> run - On the standby Oracle Database Exadata Cloud
Service, log in as
sysdba, then disconnect from the session.$ sqlplus / as sysdbaSQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION; - On the standby Oracle Database Exadata Cloud
Service, view the logs to verify that the Media recovery is in Transit.
[oracle@exacs82-vm3sv1 DB11]$ pwd /u02/app/oracle/diag/rdbms/db1_phx3g7/DB11[oracle@exacs82-vm3sv1 trace]$ tail -f alert_DB11.logThe output will include a line similar to the following:PR00 (PID:253670): Media Recovery Waiting for T-1.S-125 (in transit) - On the primary on-premises Oracle Exadata Database Machine, log in to sqlplus as
sysdba, then run the following series of sql commands to switch the log file.$ sqlplus / as sysdbaSQL> alter system switch logfile; SQL> / SQL> / SQL> / - On the standby Oracle Database Exadata Cloud
Service, log in as
sysdba, then run the following series of commands.SQL> SELECT ARCH.THREAD# "Thread", ARCH.SEQUENCE# "Last Sequence Received", APPL.SEQUENCE# "Last Sequence Applied", (ARCH.SEQUENCE# - APPL.SEQUENCE#) "Difference" FROM (SELECT THREAD#,SEQUENCE# FROM V$ARCHIVED_LOG WHERE (THREAD#,FIRST_TIME ) IN (SELECT THREAD#,MAX(FIRST_TIME) FROM V$ARCHIVED_LOG GROUP BY THREAD#)) ARCH,(SELECT THREAD# ,SEQUENCE# FROM V$LOG_HISTORY WHERE (THREAD#,FIRST_TIME ) IN (SELECT THREAD#,MAX(FIRST_TIME) FROM V$LOG_HISTORY GROUP BY THREAD#)) APPL WHERE ARCH.THREAD# = APPL.THREAD# ORDER BY 1;Thread Last Sequence Received Last Sequence Applied Difference ---------- ---------------------- --------------------- ---------- 1 124 124 0 2 26 26 0SQL> /Thread Last Sequence Received Last Sequence Applied Difference ---------- ---------------------- --------------------- ---------- 1 124 124 0 2 26 26 0SQL> /Thread Last Sequence Received Last Sequence Applied Difference ---------- ---------------------- --------------------- ---------- 1 130 128 2 2 27 27 0SQL> /Thread Last Sequence Received Last Sequence Applied Difference ---------- ---------------------- --------------------- ---------- 1 130 128 2 2 27 27 0SQL> /Thread Last Sequence Received Last Sequence Applied Difference ---------- ---------------------- --------------------- ---------- 1 130 130 0 2 28 28 0 - On the standby Oracle Database Exadata Cloud
Service, log in as
sysdba, then run the following series of commands.SQL> alter database recover managed standby database cancel;SQL> show parameter clusterNAME TYPE VALUE ------------------------------------ ----------- ------------------------------ cdb_cluster boolean FALSE cdb_cluster_name string cluster_database boolean FALSE cluster_database_instances integer 1 cluster_interconnects string 192.0.2.22:192.0.2.23 SQL> alter system set cluster_database=TRUE scope=spfile; System altered.SQL> alter system set cluster_database=TRUE scope=spfile;SQL> show parameter cluster;NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ cdb_cluster boolean FALSE cdb_cluster_name string cluster_database boolean FALSE cluster_database_instances integer 1 cluster_interconnects string 192.0.2.22:192.0.2.23 SQL> / System altered.SQL> show parameter pluggable;NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ enable_pluggable_database boolean FALSE SQL> shutdown; ORA-01109: database not open Database dismounted. ORACLE instance shut down. - On the standby Oracle Database Exadata Cloud
Service, display the status of the resources and confirm that they are all
online.
[grid@exacs82-vm3sv1 ~]$ crsctl stat resThe output will include the type, target status, and state for each resource. For example, :NAME=ora.ASMNET1LSNR_ASM.lsnr(ora.asmgroup) TYPE=ora.asm_listener.type TARGET=ONLINE , ONLINE STATE=ONLINE on exacs82-vm3sv1, ONLINE on exacs82-vm3sv2 NAME=ora.DATAC1.ACFSVOL01.advm TYPE=ora.volume.type TARGET=ONLINE , ONLINE STATE=ONLINE on exacs82-vm3sv1, ONLINE on exacs82-vm3sv2 NAME=ora.DATAC1.dg(ora.asmgroup) TYPE=ora.diskgroup.type TARGET=ONLINE , ONLINE STATE=ONLINE on exacs82-vm3sv1, ONLINE on exacs82-vm3sv2 NAME=ora.LISTENER.lsnr TYPE=ora.listener.type TARGET=ONLINE , ONLINE STATE=ONLINE on exacs82-vm3sv1, ONLINE on exacs82-vm3sv2 . . . - On the standby Oracle Database Exadata Cloud
Service, start and mount the database.
[oracle@exacs82-vm3sv1 ~]$ source DB1.env [oracle@exacs82-vm3sv1 ~]$ srvctl start database -db db1_phx3g7 -startoption mount - On Node 1 of the standby Oracle Database Exadata Cloud
Service, log in as
sysdba, mount the database inopen_mode, then exit.oracle@exacs82-vm3sv1SQL> select open_mode from v$database;The output will be similar to the following:OPEN_MODE -------------------- MOUNTEDSQL> exit - On Node 2 of the standby Oracle Database Exadata Cloud
Service, log in as
sysdba, mount the database inopen_mode, then exit.oracle@exacs82-vm3sv2SQL> select open_mode from v$database;The output will be similar to the following:OPEN_MODE -------------------- MOUNTEDSQL> exit - Disconnect from the session.
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;The output will be similar to the following: - On the primary on-premises Oracle Exadata Database Machine, run the following series of SQL commands for the log file.
SQL> alter database force logging;SQL> /SQL> / - On the standby Oracle Database Exadata Cloud
Service, log in as
sysdba, then run the following series of commands.SQL> SELECT ARCH.THREAD# "Thread", ARCH.SEQUENCE# "Last Sequence Received", APPL.SEQUENCE# "Last Sequence Applied", (ARCH.SEQUENCE# - APPL.SEQUENCE#) "Difference" FROM (SELECT THREAD#,SEQUENCE# FROM V$ARCHIVED_LOG WHERE (THREAD#,FIRST_TIME ) IN (SELECT THREAD#,MAX(FIRST_TIME) FROM V$ARCHIVED_LOG GROUP BY THREAD#)) ARCH,(SELECT THREAD# ,SEQUENCE# FROM V$LOG_HISTORY WHERE (THREAD#,FIRST_TIME ) IN (SELECT THREAD#,MAX(FIRST_TIME) FROM V$LOG_HISTORY GROUP BY THREAD#)) APPL WHERE ARCH.THREAD# = APPL.THREAD# ORDER BY 1;Thread Last Sequence Received Last Sequence Applied Difference ---------- ---------------------- --------------------- ---------- 1 161 161 0 2 41 41 0SQL> /Thread Last Sequence Received Last Sequence Applied Difference ---------- ---------------------- --------------------- ---------- 1 161 161 0 2 41 41 0SQL> /Thread Last Sequence Received Last Sequence Applied Difference ---------- ---------------------- --------------------- ---------- 1 161 161 0 2 41 41 0SQL> /Thread Last Sequence Received Last Sequence Applied Difference ---------- ---------------------- --------------------- ---------- 1 163 161 2 2 41 41 0SQL> /Thread Last Sequence Received Last Sequence Applied Difference ---------- ---------------------- --------------------- ---------- 1 163 161 2 2 41 41 0SQL> /Thread Last Sequence Received Last Sequence Applied Difference ---------- ---------------------- --------------------- ---------- 1 163 163 0 2 42 42 0 - On the primary on-premises Oracle Exadata Database Machine, verify that the
tnsnames.orafile is properly configured for the following:
Verify theDB1 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = exa11-scan1)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = db1.us.osc.oracle.com) (INSTANCE_NAME = db12) ) ) DB1_phx3g7 = (DESCRIPTION = (SDU = 65536) (RECV_BUF_SIZE = 134217728) (SEND_BUF_SIZE = 134217728) (ADDRESS_LIST = (CONNECT_TIMEOUT = 3) (RETRY_COUNT = 3) (ADDRESS = (PROTOCOL = TCP)(HOST = 10.255.195.136)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = DB1_phx3g7.datasubnetactiv.oscphevcn.oraclevcn.com) (UR = A) ) )tnsnamesfor the on-premises database (db1):[oracle@exa11db01 admin]$ tnsping db1
Verify theUsed parameter files: /u01/app/oracle/product/19.0.0.0/dbhome_1/network/admin/sqlnet.ora Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = exa11-scan1)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = db1.us.osc.oracle.com) (INSTANCE_NAME = db11))) OK (0 msec)tnsnamesfor the Oracle Database Exadata Cloud Service instance (DB1_phx3g7):[oracle@exa11db01 admin]$ tnsping DB1_phx3g7TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 05-FEB-2021 16:19:15 Copyright (c) 1997, 2020, Oracle. All rights reserved. Used parameter files: /u01/app/oracle/product/19.0.0.0/dbhome_1/network/admin/sqlnet.ora Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (SDU = 65536) (RECV_BUF_SIZE = 134217728) (SEND_BUF_SIZE = 134217728) (ADDRESS_LIST = (CONNECT_TIMEOUT = 3) (RETRY_COUNT = 3) (ADDRESS = (PROTOCOL = TCP)(HOST = 10.255.195.136)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = DB1_phx3g7.datasubnetactiv.oscphevcn.oraclevcn.com) (UR = A))) OK (40 msec) - On the standby Oracle Database Exadata Cloud
Service, verify that the
tnsnames.orafile is properly configured for the following:
Verify thedb1 = (DESCRIPTION = (SDU=65536) (RECV_BUF_SIZE=134217728) (SEND_BUF_SIZE=134217728) (ADDRESS_LIST = (CONNECT_TIMEOUT=3)(RETRY_COUNT=3) (ADDRESS = (PROTOCOL = TCP)(HOST = 10.136.74.18)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = db1.us.osc.oracle.com) (UR=A) ) ) DB1_phx3g7 = (DESCRIPTION = (SDU = 65536) (RECV_BUF_SIZE = 134217728) (SEND_BUF_SIZE = 134217728) (ADDRESS_LIST = (CONNECT_TIMEOUT = 3) (RETRY_COUNT = 3) (ADDRESS = (PROTOCOL = TCP)(HOST = 10.255.195.136)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = DB1_phx3g7.datasubnetactiv.oscphevcn.oraclevcn.com) (INSTANCE_NAME = DB12) (UR = A) ) )tnsnamesfor the on-premises database (db1):[oracle@exacs82-vm3sv2 DB1]$ tnsping db1
Verify theTNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 05-FEB-2021 16:34:59 Copyright (c) 1997, 2020, Oracle. All rights reserved. Used parameter files: /u02/app/oracle/product/19.0.0.0/dbhome_5/network/admin/DB1/sqlnet.ora Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (SDU=65536) (RECV_BUF_SIZE=134217728) (SEND_BUF_SIZE=134217728) (ADDRESS_LIST = (CONNECT_TIMEOUT=3)(RETRY_COUNT=3) (ADDRESS = (PROTOCOL = TCP)(HOST = 10.136.74.18)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = db1.us.osc.oracle.com) (UR=A))) OK (40 msec)tnsnamesfor the Oracle Database Exadata Cloud Service instance (DB1_phx3g7):[oracle@exacs82-vm3sv2 DB1]$ tnsping DB1_phx3g7TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 05-FEB-2021 16:35:15 Copyright (c) 1997, 2020, Oracle. All rights reserved. Used parameter files: /u02/app/oracle/product/19.0.0.0/dbhome_5/network/admin/DB1/sqlnet.ora Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (SDU = 65536) (RECV_BUF_SIZE = 134217728) (SEND_BUF_SIZE = 134217728) (ADDRESS_LIST = (CONNECT_TIMEOUT = 3) (RETRY_COUNT = 3) (ADDRESS = (PROTOCOL = TCP)(HOST = 10.255.195.136)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = DB1_phx3g7.datasubnetactiv.oscphevcn.oraclevcn.com) (INSTANCE_NAME = DB12) (UR = A))) OK (0 msec)