oracle data guard configuration in 12c

15
Oracle Data Guard Configuration in 12c This note examines how to create an Oracle 12.1.0.2.0 physical standby Active Data Guard database using the RMAN DUPLICATE FROM ACTIVE command. We will be creating the data guard configuration in a 12c Container Database. IN 12c Data Guard is set up at the Container level and not the individual Pluggable database level as the redo log files only belong to the Container database and the individual pluggable databases do not have their own online redo log files. The platform Solaris 10 and the primary database db_unique_name is DB12c and the db_unique_name of the Active Standby database is STBY12c. Primary Database Standby Database DB Name DB12C DB12C DB unique Name DB12C STBY12c IP and Hostname 172.31.36.12 (Solaris12c) 172.31.36.13 (SolarisST) Let us look at the steps involved. Change the cat /etc/hosts for both Primary and Standby Database Machine, Thats why they can know Each other both IP address and HostName. On Primary Enable the Archive Log: SQL> select log_mode from v$database;

Upload: uzzal-basak

Post on 18-Jan-2017

740 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Oracle data guard configuration in 12c

Oracle Data Guard Configuration in 12c

This note examines how to create an Oracle 12.1.0.2.0 physical standby Active Data Guard database using the RMAN DUPLICATE FROM ACTIVE command.

We will be creating the data guard configuration in a 12c Container Database.

 IN 12c Data Guard is set up at the Container level and not the individual Pluggable database level  as the redo log files only belong to the Container database and the individual pluggable databases do not have their own online redo log files.

The platform Solaris 10 and the primary database db_unique_name is DB12c and the db_unique_name of the Active Standby database is STBY12c.

Primary Database Standby Database

DB Name DB12C DB12C

DB unique Name DB12C STBY12c

IP and Hostname 172.31.36.12 (Solaris12c) 172.31.36.13 (SolarisST)

Let us look at the steps involved.

Change the cat /etc/hosts for both Primary and Standby Database Machine, Thats why they can know

Each other both IP address and HostName.

On Primary

Enable the Archive Log:

SQL> select log_mode from v$database;

LOG_MODE

------------

ARCHIVELOG

Page 2: Oracle data guard configuration in 12c

** Please Increase The db_recovery_file_dest_size atleast 5G , by default it’s less than 1G which is fillup in any time.

Enable the Force Logging

SQL> alter database force logging;

Database altered.

SQL> select FORCE_LOGGING from v$database;

FORCE_LOGGING

---------------------------------------

YES

On Standby

Create the required directory structure

It’s important cause when we restore RMAN backup , at that time if appropriate directory is not created then you got error in restore.

Technique :

1. Find the location of ADUMP path of Primary database and create the same things in Standby database.

SQL> show parameter audit_file

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

audit_file_dest string /export/home/oracle/admin/DB12c/adump

So you must create below folder in Standby database

$ mkdir -p export/home/oracle/admin/DB12c/adump

2. Find the Location of db_recovery_file_dest in Primary Database and create same directory in Standby database.

SQL> show parameter DB_Recove

Page 3: Oracle data guard configuration in 12c

NAME TYPE VALUE------------------------------------ ----------- ------------------------------db_recovery_file_dest string /export/home/oracle/fast_recovery_areadb_recovery_file_dest_size big integer 3G

So must create below folder in Standby Database

$ mkdir -p /export/home/oracle/fast_recovery_area

3. Check The control file location in Primary Database and create same folder in Standby database.

SQL> show parameter control

NAME TYPE VALUE------------------------------------ ----------- ------------------------------control_file_record_keep_time integer 7control_files string /export/home/oracle/oradata/DB12C/controlfile/o1_mf_bo5tnjkh_.ctl,/export/home/oracle/fast_recovery_area/DB12C/controlfile/o1_mf_bo5tnl4q_.ctl

control_management_pack_access string DIAGNOSTIC+TUNING

So create the control file location in Standby Database

$ mkdir -p /export/home/oracle/oradata/DB12C/controlfile

$ mkdir -p /export/home/oracle/fast_recovery_area/DB12C/controlfile

4. Check the datafile location and logfile location on Primary Database and create same folder in Standby Database.

SQL> select name from v$datafile;

/export/home/oracle/oradata/DB12C/datafile/o1_mf_system_bo5tgrz1_.dbf

....

....

SQL> select member from v$logfile;

/export/home/oracle/oradata/DB12C/onlinelog/o1_mf_3_bo5tohpf_.log/export/home/oracle/fast_recovery_area/DB12C/onlinelog/o1_mf_3_bo5tonq9_.log

.....

.....$ mkdir -p /export/home/oracle/oradata/DB12C/datafile$ mkdir -p /export/home/oracle/oradata/DB12C/onlinelog$ mkdir -p /export/home/oracle/fast_recovery_area/DB12C/onlinelog

Page 4: Oracle data guard configuration in 12c

Primary Database

Copy the password file from primary to standby

$ scp -rp orapwo12c [email protected]:/export/home/oracle/product/12.2.0/db_1/dbsoracle@orasql-001-test's password:

orapwo12c 100% 7680 7.5KB/s 00:00

StandBy Database

On Standby

Add a static entry in the listener.ora for STBY12c

# listener.ora Network Configuration File: /export/home/oracle/product/12.2.0/db_1/network/admin/listener.ora# Generated by Oracle configuration tools.

LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = SolarisST)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) )

SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = DB12c) (ORACLE_HOME = /export/home/oracle/product/12.2.0/db_1) (SID_NAME = DB12c) ) )

listener_Standby.ora

Reload the listener

$ lsnrctl reload LISTENER

Create spfile for StandBY database input Single one line spfileDB12c.ora

*.db_name=DB12c

Page 5: Oracle data guard configuration in 12c

Add an entry in the oratab file which location of /export/home/oracle/product/12.2.0/db_1/install/oratab

DB12c:/export/home/oracle/product/12.2.0/db_1:N

bash-3.2$ cat /export/home/oracle/product/12.2.0/db_1/install/oratab

DB12c:/export/home/oracle/product/12.2.0/db_1:N

Edit The TNSNAME.ORA in Standby database.

DB12C = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.31.36.12)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = DB12c)

(UR = A) ) )

STBY12c = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = SolarisST)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = STBY12C)

(UR = A) ) )

tnsnames_Standby.ora

Primary Database TNSNAMES.ORA Change

STBY12c = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.31.36.13)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED)

Page 6: Oracle data guard configuration in 12c

(SERVICE_NAME = DB12c) ) )

tnsnames_Primary.ora

On Standby

Start the Standby instance in NOMOUNT mode

Run the .profile where we mention ORACLE_SID=DB12c

.profile

bash-3.2$ . ./.profile

bash-3.2$ sqlplus

SQL*Plus: Release 12.1.0.2.0 Production on Sat May 16 13:47:30 2015

Copyright (c) 1982, 2014, Oracle. All rights reserved.Enter user-name: sys as sysdbaEnter password:Connected to an idle instance.

SQL> startup nomount;ORACLE instance started.

Total System Global Area 229683200 bytesFixed Size 2286800 bytesVariable Size 171969328 bytesDatabase Buffers 50331648 bytesRedo Buffers 5095424 bytes

Now Standby Databse in nomount stage with create spfile .

Primary Database:

Page 7: Oracle data guard configuration in 12c

Check the tnsping from Primary to StandBy database:

bash-3.2$ tnsping STBY12c

TNS Ping Utility for Solaris: Version 12.1.0.2.0 - Production on 16-MAY-2015 13:55:33

Copyright (c) 1997, 2014, Oracle. All rights reserved.

Used parameter files:

/export/home/oracle/product/12.2.0/db_1/network/admin/sqlnet.ora

Used TNSNAMES adapter to resolve the alias

Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.31.36.13)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = DB12c)))

OK (40 msec)

Connect to Primary and auxiliary connection to Standby

bash-3.2$ rman target sys/sys auxiliary sys/sys123@STBY12c

Recovery Manager: Release 12.1.0.2.0 - Production on Sat May 16 13:54:46 2015

Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved.

connected to target database: DB12C (DBID=1333620530)

connected to auxiliary database: DB12C (not mounted)

This is the command we will run to create the Standby Database.

Note – since the data file names are not being changed on the standby database we need to include the NOFILENAMECHECK

Run{allocate channel c1 type disk;

Page 8: Oracle data guard configuration in 12c

allocate channel c2 type disk;allocate auxiliary channel aux type disk;duplicate target database for standby from active database nofilenamecheck spfile set log_archive_max_processes='8'set db_unique_name='STBY12c'set standby_file_management='AUTO'set log_archive_config='dg_config=(DB12c, STBY12c)'set log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST valid_for=(all_logfiles,all_roles) db_unique_name= STBY12c'set log_Archive_dest_2='service=DB12c async noaffirm reopen=15 valid_for=(all_logfiles,primary_role) db_unique_name=DB12c';}

After the RMAN DUPLICATE command completes we now need to add the relevant parameters for the redo log transport on the Primary database.

RMAN> alter system set standby_file_management='AUTO';

Statement processed

RMAN> alter system set log_archive_config='dg_config=( DB12c', STBY12c')';

Statement processed

RMAN> alter system set log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST valid_for=(all_logfiles,all_roles) db_unique_name= DB12c'';

Statement processed

RMAN> alter system set log_Archive_dest_2='service=condb1_dr async noaffirm reopen=15 valid_for=(all_logfiles,primary_role) db_unique_name= STBY12c ';

Statement processed

In StandBY Database

Since we have 3 online redo log file groups, we need to create (3+1) 4 Standby redo log file groups

SQL> ALTER DATABASE ADD STANDBY LOGFILE '/export/home/oracle/oradata/DB12C/standby_redo01.log' size 50m;

Database altered.

SQL> ALTER DATABASE ADD STANDBY LOGFILE '/export/home/oracle/oradata/DB12C/standby_redo02.log' size 50m;

Database altered.

Page 9: Oracle data guard configuration in 12c

SQL> ALTER DATABASE ADD STANDBY LOGFILE '/export/home/oracle/oradata/DB12C/standby_redo03.log' size 50m;

Database altered.

SQL> ALTER DATABASE ADD STANDBY LOGFILE '/export/home/oracle/oradata/DB12C/standby_redo04.log' size 50m;

Database altered.

On Primary

RMAN> ALTER DATABASE ADD STANDBY LOGFILE '/export/home/oracle/oradata/DB12C/standby_redo01.log' size 50m;

Statement processed

RMAN> ALTER DATABASE ADD STANDBY LOGFILE '/export/home/oracle/oradata/DB12C/standby_redo02.log' size 50m;

Statement processed

RMAN> ALTER DATABASE ADD STANDBY LOGFILE '/export/home/oracle/oradata/DB12C/standby_redo03.log' size 50m;

Statement processed

RMAN> ALTER DATABASE ADD STANDBY LOGFILE '/export/home/oracle/oradata/DB12C/standby_redo04.log' size 50m;

Statement processed

On Primary change the protection mode

RMAN> alter database set standby database to maximize availability;

Statement processed

NOW Testing is it OK or NOT

On the Standby database, the RMAN script which we ran from the primary database has not opened the database and started managed recovery.

Let us now manually do it.

Page 10: Oracle data guard configuration in 12c

On Standby

SQL> shutdown immediate;ORA-01109: database not open

Database dismounted.

SQL> startup;ORACLE instance started.

Total System Global Area 4275781632 bytesFixed Size 2296576 bytesVariable Size 2214593792 bytesDatabase Buffers 2046820352 bytesRedo Buffers 12070912 bytesDatabase mounted.Database opened.

SQL> select current_scn from v$database;

CURRENT_SCN

-----------

2401331

To start the redo apply run this Standby database

recover managed standby database using current logfile disconnect;

SQL> recover managed standby database using current logfile disconnect;

Media recovery complete.

SQL> select current_scn from v$database;

CURRENT_SCN

-----------

2442377

SQL> !ps -ef |grep mrp

oracle 1173 1 4 14:30:24 ? 0:20 ora_mrp0_DB12c

oracle 1180 1113 0 14:32:39 pts/2 0:00 /bin/sh -c ps -ef |grep mrp

oracle 1181 1180 0 14:32:39 pts/2 0:00 grep mrp

SQL> select process,status,thread#,sequence#,blocks from v$managed_standby where process like

Page 11: Oracle data guard configuration in 12c

'%MRP%';

PROCESS STATUS THREAD# SEQUENCE# BLOCKS

--------- ------------ ---------- ---------- ----------

MRP0 APPLYING_LOG 1 10 102400

SQL> select name,open_mode from v$pdbs;

NAME OPEN_MODE

------------------------------ ----------

PDB$SEED READ ONLY

PDB12C MOUNTED

SQL> alter pluggable database all open read only;

Pluggable database altered.

SQL> select name,open_mode from v$pdbs;

NAME OPEN_MODE

------------------------------ ----------

PDB$SEED READ ONLY

PDB12C READ ONLY

For Pluggable Database need to Entry in TNSNAME.ORA for both primary and Standby Database.

Standby Database:

STPDB12C= (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = SolarisST)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = PDB12C)

(UR = A) )

)

Primary Database:

Page 12: Oracle data guard configuration in 12c

PDB12C = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = Solaris12c)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = PDB12C) ) )On Primary Database

SQL> conn uzzal/basak@PDB12C

Connected.

SQL> select * from tab;

no rows selected

SQL> create table pp (no number(2));

Table created.

SQL> insert into pp values (1);

1 row created.

SQL> select * from pp;

NO

----------

1

SQL> commit;

Commit complete.

Check in Standby Database:

SQL> conn uzzal/basak@STPDB12C

Connected.

SQL> select * from pp;

Page 13: Oracle data guard configuration in 12c

NO

----------

1

Last Part Of the Data Guard is Maintaince of DataGuard :

To start the redo apply Run this

recover managed standby database using current logfile disconnect;

To Stop the redo apply Run below command

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

SQL> !ps -ef |grep mrp

oracle 1236 1224 0 15:05:25 pts/2 0:00 /bin/sh -c ps -ef |grep mrp

oracle 1237 1236 0 15:05:25 pts/2 0:00 grep mrp

SQL> select process,status,thread#,sequence#,blocks from v$managed_standby where process like '%MRP%';

no rows selected

And Start the Redo Apply and Enjoy the Beauty of Data Guard in 12c

recover managed standby database using current logfile disconnect;

Reference Link

http://gavinsoorma.com/2013/11/creating-an-oracle-12c-data-guard-active-standby-database/