Configuring Active Data Guard in Oracle 26AI Multitenant Database
1. Introduction
Active Data Guard enables a standby database to be open in read-only mode while continuously applying redo logs from the primary database. This provides:
High availability
Disaster recovery
Real-time reporting
This document provides a complete step-by-step guide to configure Active Data Guard in an Oracle 26AI Multitenant environment.
2. Prerequisites
Source and Target servers with Oracle Linux 8/9
Primary server with Oracle 26AI Database installed
Standby server with Oracle 26AI Software installed
Network connectivity between servers (
tnspingmust work)
3. Environment Details
Database Name: AIDB
PDB Name: AIPDB
Primary Host: 192.168.226.129
Standby Host: 192.168.226.130
4. Network Configuration
4.1 Primary Database – TNS Configuration
File location:
$ORACLE_HOME/network/admin/tnsnames.ora
LISTENER_AIDB =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.226.129)(PORT = 1521))
PRIMARY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.226.129)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = PRIMARY)
)
)
AIPDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.226.129)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = AIPDB)
)
)
STANDBY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.226.130)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = STANDBY)
)
)
4.2 Primary Listener Configuration
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.226.129)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = PRIMARY)
(ORACLE_HOME = /u01/app/oracle/product/home)
(SID_NAME = AIDB)
)
)
4.3 Standby Database – TNS Configuration
LISTENER_AIDB =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.226.130)(PORT = 1521))
STANDBY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.226.130)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = STANDBY)
)
)
PRIMARY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.226.129)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = PRIMARY)
)
)
4.4 Standby Listener Configuration
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.226.130)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = STANDBY)
(ORACLE_HOME = /u01/app/oracle/product/home)
(SID_NAME = AIDB)
)
)
5. Primary Database Configuration
5.1 Enable Archivelog Mode
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
5.2 Enable Force Logging
ALTER DATABASE FORCE LOGGING;
5.3 Set Data Guard Parameters
ALTER SYSTEM SET db_unique_name='PRIMARY' SCOPE=SPFILE;
ALTER SYSTEM SET log_archive_config='DG_CONFIG=(PRIMARY,STANDBY)' SCOPE=BOTH;
ALTER SYSTEM SET log_archive_dest_1=
'LOCATION=/u01/app/oracle/product/home/dbs/arch
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=PRIMARY' SCOPE=BOTH;
ALTER SYSTEM SET log_archive_dest_2=
'SERVICE=STANDBY
ASYNC
NOAFFIRM
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=STANDBY' SCOPE=BOTH;
ALTER SYSTEM SET FAL_CLIENT=PRIMARY SCOPE=BOTH;
ALTER SYSTEM SET FAL_SERVER=STANDBY SCOPE=BOTH;
ALTER SYSTEM SET standby_file_management='AUTO' SCOPE=BOTH;
ALTER SYSTEM SET db_file_name_convert=
'/u01/.../AIDB','/u01/.../AIDB' SCOPE=BOTH;
ALTER SYSTEM SET log_file_name_convert=
'/u01/.../AIDB','/u01/.../AIDB' SCOPE=BOTH;
5.4 Create Standby Redo Logs
ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 ('/path/srl04.log') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 ('/path/srl05.log') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 ('/path/srl06.log') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 7 ('/path/srl07.log') SIZE 200M;
5.5 Copy Required Files
scp initAIDB.ora orapwAIDB oracle@192.168.226.130:$ORACLE_HOME/dbs
6. Standby Database Configuration
6.1 Start Standby in NOMOUNT
STARTUP NOMOUNT PFILE='initAIDB.ora';
6.2 Duplicate Database Using RMAN
rman target sys/password@PRIMARY auxiliary sys/password@STANDBY
DUPLICATE TARGET DATABASE
FOR STANDBY
FROM ACTIVE DATABASE
NOFILENAMECHECK;
6.3 Verify Database State
SELECT name, open_mode FROM v$database;
7. Enable Active Data Guard
7.1 Open Standby in Read-Only Mode
ALTER DATABASE OPEN READ ONLY;
7.2 Start Managed Recovery Process (MRP)
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
8. Validation Checks
8.1 Check MRP Status
SELECT process, status FROM v$managed_standby;
8.2 Check Lag
SELECT name, value
FROM v$dataguard_stats
WHERE name IN ('transport lag','apply lag');
8.3 Archive Gap Check
SELECT * FROM v$archive_gap;
8.4 Synchronization Check
SELECT
arch.sequence# AS received,
appl.sequence# AS applied,
(arch.sequence# - appl.sequence#) AS gap
FROM
(SELECT MAX(sequence#) sequence# FROM v$archived_log) arch,
(SELECT MAX(sequence#) sequence# FROM v$log_history) appl;
9. Switchover Process
9.1 On Primary
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
STARTUP MOUNT;
ALTER DATABASE OPEN READ ONLY;
9.2 On Standby
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
ALTER DATABASE OPEN;
9.3 Restart MRP
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
10. Useful Monitoring Queries
MRP Status
SELECT process, status FROM v$managed_standby;
Lag Check
SELECT name, value FROM v$dataguard_stats;
Archive Gap
SELECT * FROM v$archive_gap;
11. Conclusion
Active Data Guard setup involves:
Network configuration
Primary database preparation
Standby database creation using RMAN
Enabling redo apply (MRP)
Validating synchronization and lag
A properly configured Active Data Guard environment ensures high availability, data protection, and real-time reporting capabilities.
No comments:
Post a Comment