********************************
DATA GUARD
********************************
DATA GUARD:
Data Guard is the name for Oracle's standby database solution, used for disaster recovery and high availability. Its nothing but a consistent copy of a database.
types of standby database:
a.Physical Standby Database
b.Logical Standby Database
A.PHYSICAL STANDBY DATABASE CREATION
====================================
prim1ary database : " prim1 "
Standby database : " stan1 "
Step 1: Make sure that o/s and architecture on both prim1ary and Secondary are same.
Step 2: Install oracle same version software for prim1ary and Secondary.
Step 3: Check whether prim1ary Database is in archive logmode.(Must)
To Check : archive log list;
If not enable then,
>shut immediate
>startup mount
>alter database archivelog;
>alter database open;
Step 4: Change the database in logging Mode:
> alter database force logging;
Step 5: Check whether this database have Password File:
( If it doesnt exit create Password File and both the passwords should be same )
> select * from v$pwfile_users;
Step 6: Create Three Redo-log files to standby database(prim1ary Side):
>alter database add standby logfile group 4 '/u01/app/oracle/oradata/prim1/redo04.log' size 50m;
>alter database add standby logfile group 5 '/u01/app/oracle/oradata/prim1/redo05.log' size 50m;
>alter database add standby logfile group 6 '/u01/app/oracle/oradata/prim1/redo06.log' size 50m;
Check the standby logfile : select * from v$standby_log;
Step 7: create pfile:
>create pfile from spfile;
>shut immediate;
>exit
Step 8: Edit Pfile and Parameters in prim1ary:
cd /u01/app/oracle/product/10.2.0/db_1/dbs
ls -lrt
vi initprim1.ora
Adding parameters in Pfile(primary):add at the end
db_unique_name=prim1
LOG_ARCHIVE_CONFIG='DG_CONFIG=(prim1,stan1)'
LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=prim1'
LOG_ARCHIVE_DEST_2='SERVICE=stan1 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=stan1'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
LOG_ARCHIVE_MAX_PROCESSES=30
remote_login_passwordfile='EXCLUSIVE'
FAL_SERVER=stan1
FAL_CLIENT=prim1
STANDBY_FILE_MANAGEMENT=AUTO
DB_FILE_NAME_CONVERT='/u01/app/oracle/oradata/stan1','/u01/app/oracle/oradata/prim1'
LOG_FILE_NAME_CONVERT='/u01/app/oracle/oradata/stan1','/u01/app/oracle/oradata/prim1'
Step 9: Shutdown and Startup the prim1ary database using Pfile.
>sqlplus "/as sysdba"
>startup nomount pfile='/u01/app/oracle/product/10.2.0/db_1/dbs/initprim1.ora';
Step 10: Create spfile from pfile and shutdown the prim1ary database;
>create spfile from pfile='/u01/app/oracle/product/10.2.0/db_1/dbs/initprim1.ora';
>Shut immediate;
Step 11: Create necessary directorires for Standby database:
cd /u01/app/oracle/admin
mkdir stan1
cd /u01/app/oracle/admin/stan1
mkdir adump bdump cdump udump
cd /u01/app/oracle/oradata
mkdir stan1
Step 12: Copy the database file, log file from prim1ary to standby database:
cd /u01/app/oracle/oradata/prim1
$cp *.dbf *.log /u01/app/oracle/oradata/stan1
Step 13: startup the prim1ary database;
>sqlplus "/as sysdba"
> Startup mount
>alter database create standby controlfile as '/u01/app/oracle/oradata/stan1/control01.ctl';
> alter database open;
Step 14: Create Password file for standby database:
$cd /u01/app/oracle/product/10.2.0/db_1/dbs
cp orapwprim1 orapwstan1
Step 15: Check the Listener
ps -ef|grep tns
(or)
$lsnrctl status
if its down then start the listener
$lsnrctl start
Steps 16: Check the tns entries
tnsping <Database name>
if not working then Edit and Put the TNS Entry for databases.
$vi /u01/app/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora
Step 17: Copy the pfile from prim1ary to standby database:
$cd /u01/app/oracle/product/10.2.0/db_1/dbs
$cp initprim1.ora initstan1.ora
edit the pfile for standby, replace with :%s/prim1/stan1 except dba_name parameter because db_name should be same for primary and standby and add below
parameters without any change.
vi initstan1.ora
db_name='prim1'
db_unique_name=stan1
LOG_ARCHIVE_CONFIG='DG_CONFIG=(prim1,stan1)'
LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=stan1'
LOG_ARCHIVE_DEST_2='SERVICE=prim1 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=prim1'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
LOG_ARCHIVE_MAX_PROCESSES=30
FAL_SERVER=prim1
FAL_CLIENT=stan1
remote_login_passwordfile='EXCLUSIVE'
DB_FILE_NAME_CONVERT='/u01/app/oracle/oradata/prim1','/u01/app/oracle/oradata/stan1'
LOG_FILE_NAME_CONVERT='/u01/app/oracle/oradata/prim1','/u01/app/oracle/oradata/stan1'
STANDBY_FILE_MANAGEMENT=AUTO
NOTE: Mention proper standby controlfile location(since you have only one controlfile, so delete 2,3 control files in standby pfile)
Step 18: edit oratab and Startup the standby database in nomount stage and create spfile:
edit the oratab for standby
vi /etc/oratab
. oraenv
stan1
sqlplus "/as sysdba"
startup nomount pfile='/u01/app/oracle/product/10.2.0/db_1/dbs/initstan1.ora';
>create spfile from pfile='/u01/app/oracle/product/10.2.0/db_1/dbs/initstan1.ora';
> shut immediate
> startup mount
Step 19: Start MRP process in Standby database Side:
stan1:
======
>alter database recover managed standby database disconnect from session;
Step 20: Check the Sequence and applied in standby database:
prim1:
=======
> archive log list
>alter system switch logfile; - do it for few times
stan1:
======
>select sequence#,applied from v$archived_log order by sequence#;
**************************** END**************************