In this blog I show how to configure Dataguard Broker configuration for a 2-node RAC cluster to a 2-Node Standby.
This is a 2 blog series - you can find the second blog here - which only talks about configuration of Dataguard and Broker.
Here is my configuration
Production DB
Unique Name - MYDBPROD
- Instance 1 - MYDBPR11
- Insance 2 - MYDBPR12
Unqiue Name - MYDBSTDBY
- Instance 1 - MYDBPR11
- Insance 2 - MYDBPR12
Step 1 - Create tnsnames.ora entries in all nodes
MYDBPROD =
Step 2 - Static Listener Entries for DG broker operations
Step 3 - Reset sys and system password and copy password file from Node 1 of Primary to other 3 nodes (in $ORACLE_HOME/dbs), also change the name as per the name of the instance
Step 4 - Add Database and Instance in OCR registry
Step 5 - Create init files
Step 7 - Start the instance, mount it and recover standby database. This is a 2 blog series - you can find the second blog here - which only talks about configuration of Dataguard and Broker.
Here is my configuration
Production DB
Unique Name - MYDBPROD
- Instance 1 - MYDBPR11
- Insance 2 - MYDBPR12
Unqiue Name - MYDBSTDBY
- Instance 1 - MYDBPR11
- Insance 2 - MYDBPR12
Step 1 - Create tnsnames.ora entries in all nodes
MYDBPROD =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = MYPRODDB-PRD-SCAN)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = MYDBPROD)
(UR = A)
)
)
MYDBSTDBY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = MYSTDBYDB-PRD-SCAN)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = MYDBSTDBY)
(UR = A)
)
)
(ADDRESS = (PROTOCOL = TCP)(HOST = MYPRODDB-PRD-SCAN)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = MYDBPROD)
(UR = A)
)
)
MYDBSTDBY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = MYSTDBYDB-PRD-SCAN)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = MYDBSTDBY)
(UR = A)
)
)
Step 2 - Static Listener Entries for DG broker operations
[Node 1 - Grid user Standby Cluster]
File - $ORACLE_HOME/network/admin/listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = MYDBSTDBY_DGMGRL)
(ORACLE_HOME = <OH>)
(SID_NAME = MYDBPR11)
)
(SID_DESC =
(GLOBAL_DBNAME = MYDBSTDBY)
(ORACLE_HOME = <OH>)
(SID_NAME = MYDBPR11)
)
)
lsnrctl stop
lsnrctl start
[Node 1 - Grid user Standby Cluster]
File - $ORACLE_HOME/network/admin/listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = MYDBSTDBY_DGMGRL)
(ORACLE_HOME = <OH>)
(SID_NAME = MYDBPR12)
)
)
lsnrctl stop
lsnrcl start
[Node 1- Grid user - Primary Cluster]
File - $ORACLE_HOME/network/admin/listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = MYDBPROD_DGMGRL)
(ORACLE_HOME = <OH>)
(SID_NAME = MYDBPR11)
)
)
lsnrctl stop
lsnrctl start
[Node 2 - Grid user - Primary Cluster]
File - $ORACLE_HOME/network/admin/listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = MYDBPROD_DGMGRL)
(ORACLE_HOME = <OH>)
(SID_NAME = MYDBPR12)
)
)
lsnrctl stop
lsnrctl start
File - $ORACLE_HOME/network/admin/listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = MYDBSTDBY_DGMGRL)
(ORACLE_HOME = <OH>)
(SID_NAME = MYDBPR11)
)
(SID_DESC =
(GLOBAL_DBNAME = MYDBSTDBY)
(ORACLE_HOME = <OH>)
(SID_NAME = MYDBPR11)
)
)
lsnrctl stop
lsnrctl start
[Node 1 - Grid user Standby Cluster]
File - $ORACLE_HOME/network/admin/listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = MYDBSTDBY_DGMGRL)
(ORACLE_HOME = <OH>)
(SID_NAME = MYDBPR12)
)
)
lsnrctl stop
lsnrcl start
[Node 1- Grid user - Primary Cluster]
File - $ORACLE_HOME/network/admin/listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = MYDBPROD_DGMGRL)
(ORACLE_HOME = <OH>)
(SID_NAME = MYDBPR11)
)
)
lsnrctl stop
lsnrctl start
[Node 2 - Grid user - Primary Cluster]
File - $ORACLE_HOME/network/admin/listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = MYDBPROD_DGMGRL)
(ORACLE_HOME = <OH>)
(SID_NAME = MYDBPR12)
)
)
lsnrctl stop
lsnrctl start
Step 3 - Reset sys and system password and copy password file from Node 1 of Primary to other 3 nodes (in $ORACLE_HOME/dbs), also change the name as per the name of the instance
Step 4 - Add Database and Instance in OCR registry
[Node 1 - oracle user - Standby Cluster]
srvctl add database -d MYDBSTDBY -o /opt/oracle/product/112/db -c RAC \
-p +DATA/MYDBSTDBY/spfileMYDBSTDBY.ora -r PHYSICAL_STANDBY -s MOUNT -t IMMEDIATE -n <DB_NAME> -a DATA,REDO1,FRA
srvctl add instance -d MYDBSTDBY -i MYDBPR11 -n Node1
srvctl add instance -d MYDBSTDBY -i MYDBPR12 -n Node2
srvctl add database -d MYDBSTDBY -o /opt/oracle/product/112/db -c RAC \
-p +DATA/MYDBSTDBY/spfileMYDBSTDBY.ora -r PHYSICAL_STANDBY -s MOUNT -t IMMEDIATE -n <DB_NAME> -a DATA,REDO1,FRA
srvctl add instance -d MYDBSTDBY -i MYDBPR11 -n Node1
srvctl add instance -d MYDBSTDBY -i MYDBPR12 -n Node2
[Node 1 - oracle user - Standby Cluster]
cd /opt/oracle/product/112/db/dbs
cat initMYDBPR11.ora
SPFILE='+DATA/MYDBSTDBY/spfileMYDBSTDBY.ora'
[Node 2 - oracle user - Standby Cluster]
cd /opt/oracle/product/112/db/dbs
cat initMYDBPR12.ora
SPFILE='+DATA/MYDBSTDBY/spfileMYDBSTDBY.ora'
Step 6 - Create Audit Directoriescd /opt/oracle/product/112/db/dbs
cat initMYDBPR11.ora
SPFILE='+DATA/MYDBSTDBY/spfileMYDBSTDBY.ora'
[Node 2 - oracle user - Standby Cluster]
cd /opt/oracle/product/112/db/dbs
cat initMYDBPR12.ora
SPFILE='+DATA/MYDBSTDBY/spfileMYDBSTDBY.ora'
[Node 1 - oracle user - Standby Cluster]
mkdir -p /opt/oracle/base/admin/MYDBSTDBY/adump
[Node 2 - oracle user - Standby Cluster]
mkdir -p /opt/oracle/base/admin/MYDBSTDBY/adump
mkdir -p /opt/oracle/base/admin/MYDBSTDBY/adump
[Node 2 - oracle user - Standby Cluster]
mkdir -p /opt/oracle/base/admin/MYDBSTDBY/adump
You can use any method to recover/restore.
One of the methods which I recommend is to use active database duplication. It's generally faster.
rman << EOF
connect TARGET sys/<pwd>@MYDBPROD ;
connect AUXILIARY sys/<pwd>@MYDBSTDBY;
DUPLICATE TARGET DATABASE
FOR STANDBY
FROM ACTIVE DATABASE
DORECOVER
NOFILENAMECHECK;
In the next blog I discuss on DG Broker Build
No comments:
Write comments