Creating Physical Standby Database without Backup of Primary Database
1. Primary Database Preparation
Ensure the primary database is configured for Data Guard.
Check Database Mode
SELECT log_mode FROM v$database;
Database must be in ARCHIVELOG mode.
If not:
shutdown immediate;
startup mount;
alter database archivelog;
alter database open;
Enable FORCE LOGGING
Ensures all operations generate redo.
ALTER DATABASE FORCE LOGGING;
Verify:
SELECT force_logging FROM v$database;
Create Standby Redo Logs
Standby redo logs should be (Online Redo Groups + 1).
Example:
ALTER DATABASE ADD STANDBY LOGFILE
GROUP 4 ('/u01/oradata/redo04.log') SIZE 500M;
ALTER DATABASE ADD STANDBY LOGFILE
GROUP 5 ('/u01/oradata/redo05.log') SIZE 500M;
ALTER DATABASE ADD STANDBY LOGFILE
GROUP 6 ('/u01/oradata/redo06.log') SIZE 500M;
2. Configure Initialization Parameters
Edit spfile / pfile on the primary database.
ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(PRIMDB,STBYDB)';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1=
'LOCATION=/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=PRIMDB';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2=
'SERVICE=STBYDB ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=STBYDB';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE;
ALTER SYSTEM SET FAL_SERVER=STBYDB;
ALTER SYSTEM SET FAL_CLIENT=PRIMDB;
ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;
3. Configure Listener and TNS
On both servers, configure listener.ora and tnsnames.ora.
Example tnsnames.ora
PRIMDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = primary_host)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = PRIMDB)
)
)STBYDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = standby_host)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = STBYDB)
)
)
Test connectivity:
tnsping PRIMDB
tnsping STBYDB
4. Create Password File
Password files must be identical.
On primary:
orapwd file=$ORACLE_HOME/dbs/orapwPRIMDB password=oracle entries=10
Copy to standby server:
scp orapwPRIMDB standby:/u01/app/oracle/product/19/dbhome/dbs/orapwSTBYDB
5. Create Standby Database Using RMAN Duplicate
Start standby instance in NOMOUNT.
startup nomount;
Run RMAN from standby server:
rman target sys@PRIMDB auxiliary sys@STBYDB
Execute:
DUPLICATE TARGET DATABASE
FOR STANDBY
FROM ACTIVE DATABASE
DORECOVER
NOFILENAMECHECK;
This command:
• Copies datafiles
• Creates controlfile
• Synchronizes archive logs
6. Start Managed Recovery
After duplication completes:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
USING CURRENT LOGFILE
DISCONNECT FROM SESSION;
This enables Real-Time Apply.
7. Verify Data Guard Configuration
Check synchronization.
On Standby
SELECT open_mode, database_role FROM v$database;
Expected:
PHYSICAL STANDBY
Check Log Apply
SELECT sequence#, applied
FROM v$archived_log
ORDER BY sequence#;
Check Data Guard Status
SELECT process,status FROM v$managed_standby;
Expected processes:
• MRP0 – Managed Recovery
• RFS – Redo Fetch Server
8. Open Standby for Read Only (Optional)
ALTER DATABASE OPEN READ ONLY;
Then start apply again:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
This is Active Data Guard.
Quick Architecture Summary
Primary DB
↓ Redo Transport
Standby DB
Redo shipped via ARCn / LGWR → RFS → MRP applies redo.
No Comments