Dataguard Setup in Oracle 19C Container Database
Environment:
Oracle Version: 19.3.0
OS Version: Oracle Linux Server 8
Primary Server
DB Unique Name=pearl
DB Name=pearl
Hostname=192.168.31.201
Standby Server
DB Unique Name=muthu
DB Name=muthu
Hostname=192.168.31.202
Add listener Entery primary Side:
[oracle@localhost admin]$ cat /u01/app/oracle/product/19.0.0/dbhome_1/network/admin/listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/product/19.0.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = pearl)
(ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
(SID_NAME = pearl)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.31.201)(PORT = 1521))
)
ADR_BASE_LISTENER = /u01/app/oracle
Add listener Entery Standby Side:
[oracle@localhost admin]$ cat /u01/app/oracle/product/19.0.0/dbhome_1/network/admin/listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/product/19.0.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = muthu)
(ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
(SID_NAME = muthu)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.31.202)(PORT = 1521))
)
ADR_BASE_LISTENER = /u01/app/oracle
Enable TNS Entry For Both Side:
[oracle@localhost admin]$ cat /u01/app/oracle/product/19.0.0/dbhome_1/network/admin/tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/19.0.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
PEARL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.31.201)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = pearl)
)
)
MUTHU =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.31.202)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = muthu)
)
)
Note: add the pluggable database entry also
Check TND ping for Both Side:
tnsping pearl 4
tnsping muthu 4
Step 1: (prim)Enable archivelog mode and Force logging
select log_mode from v$database;
(OR)
archive log list
set linesize 250
select name,force_logging,flashback_on,log_mode from v$database;
How to enable Archiver and set the location:
shut immediate
startup mount
alter database archivelog;
alter database force logging;
alter database open;
(prim)Enable the FRA
alter system set db_recovery_file_dest_size=15G scope=both;
!mkdir -p /u02/oradata/fra/
alter system set db_recovery_file_dest='/u02/oradata/fra/' scope=both;
Flashback should be enabled in primary database:
ALTER DATABASE FLASHBACK ON;
select name,open_mode,force_logging,flashback_on,log_mode from v$database;
NAME OPEN_MODE FORCE_LOGGING FLASHBACK_ON LOG_MODE
--------- -------------------- --------------------------------------- ------------------ ------------
PEARL READ WRITE YES YES ARCHIVELOG
Step 2: (prim)Add the Standby Redo Log files
set linesize 250
col MEMBER format a80
select group#,member,type,status from v$logfile;
alter database add standby logfile group 4 '/u02/oradata/PEARL/redo04.log' size 150m;
alter database add standby logfile group 5 '/u02/oradata/PEARL/redo05.log' size 150m;
alter database add standby logfile group 6 '/u02/oradata/PEARL/redo06.log' size 150m;
SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$STANDBY_LOG;
Step 3: Configure the dataguard parameters primary side
ALTER SYSTEM SET log_archive_config='dg_config=(pearl,muthu)' SCOPE=both;
ALTER SYSTEM SET fal_server='muthu' SCOPE=both;
ALTER SYSTEM SET fal_client='pearl' SCOPE=both;
ALTER SYSTEM SET standby_file_management='AUTO' SCOPE=both;
ALTER SYSTEM SET log_archive_dest_1='location=use_db_recovery_file_dest valid_for=(all_logfiles,all_roles) db_unique_name=pearl' SCOPE=both;
ALTER SYSTEM SET log_archive_dest_2='service=muthu async valid_for=(online_logfiles,primary_role) db_unique_name=muthu' SCOPE=both;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE scope=both;
alter system set log_archive_format='%t_%s_%r.dbf' scope=spfile;
alter system set log_archive_max_processes=30 scope=both;
alter system set remote_login_passwordfile=exclusive scope=spfile;
##Optional
alter system set db_file_name_convert='/u02/oradata/PEARL','/u02/oradata/MUTHU/' scope=spfile;
alter system set log_file_name_convert='/u02/oradata/PEARL','/u02/oradata/MUTHU/' scope=spfile;
Step 4: restart the Primary database and verify the parameters:
shut immediate
startup
Verify the parameter Values:
col name for a30
col value for a85
set lin 300 pagesize 300
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_dest_state_2','remote_login_passwordfile','log_archive_format','log_archive_max_processes',
'fal_server','fal_client','db_file_name_convert','log_file_name_convert','standby_file_management');
Step 5:(prim) create password file and send to standby
cd $ORACLE_HOME/dbs
orapwd file=orapwpearl password=admin123 entries=20 format=12
scp orapwpearl oracle@192.168.31.202:/u01/app/oracle/product/19.0.0/dbhome_1/dbs/orapwmuthu
Step 6:(stand) Create the required directory on the standby side
check primary server data and log file locations:
col name format a80
select name from v$datafile;
show parameter audit;
show parameter db_recovery_file_dest;
create the directory like:
mkdir -p /u02/oradata/MUTHU/
mkdir -p /u02/oradata/MUTHU/pdbseed/
mkdir -p /u02/oradata/MUTHU/pdb1/
mkdir -p /u02/oradata/MUTHU/pdb2/
mkdir -p /u01/app/oracle/admin/muthu/adump
mkdir -p /u02/oradata/fra/
Step 7: create pfile for standby
[oracle@localhost dbs]$ cat /u01/app/oracle/product/19.0.0/dbhome_1/dbs/initmuthu.ora
db_name=pearl
enable_pluggable_database=true
Step 8: start the standby database use pfile with nomount stage
export ORACLE_SID=muthu
sqlplus / as sysdba
startup pfile='/u01/app/oracle/product/19.0.0/dbhome_1/dbs/initmuthu.ora' nomount;
Step 9: connect RMAN from standby (both password need to same)
rman target sys/admin123@pearl auxiliary sys/admin123@muthu
Step 10: Build the standby use rman
RMAN> duplicate target database for standby from active database nofilenamecheck;
(OR)
duplicate target database for standby from active database;
(OR)
Recommended:
RMAN>
run
{
allocate channel c1 type disk;
allocate auxiliary channel c3 type disk;
duplicate target database for standby from active database
spfile
parameter_value_convert 'pearl','muthu'
set db_name='pearl'
set db_unique_name='muthu'
set audit_file_dest='/u01/app/oracle/admin/muthu/adump'
set diagnostic_dest='/u01/app/oracle/admin/muthu/adump'
set db_file_name_convert='/u02/oradata/PEARL/','/u02/oradata/MUTHU/'
set log_file_name_convert='/u02/oradata/PEARL/','/u02/oradata/MUTHU/'
set control_files='/u02/oradata/MUTHU/control01.ctl'
set log_archive_max_processes='5'
set fal_client='muthu'
set fal_server='pearl'
set standby_file_management='AUTO'
set log_archive_config='dg_config=(pearl,muthu)'
set compatible='19.0.0.0.0'
nofilenamecheck;
}
Step 11: start the MRP process in standby.
select name,database_role,open_mode from v$database;
SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
alter database open;
alter database recover managed standby database disconnect from session;
Step 12: check MRP process
select sequence#,process,status from v$managed_standby;
Step 13: verify the standby status
select name,open_mode,database_role from v$database;
select name, value from v$dataguard_stats where name in ('transport lag', 'apply lag');
NAME OPEN_MODE DATABASE_ROLE
--------- -------------------- ----------------
PEARL READ ONLY WITH APPLY PHYSICAL STANDBY
Step 14: log applying status in standby
SELECT sequence#, first_time, next_time, applied FROM v$archived_log ORDER BY sequence#;
Step 15: Check the differences redo log sequences(Both Sides)
SELECT ARCH.THREAD# AS Thread, ARCH.SEQUENCE# AS "Last Sequence Received", APPL.SEQUENCE# AS "Last Sequence Applied",
(ARCH.SEQUENCE# - APPL.SEQUENCE#) AS 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;
Enable flashback on standby database:
alter database recover managed standby database cancel;
alter database flashback on;
alter database recover managed standby database disconnect from session;
select sequence#,process,status from v$managed_standby;
select role, thread#, sequence#, action from v$dataguard_process;
select name,force_logging,flashback_on,log_mode from v$database;
NAME FORCE_LOGGING FLASHBACK_ON LOG_MODE
--------- --------------------------------------- ------------------ ------------
PEARL YES YES ARCHIVELOG
select status,instance_name,database_role,protection_mode from v$database,v$instance;
select max(sequence#) from v$archived_log;
Configure Archive deletion policy:
We must set this policy in order to prevent accidental deletion of archive logs on primary database
On Primary:
rman target /
configure archivelog deletion policy to applied on all standby;
create some tables and insert the data primary side check standby
Primary Database:
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB1 MOUNTED
4 PDB2 MOUNTED
SQL> alter pluggable database all open;
Pluggable database altered.
SQL> alter session set container=pdb1;
Session altered.
SQL> create user shri identified by shri123;
User created.
SQL> grant connect,create session,resource,unlimited tablespace to shri;
Grant succeeded.
SQL> create table shri.emp(id number(3),name varchar2(50));
Table created.
SQL> insert into shri.emp values(1,'muthu');
1 row created.
SQL> insert into shri.emp values(2,'siva');
1 row created.
SQL> commit;
Commit complete.
SQL> alter session set container=cdb$root;
Session altered.
SQL> alter system switch logfile;
System altered.
Standby Database:
SQL> alter pluggable database all open;
Pluggable database altered.
SQL> alter session set container=pdb1;
Session altered.
SQL> select * from shri.emp;
ID NAME
---------- --------------------------------------------------
1 muthu
2 siva
Comments
Post a Comment