Oracle 12c Data Guard with Active DataGuard feature
Oracle 12c Data Guard Configuration (Active Data guard Database using RMAN DUPLICATE FROM ACTIVE command) on Redhat Linux 6 using VMware environment step by step.
Requirements:
1) Two machines with Redhat Linux 6 OS.
2) Oracle 12c Database software.
3) Primary Database name OCPPR & IP ADDRESS IS 192.168.1.10
4) Standby Database name OCPDR & IP ADDRESS IS 192.168.1.20
Note: – we are going to configure Oracle Data Guard on 12c Container Database, On the Primary machine install Oracle software with one database configuration & on the Standby machine install only Oracle 12c software without any Database.
The parameter DB_NAME will same on both nodes, but parameter DB_UNIQUE_NAME must be different.
Primary side configurations
Step-1. Install Oracle 12c software with one Database Click Here
Start Oracle 12c configuration
Step-2. Check Primary Database must be running in archive log mode if not, change it.
SQL> SELECT log_mode FROM v$database;
LOG_MODE
------------
NOARCHIVELOG
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;
Enable Force Logging
Step-3. Enable force logging using the following command.
SQL> alter database force logging;
At least one log file available
SQL> alter system switch logfile;
Create standby redos
Step-4. Now create standby redo logs for switchovers and should be adding one extra.
SQL> alter database add standby logfile ‘/u01/app/oracle/oradata/ocpr/standby_redo01.log’ size 50m;
SQL> alter database add standby logfile ‘/u01/app/oracle/oradata/ocppr/standby_redo02.log’ size 50m;
SQL> alter database add standby logfile ‘/u01/app/oracle/oradata/ocppr/standby_redo03.log’ size 50m;
SQL> alter database add standby logfile ‘/u01/app/oracle/oradata/ocppr/standby_redo04.log’ size 50m;
Step-5. Check DB_NAME & DB_UNIQUE_NAME
SQL> show parameter db_name NAME
TYPE VALUE NAME
----------- ----------- -----------
db_name string ocppr
SQL> show parameter db_unique_name
TYPE VALUE NAME
--------------- ------------ -----------
db_unique_name string ocppr
Note:- On standby have db_unique_name is OCPDR.
Enable Log_archive_dest_2
Step-6. Now set remote archive log destination for standby & local is in flash_recovery_area.
SQL> alter system set log_archive_dest_2= ‘service=ocpdr async noaffirm reopen=15 valid_for=(all_logfiles,primary_role) db_unique_name=ocpdr’;
Step-7. The STANDBY_FILE_MANAGEMENT parameter must be set AUTO.
ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;
Step-8. Now configure a listener for your Primary Database using the NETMGR command & make TNS service on both sides (Primary & Standby).
Step-9. Restart the listener on both sides and try typing.
$lsnrctl stop
$lsnrctl start
$tnsping ocpdr (on primary)
$tnsping ocppr (on standby)
Step-10. Set the log_archive_config parameter as below.
SQL> alter system set log_archive_config='dg_config=(ocppr,ocpdr)';
Step-11. Must be set remote_login_passwordfile exclusive.
SQL> alter system set remote_login_passwordfile='EXCLUSIVE';
Step-12. Now update the fal_client & fal_server parameter using the following commands.
SQL> alter system set fal_server='OCPDR';
SQL> alter system set fal_client='OCPPR';
Step-13. Create pfile from spfile for the standby database.
SQL> create pfile=’/u01/initocpdr.ora’ from spfile;
After all, that configuration your Primary pfile lock lick this.
ocppr.__data_transfer_cache_size=0
ocppr.__db_cache_size=620756992
ocppr.__java_pool_size=16777216
ocppr.__large_pool_size=33554432
ocppr.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
ocppr.__pga_aggregate_target=637534208
ocppr.__sga_target=956301312
ocppr.__shared_io_pool_size=50331648
ocppr.__shared_pool_size=218103808
ocppr.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/ocppr/adump'
*.audit_trail='db'
*.compatible='12.1.0.0.0'
*.control_files='/u01/app/oracle/oradata/ocppr/control01.ctl','/u01/app/oracle/fast_recovery_area/ocppr/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='ocppr'
*.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
*.db_recovery_file_dest_size=4800m
*.fal_client='OCPPR'
*.fal_server='OCPDR'
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=ocpprXDB)'
*.local_listener='LISTENER_OCPPR'
*.log_archive_config='dg_config=(ocppr,ocpdr)'
*.log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST valid_for=(all_logfiles,all_roles) db_unique_name=ocppr'
*.log_archive_dest_2='service=ocpdr valid_for=(all_logfiles,primary_role) db_unique_name=ocpdr'
*.memory_target=1520m
*.open_cursors=300
*.processes=300
*.remote_login_passwordfile='EXCLUSIVE'
*.standby_file_management='AUTO'
*.undo_tablespace='UNDOTBS1'
Now we have done primary server tasks then move the pfile & password file from the PRIMARY server to the STANDBY server.
STANDBY configurations
Step-14. Make required directories on Standby like.
mkdir /u01/app/oracle/admin/ocpdr/adump
mkdir /u01/app/oracle/oradata/ocdpr/
mkdir /u01/app/oracle/fast_recovery_area/ocdpr/
Step-15. Make some changes in pfile (Add two parameters “log_file_name_convert” & “db_file_name_convert“, after changing your standby pfile lock like this.
ocpdr.__data_transfer_cache_size=0
ocpdr.__db_cache_size=620756992
ocpdr.__java_pool_size=16777216
ocpdr.__large_pool_size=33554432
ocpdr.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
ocpdr.__pga_aggregate_target=637534208
ocpdr.__sga_target=956301312
ocpdr.__shared_io_pool_size=50331648
ocpdr.__shared_pool_size=218103808
ocpdr.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/ocpdr/adump'
*.audit_trail='db'
*.compatible='12.1.0.0.0'
*.control_files='/u01/app/oracle/oradata/ocpdr/control01.ctl','/u01/app/oracle/fast_recovery_area/ocpdr/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='ocppr'
*.db_unique_name='ocpdr'
*.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
*.db_recovery_file_dest_size=4800m
*.fal_client='OCPDR'
*.fal_server='OCPPR'
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=ocpprXDB)'
*.memory_target=1520m
*.db_file_name_convert='/u01/app/oracle/oradata/ocppr','/u01/app/oracle/oradata/ocpdr'
*.log_file_name_convert='/u01/app/oracle/oradata/ocppr/','/u01/app/oracle/oradata/ocpdr/'
*.log_archive_config='dg_config=(ocppr,ocpdr)'
*.log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST valid_for=(all_logfiles,all_roles) db_unique_name=ocpdr'
*.log_archive_dest_2='service=ocppr valid_for=(all_logfiles,primary_role) db_unique_name=ocppr'
*.open_cursors=300
*.processes=300
*.remote_login_passwordfile='EXCLUSIVE'
*.standby_file_management='AUTO'
*.undo_tablespace='UNDOTBS1'
Step-16. Now start standby instance using pfile at nomount stage.
$export ORACLE_SID=ocpdr
$sqlplus sys/Oracle12c@ocpdr as sysdba
SQL> startup nomount pfile=/u01/initocpdr.ora;
Start Duplicating Database using RMAN
Step-17. Now connect with RMAN with target & auxiliary instance using the following command.
You can do this on Primary or Standby it’s your choice.
$ rman target sys/Oracle12c@ocppr auxiliary sys/Oracle12c@ocpdr
Now run the following duplicate command, that command will start copying all databases on the standby server.
Duplicate target database for standby from active database dorecover nofilenamecheck;
A brief explanation of the command which I used in the above statement.
- FOR STANDBY: confirm the DUPLICATE command is used for standby, so it will not force to change DBID.
- FROM ACTIVE DATABASE: The DUPLICATE will be copied directly from the primary datafiles, without any external backup.
- DORECOVER: The DUPLICATE is to recover the standby up to the current point in time.
- NOFILENAMECHECK: On standby, file locations are not checked.
For more details watch below videos
Part -1 Oracle 12c DataGuard Configuration
Part -2 Configure DataGuard
Part -3 Last steps to configure Dataguard
Read - How to restore archive logs from RMAN backup
Connect with me on:
Instagram: https://www.instagram.com/digitalshripal
Linkedin: https://www.linkedin.com/in/shripal-singh
Twitter: https://twitter.com/ocptechnology
Facebook: https://www.facebook.com/ocptechnology
YouTube: https://www.youtube.com/ocptechnology
Excellent job sir. God bless you
Thanks dear
Hi
i do all whatt you do but have error with Dublicate
RMAN> Duplicate target database for standby from active database dorecover nofilenamecheck;
Starting Duplicate Db at 17-FEB-22
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=195 device type=DISK
current log archived
contents of Memory Script:
{
backup as copy reuse
targetfile ‘/u01/oracle/PROD/db/tech_st/12.1.0.2/dbs/orapwPROD’ auxiliary format
‘/u01/oracle/PROD/db/tech_st/12.1.0.2/dbs/orapwPROD’ ;
}
executing Memory Script
Starting backup at 17-FEB-22
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=388 device type=DISK
Finished backup at 17-FEB-22
contents of Memory Script:
{
restore clone from service ‘prod’ standby controlfile;
}
executing Memory Script
Starting restore at 17-FEB-22
using channel ORA_AUX_DISK_1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of Duplicate Db command at 02/17/2022 17:47:23
RMAN-05501: aborting duplication of target database
RMAN-03015: error occurred in stored script Memory Script
RMAN-06136: ORACLE error from auxiliary database: ORA-19847: cannot read header of control file from remote site
can you tell me how to resolve this error
Dear Please check your controlfile or recreate the controlfile then try again.
While commit the data does not transfer to the standby db but when switch logfile data transfer properly. Where is the issue.
check standby file management and fal_server, fal_client parameters