0% found this document useful (0 votes)
667 views99 pages

Dataguard Fsfo Implementation

Uploaded by

freshp
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
667 views99 pages

Dataguard Fsfo Implementation

Uploaded by

freshp
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 99

DATAGUARD FAST START FAILOVER IMPLEMENTATION

Alejandro Vargas | Principal Support Consultant


Oracle Advanced Customer Services

INDEX

Summary................................................................................................................................................................................3
The environment....................................................................................................................................................................3

Database Checkup.................................................................................................................................................................4

The Primary database spfile...............................................................................................................................................5


Names Related Parameters............................................................................................................................................5
Network Related Parameters..........................................................................................................................................6
Management Related Parameters..................................................................................................................................9

Standby Database Creation On Windows............................................................................................................................13

Enable Force Logging.......................................................................................................................................................13


Create a Password File and Copy it Over to the Standby Site.........................................................................................14
Create standby redologs...................................................................................................................................................14
Enable Archiving...............................................................................................................................................................17
Setup the network using netca or netmgr, edit the tnsnames.ora to register the listeners...............................................17
Shutdown the Primary Database and copy it Over to the Standby Server.......................................................................22
Create the Database Service on the Standby Server.......................................................................................................22
Startup mount the Primary Database and create a standby controlfile...........................................................................22
Create a copy of the primary spfile and modify it for the standby.....................................................................................23
Copy the standby controlfile over to the Standby Server..................................................................................................26
Generate the standby spfile from the pfile you prepared before.......................................................................................26
Start Recovery on the standby database and check........................................................................................................27

1/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Configuring Data Guard Broker............................................................................................................................................35

Enable flashback database on primary database.............................................................................................................35


Enable database broker on primary database..................................................................................................................37
Enable database broker on standby database..............................................................................................................37
Setup the Local_Listener parameter on the Primary Database....................................................................................38
Setup the Local_Listener parameter on the Standby Database...................................................................................38
Setup the Tnsnames.ora and Listener.ora parameter files on the Primary Database..................................................38
Setup the Tnsmanes.ora and Listener.ora parameter files on the Standby Database.................................................42
Create the DataGuard Broker Configuration....................................................................................................................46
Enable the Broker Configuration...................................................................................................................................50
Configure Data Guard Broker For Switchover..................................................................................................................51

Configuring the Observer Process.......................................................................................................................................56

Fast Start Failover Test....................................................................................................................................................58


Observer Output During FSFO......................................................................................................................................58
Database Monitoring During FSFO...............................................................................................................................58
Database Monitoring During FSFO Using the Alert Logs..............................................................................................60
SATISTD alert log (Standby converted to Primary).......................................................................................................60
SATI alert log (Failed Primary Reinstated and converted to Standby)..........................................................................66
DGMGRL CHECKUPS.....................................................................................................................................................78

Client Failover Configuration................................................................................................................................................86


Test client failover.............................................................................................................................................................88
References.......................................................................................................................................................................98

2/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Summary
This document describes the implementation of a Dataguard Environment on Windows using Oracle RDBMS
10.2.0.4. The setup includes 3 servers: Primary, Physical Standby and Observer.

The Configuration was setup in maximum availability mode and Fast Start Failover was configured with a 30
seconds threshold.

The observer was setup to be started at server boot and was set to be run by system so that no user can shutdown
it. A watchdog process run by a central control application takes care of restarting the observer process in case
that is shutdown; the observer process is also configured with the scheduler to be started up at boot time.

The environment
The environment is setup of 3 Windows Server 2003 with 4 cpus and 2GB memory each.

Server DGONE
IP 192.168.2.12
Oracle Home C:\oracle\product\10.2.0\db_1
Database SATI
Main Role Primary

Server DGTWO
IP 192.168.2.14
Oracle Home C:\oracle\product\10.2.0\db_1
Database SATISTD
Main Role Standby

Server DGTHREE
IP 192.168.2.16
3/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Oracle Home C:\oracle\product\10.2.0\db_1


Database
Main Role Data Guard Broker Observer process site

Database Checkup
The Database is a standalone partial copy of the main production database, it is updated with specific information
at regular intervals and serves as a front end repository for a web application open to the general public so it does
require very high availability. In case of primary site crash the time to failover is about 40 seconds.

The database access is read only mostly, except for the periodic uploads of data that maintain it updated.

C:\Documents and Settings\AV\Desktop\SCRIPTS> sqlplus / as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on Sun Dec 14 09:43:57 2008

Copyright (c) 1982, 2007, Oracle. All Rights Reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> show sga

Total System Global Area 1258291200 bytes


Fixed Size 1298304 bytes
Variable Size 494928000 bytes
Database Buffers 754974720 bytes
Redo Buffers 7090176 bytes
4/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

The Primary database spfile

Configuring a Dataguard environment starts by preparing an Spfile that contains specific parameters that define
and control Dataguard operation. When Dataguard Broker is used to manage the environment an spfile must be
used because the broker will take over the responsibility to setup and change specific parameters under specific
circumstances, like manual switchover, fast start failover, add or remove a standby, reinstate a failed primary, etc.

The Dataguard related parameters could be confusing at the beginning so it is convenient to use some time to
become familiar with their meaning and use.

The next table explains the parameters required for configuring Dataguard, they are divided in groups to better
explain their functionality.

Names Related Parameters


Parameter Functionality and comments
db_name contains the database name, this parameter has the same value on all
members of the Dataguard environment, i.e.:
db_name
Primary Database : *.db_name='SATI'
Physical standby : *.db_name='SATI'

db_unique_name is used to identify a database created for reporting or a


physical standby. This database must have a unique DB_UNIQUE_NAME. The primary
database will have db_unique_name=db_name, while the standby will have
db_unique_name db_unique_name set to a unique value that is different from the db_name, i.e. :

Primary database : *.db_unique_name=SATI


Physical standby : *.db_unique_name=’SATISTD’

5/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Instance_name has the value of the System Identifier; The SID identifies the
instance's shared memory on a host. On Dataguard is important to take care that
the instance_name is correctly defined on the physical standby with the same
value as the db_unique_name, because the broker to establish communications uses
this value. A possible error here is to have correctly defined db_unique_name,
instance_name but because the parameter file was copied from the primary instance name can
remain set as the database name, that will make fail the automatic startup of the
standby on switchover or failover.

Primary database : *.instance_name='SATI'


Physical standby : *.instance_name='SATISTD'

Network Related Parameters


Parameter Functionality and comments
fal_server specifies the FAL (fetch archive log) server for a
standby database. This parameter is relevant only when the database
is open on the primary role.
On The primary database the standby is configured as fal_server so
that in case of role change the primary, converted to standby, will
be able to get the required logs to close gaps if needed.
fal_server
Primary database : *.fal_server='(DESCRIPTION= (ADDRESS_LIST=
(ADDRESS= (PROTOCOL=TCP) (HOST=DGTWO) (PORT=1522))) (CONNECT_DATA=
(SERVICE_NAME= SATISTD_XPT)(SERVER=dedicated)))'

Physical standby : *.fal_server='(DESCRIPTION= (ADDRESS_LIST=


(ADDRESS= (PROTOCOL=TCP) (HOST=DGONE) (PORT=1522)))(CONNECT_DATA=
(SERVICE_NAME= SATI_XPT)(SERVER=dedicated)))'

fal_client specifies the FAL (fetch archive log) client name that is
used by the FAL_SERVER, to refer to the FAL client. The fal_client
will point to the same database where it is configured, and will be
active only when this database will be mounted on the standby role.

6/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

fal_client Primary database : *.fal_client='(DESCRIPTION= (ADDRESS_LIST=


(ADDRESS= (PROTOCOL=TCP) (HOST=DGONE) (PORT=1522))) (CONNECT_DATA=
(SERVICE_NAME= SATI_XPT) (INSTANCE_NAME=SATI) (SERVER=dedicated)))'

Physical standby : *.fal_client='(DESCRIPTION= (ADDRESS_LIST=


(ADDRESS= (PROTOCOL=TCP) (HOST=DGTWO) (PORT=1522)))(CONNECT_DATA=
(SERVICE_NAME= SATISTD_XPT)
(INSTANCE_NAME=SATISTD)(SERVER=dedicated)))'

archive_lag_target force a log switch after the specified amount of


time in seconds elapses.

A 0 value is used for real time apply. The recommended value, when
not using real time apply is 1800 (30 minutes).
archive_lag_target
Primary database : *.archive_lag_target=0
Physical standby : *.archive_lag_target=0

local_listener specifies the name of the listeners that are running


on the same machine as this instance. The address or address list is
specified in the TNSNAMES.ORA

local_listener Primary database : *.local_listener='(ADDRESS = (PROTOCOL =


TCP)(HOST = DGONE)(PORT = 1522))'

Physical standby : *.local_listener='(ADDRESS = (PROTOCOL =


TCP)(HOST = DGTWO)(PORT = 1522))'

Log_archive_config enables or disables the sending of redo logs to


remote destinations and the receipt of remote redo logs, and
specifies the unique database names (DB_UNIQUE_NAME) for each
log_archive_config database in the Data Guard configuration. It will have the same
value on both the primary and standby databases.

Primary database : *.log_archive_config='DG_CONFIG=(SATI,SATISTD)'


Physical standby : *.log_archive_config='DG_CONFIG=(SATI,SATISTD)'

7/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

The LOG_ARCHIVE_DEST_1 parameter defines the first of up to 10 log


archive destinations, each one must specify either the LOCATION or
the SERVICE attribute to specify where to archive the redo data.
There are several optional attributes. The LOCATION or the SERVICE
attribute, must be the first attribute supplied.

The other attributes are used to control aspects of how redo


transport services transfer data from the primary to the standby
database. V$ARCHIVE_DEST view can be queried to see the current
log_archive_dest_1 settings for each destination.

In this example I’m using Location and because the directory


structure is identical on both the primary and standby database the
location is identical.

Primary database : log_archive_dest_1=


'LOCATION=”G:\oracle\oradata\SATI\archive”
VALID_FOR=(ONLINE_LOGFILE,ALL_ROLES)'

Physical standby : log_archive_dest_1=


'LOCATION=”G:\oracle\oradata\SATI\archive”
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)'

log_archive_dest_state_1 For every log_archive_dest_state_n parameter must be configured a


log_archive_dest_state_n parameter as well. This parameter specifies
whether the corresponding destination is currently enabled,
deferred, disabled or can be used as an alternated location.

Primary database : log_archive_dest_state_1='enable'


Physical standby : log_archive_dest_state_1='enable'

If using Dataguard Broker the broker will automatically setup on the


primary database a log_archive_dest_state_2

Primary database : log_archive_dest_state_2=’service="DESCRIPTION=


log_archive_dest_2 (ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=DGTWO)(PORT=1522)))(CONNE
CT_DATA=(SERVICE_NAME=SATISTD_XPT)(INSTANCE_NAME=SATISTD)(SERVER=ded
icated)))", LGWR SYNC AFFIRM delay=0 OPTIONAL max_failure=0
8/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

max_connections=1 reopen=300 db_unique_name="SATISTD" register


net_timeout=180 valid_for=(online_logfile,primary_role)’

log_archive_dest_state_2 Primary database : log_archive_dest_state_2='enable'


Physical standby : log_archive_dest_state_2='enable'

log_archive_max_processes specifies the number of archiver


background processes (ARC0 through ARCn) Oracle initially invokes,
log_archive_max_processes the maximum is 30. Note that a high number of processes take longer
to synchronize on switchover/failover. You can increase dynamically
this parameter using alter system in case of load. For manual
switchover set it to 2. Increase it only if you have a lot of redo
activity and the standby is not updated enough fast.

Primary database : log_archive_max_processes=2


Physical standby : log_archive_max_processes=2

log_archive_min_succeed_dest defines the minimum number of


log_archive_min_succeed_dest destinations that must succeed in order for the online logfile to be
available for reuse.

Management Related Parameters

Parameter Functionality and comments


dg_broker_start is set to true to enable automatic startup of the Data
Guard broker DMON process.
dg_broker_start
Primary database : dg_broker_start=true
Physical standby : dg_broker_start=true

standby_file_management set to AUTO enable automatic standby file


management so that operating system file additions and deletions on the
standby_file_management primary database are replicated on the standby database. This parameter
is only applicable to Physical standby databases.

9/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Primary database : standby_file_management=AUTO


Physical standby : standby_file_management=AUTO

SQL> show parameters spfile;

NAME TYPE VALUE


------------------------------------ ----------- ------------------------------
spfile string C:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\SPFILESATI.ORA

SATI.__db_cache_size=754974720
SATI.__java_pool_size=8388608
SATI.__large_pool_size=16777216
SATI.__shared_pool_size=209715200
SATI.__streams_pool_size=50331648
*.archive_lag_target=0
*.background_dump_dest='Z:\oracle\admin\SATI\bdump'
*.compatible='10.2.0.4.0'
*.control_files='Z:\oracle\oradata\SATI\control01.ctl','X:\oracle\oradata\SATI\control02.ctl','G:\orac
le\oradata\SATI\control03.ctl'
*.core_dump_dest='Z:\oracle\admin\SATI\cdump'
*.db_block_size=8192
*.db_cache_size=0
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_files=1024
*.db_name='SATI'
*.db_recovery_file_dest_size=26843545600
*.db_recovery_file_dest='G:\FRA'
*.db_unique_name='SATI'
*.dg_broker_start=TRUE
*.fal_client='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=DGONE)(PORT=1522)))(CONNECT_DATA
=(SERVICE_NAME=SATI_XPT)(INSTANCE_NAME=SATI)(SERVER=dedicated)))'

10/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

*.fal_server='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=DGTWO)(PORT=1522)))(CONNECT_DATA
=(SERVICE_NAME=SATISTD_XPT)(SERVER=dedicated)))'
*.fast_start_mttr_target=300
*.instance_name='SATI'
*.java_pool_size=0
*.job_queue_processes=50
*.large_pool_size=0
SATI.local_listener='(ADDRESS = (PROTOCOL = TCP)(HOST = DGONE)(PORT = 1522))'
SATISTD.local_listener='(ADDRESS = (PROTOCOL = TCP)(HOST = DGONE)(PORT = 1522))'
*.local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=DGONE)(PORT=1522))'
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(SATI,SATISTD)'
*.LOG_ARCHIVE_DEST_1='LOCATION=G:\oracle\oradata\SATI\archive
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=SATI'
SATI.log_archive_dest_1='location="G:\oracle\oradata\SATI\archive"','valid_for=(ONLINE_LOGFILE,ALL_ROL
ES)'
*.log_archive_dest_2=''
SATI.log_archive_dest_2='location="dgsby"','valid_for=(STANDBY_LOGFILE,STANDBY_ROLE)'
*.LOG_ARCHIVE_DEST_STATE_1='ENABLE'
SATI.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
SATI.log_archive_dest_state_2='ENABLE'
*.LOG_ARCHIVE_FORMAT='%t_%s_%r.arc'
SATI.log_archive_format='%t_%s_%r.arc'
*.log_archive_max_processes=2
*.log_archive_min_succeed_dest=1
SATI.log_archive_trace=0
*.open_cursors=1000
*.pga_aggregate_target=524288000
*.processes=150
*.query_rewrite_enabled='TRUE'
*.REMOTE_LOGIN_PASSWORDFILE='EXCLUSIVE'
*.remote_os_authent=TRUE
*.session_max_open_files=20
*.sessions=500
*.sga_max_size=1258291200
*.sga_target=1048576000
*.shared_pool_size=0
11/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

SATI.standby_archive_dest='dgsby'
*.standby_file_management='AUTO'
*.star_transformation_enabled='TRUE'
*.streams_pool_size=50331648
*.timed_statistics=TRUE
*.undo_management='AUTO'
*.undo_retention=3600
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='Z:\oracle\admin\SATI\udump'
*.utl_file_dir='Z:\oracle\admin\SATI\bdump'
*.workarea_size_policy='AUTO'

12/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Standby Database Creation On Windows

Enable Force Logging

In order to assure that all transactions are written to the online redologs we enable force logging, that option
prevents the execution of nologging operations.

ALTER DATABASE FORCE LOGGING;

By working in force logging mode there is a performance penalty that we must pay. In some circumstances where
we would like to run massive changes that require nologging mode we can stop log apply and at the end of the
batch close the gap on the standby using an incremental backup.

For details on this technique please check chapter 12.7 of the Oracle® Data Guard Concepts and Administration
10g Release 2 (10.2), Part Number B14239-05

http://download.oracle.com/docs/cd/B19306_01/server.102/b14239/scenarios.htm#CIHEGFEG

12.7 Using RMAN Incremental Backups to Roll Forward a Physical Standby Database

In some situations, RMAN incremental backups can be used to synchronize a physical standby database
with the primary database. Using the RMAN BACKUP INCREMENTAL FROM SCN command, you can
create a backup on the primary database that starts at the standby database's current SCN, which can then
be used to roll the standby database forward in time.

13/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Create a Password File and Copy it Over to the Standby Site

It is important to create the password file on the primary site and copy the generated file to the standby server. The
password file at both sites must be same one. Even creating the password file on the standby site in the same way
that was created on the primary site will not work.

C: >orapwd
UsagZ: orapwd file=<fname> password=<password> entries=<users> force=<y/n>
ignorecase=<y/n> nosysdba=<y/n>

where
file - name of password file (required),
password - password for SYS (optional),
entries - maximum number of distinct DBA (required),
force - whether to overwrite existing file (optional),
ignorecase - passwords are case-insensitive (optional),
nosysdba - whether to shut out the SYSDBA logon (optional Database Vault only).

There must be no spaces around the equal-to (=) character.

C: >orapwd file=orapwSATI password=<sys_password> force=y

Copy password file C:\oracle\product\10.2.0\db_1\database\ orapwSATI.ora From DGONE to the same


destination on DGTWO

Create standby redologs

When configuring FSFO we will use the synchronous redo transport mod, LogXptMode=SYNC, this mode does
require to use standby redo logs. Redo received via redo transport is written on the Standby Database to the
current standby redo log group by a RFS background process. When a log switch occurs on the Primary database,

14/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

the new redo is written to the next standby redo log group, and the previously used standby redo log group is
archived by an ARCn background process.

The process of filling and archiving redo log file groups at the Primary database is mirrored at the Standby
destination by the sequential filling and archiving of standby redo log groups.

Each standby redo log file must be the same size as the online logs of the Primary database, and in addition the
standby redo log must have at least one more group than the online redo logs on the Primary database.

On this case we have 3 online redo log groups with 2 members each on the primary
SQL> select * from v$log;

GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM


---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------
1 1 297 104857600 2 NO CURRENT 4127112821 16-NOV-08
2 1 295 104857600 2 YES INACTIVE 4127112003 16-NOV-08
3 1 296 104857600 2 YES INACTIVE 4127112226 16-NOV-08

SQL> select * from v$logfile;

GROUP# STATUS TYPE MEMBER IS_


---------- ------- ------- ---------------------------------------- ---
1 ONLINE Z:\ORACLE\ORADATA\SATI\REDO01.LOG NO
1 ONLINE X:\ORACLE\ORADATA\SATI\REDO02.LOG NO
2 ONLINE Z:\ORACLE\ORADATA\SATI\REDO11.LOG NO
2 ONLINE X:\ORACLE\ORADATA\SATI\REDO12.LOG NO
3 ONLINE Z:\ORACLE\ORADATA\SATI\REDO21.LOG NO
3 ONLINE X:\ORACLE\ORADATA\SATI\REDO22.LOG NO

6 rows selected.

We will add another 4 standby redo log groups with 2 members each on the primary, when the database will be
copied to create the standby the standby redologs will be already there.

15/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

SQL> alter database add standby logfile group 4


('Z:\ORACLE\ORADATA\SATI\STDBYREDOG4_01.LOG','X:\ORACLE\ORADATA\SATI\STDBYREDOG4_02.LOG')
2 SIZE 104857600;

Database altered.

SQL> alter database add standby logfile group 5


('Z:\ORACLE\ORADATA\SATI\STDBYREDOG5_01.LOG','X:\ORACLE\ORADATA\SATI\STDBYREDOG5_02.LOG')
2 SIZE 104857600;

Database altered.

SQL> alter database add standby logfile group 6


('Z:\ORACLE\ORADATA\SATI\STDBYREDOG6_01.LOG','X:\ORACLE\ORADATA\SATI\STDBYREDOG6_02.LOG')
2 SIZE 104857600;

Database altered.

SQL> alter database add standby logfile group 7


('Z:\ORACLE\ORADATA\SATI\STDBYREDOG7_01.LOG','X:\ORACLE\ORADATA\SATI\STDBYREDOG7_02.LOG')
2 SIZE 104857600;

Database altered.

SQL> SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$STANDBY_LOG;

GROUP# THREAD# SEQUENCE# ARC STATUS


---------- ---------- ---------- --- ----------
4 0 0 YES UNASSIGNED
5 0 0 YES UNASSIGNED
6 0 0 YES UNASSIGNED
7 0 0 YES UNASSIGNED

16/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Enable Archiving

On 10g we jaut need to mout the database and execute the command

SQL> alter database archivelog;

SQL> archive log list


Database log mode Archive Mode
Automatic archival Enabled
Archive destination G:\oracle\oradata\SATI\archive
Oldest online log sequence 295
Next log sequence to archive 297
Current log sequence 297

Setup the network using netca or netmgr, edit the tnsnames.ora to register the listeners

One important aspect of preparing the Dataguard environment is to configure the network appropriately. A default
configuration can be created and then both the listener.ora and the tnsnames.ora will need to be edited to match
the standard requirements of Dataguard

On the listener.ora of each server you will need to manually register the corresponding database using the
following syntax:

On the Primary

SID_LIST_LISTENER_DGONE =
(SID_LIST =
(SID_DESC =
17/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

(SID_NAME = SATI)
(GLOBAL_DBNAME=SATI_DGMGRL)
(ORACLE_HOME = C:\oracle\product\10.2.0\db_1)
)
)

On the Standby

SID_LIST_LISTENER_DGTWO =
(SID_LIST =
(SID_DESC =
(SID_NAME = SATISTD)
(GLOBAL_DBNAME=SATISTD_DGMGRL)
(ORACLE_HOME = C:\oracle\product\10.2.0\db_1)
)
)

These are the listener.ora files:

Listener.ora on primary database

# listener.ora Network Configuration FilZ: C:\oracle\product\10.2.0\db_1\network\admin\listener.ora


# Generated by Oracle configuration tools.

LISTENER_DGONE =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DGONE)(PORT = 1522))
)
)

SID_LIST_LISTENER_DGONE =
(SID_LIST =
(SID_DESC =
(SID_NAME = SATI)
(GLOBAL_DBNAME=SATI_DGMGRL)

18/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

(ORACLE_HOME = C:\oracle\product\10.2.0\db_1)
)
)

Listener.ora on standby database

# listener.ora Network Configuration FilZ: C:\oracle\product\10.2.0\db_1\network\admin\listener.ora


# Generated by Oracle configuration tools.

LISTENER_DGTWO =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DGTWO)(PORT = 1522))
)
)

SID_LIST_LISTENER_DGTWO =
(SID_LIST =
(SID_DESC =
(SID_NAME = SATISTD)
(GLOBAL_DBNAME=SATISTD_DGMGRL)
(ORACLE_HOME = C:\oracle\product\10.2.0\db_1)
)
)

Tnsnames.ora on primary database

# tnsnames.ora Network Configuration FilZ: C:\oracle\product\10.2.0\db_1\network\admin\tnsnames.ora


# Generated by Oracle configuration tools.

LISTENER_DGONE =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DGONE)(PORT = 1522))
)
)

19/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

SATI =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DGONE)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = SATI_DGMGRL)
)
)

SATISTD =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DGTWO)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = SATISTD_DGMGRL)
)
)

EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)

Tnsnames.ora on standby database


# tnsnames.ora Network Configuration FilZ: C:\oracle\product\10.2.0\db_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.

LISTENER_DGTWO =
20/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DGTWO)(PORT = 1522))
)
)

SATI =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DGONE)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = SATI_DGMGRL)
)
)

SATISTD =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DGTWO)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = SATISTD_DGMGRL)
)
)

EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)

21/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Shutdown the Primary Database and copy it Over to the Standby Server

On windows I just shared the directories and dragged the directories to the standby site.
On Linux I use ftp or rman.

Create the Database Service on the Standby Server

When implementing Dataguard on Windows, after installing Oracle server on the server that will host the physical
standby database, a service needs to be created to for the clone. Startmode is set to manual, because the main
role of the database is to be physical standby on which case we will mount it only. In case that the database will
assume the primary role, the broker will take care of starting it up and change the role.

oradim –NEW –SID SATISTD –STARTMODE manual

Startup mount the Primary Database and create a standby controlfile

C:\Documents and Settings\AV>SQLPLUS "/AS SYSDBA"

SQL*Plus: Release 10.2.0.3.0 - Production on Wed Nov 19 12:58:23 2008

Copyright (c) 1982, 2006, Oracle. All Rights Reserved.

Connected to an idle instance.

SQL> startup mount;


ORACLE instance started.

22/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Total System Global Area 1258291200 bytes


Fixed Size 1292180 bytes
Variable Size 654313580 bytes
Database Buffers 595591168 bytes
Redo Buffers 7094272 bytes
Database mounted.
SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS 'C:\SATISTD.CTL';

Database altered.

SQL> ALTER DATABASE OPEN;

Database altered.

Create a copy of the primary spfile and modify it for the standby

SQL> create pfile='c:\standby_pfile.ora' from spfile;

File created.

Edited FilZ:

SATISTD.__db_cache_size=545259520
SATISTD.__java_pool_size=8388608
SATISTD.__large_pool_size=8388608
SATISTD.__shared_pool_size=427819008
SATISTD.__streams_pool_size=50331648
*.archive_lag_target=0
*.background_dump_dest='Z:\oracle\admin\SATI\bdump'
*.compatible='10.2.0.4.0'

23/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

*.control_files='Z:\oracle\oradata\SATI\control01.ctl','X:\oracle\oradata\SATI\control02.ctl','G:\orac
le\oradata\SATI\control03.ctl'
*.core_dump_dest='Z:\oracle\admin\SATI\cdump'
*.db_block_size=8192
*.db_cache_size=0
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_files=1024
*.db_name='SATI'
*.db_recovery_file_dest_size=26843545600
*.db_recovery_file_dest='G:\FRA'
*.db_unique_name='SATISTD'
*.dg_broker_start=TRUE
*.fal_client='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=DGTWO)(PORT=1522)))(CONNECT_DATA
=(SERVICE_NAME=SATISTD_XPT)(INSTANCE_NAME=SATISTD)(SERVER=dedicated)))'
*.fal_server='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=DGONE)(PORT=1522)))(CONNECT_DATA
=(SERVICE_NAME=SATI_XPT)(SERVER=dedicated)))'
*.fast_start_mttr_target=300
*.instance_name='SATISTD'
*.java_pool_size=0
*.job_queue_processes=50
*.large_pool_size=0
*.local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=DGTWO)(PORT=1522))'
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(SATI,SATISTD)'
*.LOG_ARCHIVE_DEST_1='LOCATION=G:\oracle\oradata\SATI\archive
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=SATISTD'
SATISTD.log_archive_dest_1='location="G:\oracle\oradata\SATI\archive"','valid_for=(ONLINE_LOGFILE,ALL_
ROLES)'
*.log_archive_dest_2='service="(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=DGONE)(PORT=152
2)))(CONNECT_DATA=(SERVICE_NAME=SATI_XPT)(INSTANCE_NAME=SATI)(SERVER=dedicated)))"',' LGWR SYNC
AFFIRM delay=0 OPTIONAL max_failure=0 max_connections=1 reopen=300 db_unique_name="SATI" register
net_timeout=180 valid_for=(online_logfile,primary_role)'
*.log_archive_dest_3=''
*.LOG_ARCHIVE_DEST_STATE_1='ENABLE'
SATISTD.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_archive_dest_state_3='ENABLE'
24/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

*.LOG_ARCHIVE_FORMAT='%t_%s_%r.arc'
SATI.log_archive_format='%t_%s_%r.arc'
SATISTD.log_archive_format='%t_%s_%r.arc'
*.log_archive_max_processes=2
*.log_archive_min_succeed_dest=1
SATISTD.log_archive_trace=0
*.open_cursors=1000
*.pga_aggregate_target=524288000
*.processes=150
*.query_rewrite_enabled='TRUE'
*.REMOTE_LOGIN_PASSWORDFILE='EXCLUSIVE'
*.remote_os_authent=TRUE
*.session_max_open_files=20
*.sessions=500
*.sga_max_size=1258291200
*.sga_target=1048576000
*.shared_pool_size=0
SATISTD.standby_archive_dest=''
*.standby_file_management='auto'
*.star_transformation_enabled='TRUE'
*.streams_pool_size=50331648
*.timed_statistics=TRUE
*.undo_management='AUTO'
*.undo_retention=3600
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='Z:\oracle\admin\SATI\udump'
*.utl_file_dir='Z:\oracle\admin\SATI\bdump'
*.workarea_size_policy='AUTO'

25/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Copy the standby controlfile over to the Standby Server

On windows I just shared the directories and dragged the directories to the standby site.
On Linux I usually use ftp.

Generate the standby spfile from the pfile you prepared before

To generate the Physical Standby spfile, we start the database in nomount mode with the pfile we created from the
primary and edited for the standby database, and we execute the create spfile command.
SQL> STARTUP NOMOUNT PFILE='C:\standby_pfile.txt';
ORACLE instance started.

Total System Global Area 1258291200 bytes


Fixed Size 1292180 bytes
Variable Size 520095852 bytes
Database Buffers 729808896 bytes
Redo Buffers 7094272 bytes
SQL> CREATE SPFILE FROM PFILE='C:\standby_pfile.txt';

File created.

SQL> SHUTDOWN IMMEDIATE;


ORA-01507: database not mounted

ORACLE instance shut down.

SQL> startup mount;


ORACLE instance started.

Total System Global Area 1258291200 bytes


Fixed Size 1292180 bytes
26/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Variable Size 520095852 bytes


Database Buffers 729808896 bytes
Redo Buffers 7094272 bytes

SQL> show parameters spfile

NAME TYPE VALUE


------------------------------------ ----------- ------------------------------
spfile string C:\ORACLE\PRODUCT\10.2.0\DB_1\
DATABASE\SPFILESATISTD.ORA
SQL> show parameters local_li

NAME TYPE VALUE


------------------------------------ ----------- ------------------------------
local_listener string LISTENER_DGTWO

Start Recovery on the standby database and check

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

Database altered.

Check standby alert.log


Wed Nov 19 14:31:59 2008
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION
MRP0 started with pid=18, OS id=3540
Managed Standby Recovery not using Real Time Apply
parallel recovery started with 3 processes
Wed Nov 19 14:32:09 2008
Clearing online redo logfile 1 Z:\ORACLE\ORADATA\SATI\REDO01.LOG
Clearing online log 1 of thread 1 sequence number 300
Wed Nov 19 14:32:09 2008
Errors in file Z:\oracle\admin\SATI\bdump\SATISTD_mrp0_3540.trc:
27/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

ORA-19527: physical standby redo log must be renamed


ORA-00312: online log 1 thread 1: 'Z:\ORACLE\ORADATA\SATI\REDO01.LOG'

Clearing online redo logfile 1 complete


Media Recovery Waiting for thread 1 sequence 300
Wed Nov 19 14:32:10 2008
Completed: ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION
Wed Nov 19 14:44:57 2008
Using STANDBY_ARCHIVE_DEST parameter default value as G:\oracle\oradata\SATI\archive
Redo Shipping Client Connected as PUBLIC
-- Connected User is Valid
RFS[1]: Assigned to RFS process 4044
RFS[1]: Identified database type as 'physical standby'
Primary database is in MAXIMUM PERFORMANCE mode
Changing standby controlfile to MAXIMUM PERFORMANCE mode
Primary thread 1 already marked as open; setting 'closed'
Wed Nov 19 14:44:57 2008
RFS LogMiner: Client disabled from further notification
Redo Shipping Client Connected as PUBLIC
-- Connected User is Valid
RFS[2]: Assigned to RFS process 3136
RFS[2]: Identified database type as 'physical standby'
RFS[2]: Successfully opened standby log 4: 'Z:\ORACLE\ORADATA\SATI\STDBYREDOG4_01.LOG'
Wed Nov 19 14:45:06 2008
Redo Shipping Client Connected as PUBLIC
-- Connected User is Valid
RFS[3]: Assigned to RFS process 884
RFS[3]: Identified database type as 'physical standby'
Primary database is in MAXIMUM PERFORMANCE mode
Primary database is in MAXIMUM PERFORMANCE mode
RFS[3]: Successfully opened standby log 5: 'Z:\ORACLE\ORADATA\SATI\STDBYREDOG5_01.LOG'
Wed Nov 19 14:45:09 2008
Fetching gap sequence in thread 1, gap sequence 300-301
Wed Nov 19 14:45:10 2008
Redo Shipping Client Connected as PUBLIC
-- Connected User is Valid
Wed Nov 19 14:45:10 2008
Redo Shipping Client Connected as PUBLIC
28/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Wed Nov 19 14:45:10 2008


RFS[4]: Assigned to RFS process 1500
Wed Nov 19 14:45:10 2008
-- Connected User is Valid
Wed Nov 19 14:45:10 2008
RFS[4]: Identified database type as 'physical standby'
Wed Nov 19 14:45:10 2008
RFS[5]: Assigned to RFS process 3976
RFS[5]: Identified database type as 'physical standby'
Wed Nov 19 14:45:10 2008
RFS[4]: Archived Log: 'G:\ORACLE\ORADATA\SATI\ARCHIVE\1_300_646399178.ARC'
Wed Nov 19 14:45:14 2008
RFS[5]: Archived Log: 'G:\ORACLE\ORADATA\SATI\ARCHIVE\1_301_646399178.ARC'
Wed Nov 19 14:45:39 2008
Media Recovery Log G:\ORACLE\ORADATA\SATI\ARCHIVE\1_300_646399178.ARC
Media Recovery Log G:\ORACLE\ORADATA\SATI\ARCHIVE\1_301_646399178.ARC
Wed Nov 19 14:45:49 2008
Media Recovery Log G:\ORACLE\ORADATA\SATI\ARCHIVE\1_302_646399178.ARC
Media Recovery Waiting for thread 1 sequence 303 (in transit)
Wed Nov 19 14:47:36 2008
Primary database is in MAXIMUM PERFORMANCE mode
RFS[3]: Successfully opened standby log 4: 'Z:\ORACLE\ORADATA\SATI\STDBYREDOG4_01.LOG'
Wed Nov 19 14:47:41 2008
Media Recovery Log G:\ORACLE\ORADATA\SATI\ARCHIVE\1_303_646399178.ARC
Media Recovery Waiting for thread 1 sequence 304 (in transit)
Wed Nov 19 14:50:15 2008
Primary database is in MAXIMUM PERFORMANCE mode
RFS[3]: Successfully opened standby log 4: 'Z:\ORACLE\ORADATA\SATI\STDBYREDOG4_01.LOG'
Wed Nov 19 14:50:16 2008
Media Recovery Log G:\ORACLE\ORADATA\SATI\ARCHIVE\1_304_646399178.ARC
Media Recovery Waiting for thread 1 sequence 305 (in transit)

Check redolog apply on the standby


SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

29/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

SEQUENCE# FIRST_TIME NEXT_TIME


---------- -------------- --------------
300 16/11/08 17:41 19/11/08 12:58
301 19/11/08 12:58 19/11/08 13:03
302 19/11/08 13:03 19/11/08 14:45
303 19/11/08 14:45 19/11/08 14:48
304 19/11/08 14:48 19/11/08 14:50

Switch a couple of sequences on the primary:


SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination G:\oracle\oradata\SATI\archive
Oldest online log sequence 303
Next log sequence to archive 305
Current log sequence 305

SQL> alter system switch logfile;


System altered.

SQL> alter system switch logfile;


System altered.

SQL> alter system switch logfile;


System altered.

SQL> alter system switch logfile;


System altered.

SQL> alter system switch logfile;


System altered.

SQL> archive log list


Database log mode Archive Mode
Automatic archival Enabled

30/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Archive destination G:\oracle\oradata\SATI\archive


Oldest online log sequence 308
Next log sequence to archive 310
Current log sequence 310

Check again redolog apply on the standby


SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE# ;

SEQUENCE# FIRST_TIME NEXT_TIME


---------- -------------- --------------
300 16/11/08 17:41 19/11/08 12:58
301 19/11/08 12:58 19/11/08 13:03
302 19/11/08 13:03 19/11/08 14:45
303 19/11/08 14:45 19/11/08 14:48
304 19/11/08 14:48 19/11/08 14:50
305 19/11/08 14:50 19/11/08 14:56
306 19/11/08 14:56 19/11/08 14:56
307 19/11/08 14:56 19/11/08 14:56
308 19/11/08 14:56 19/11/08 14:56
309 19/11/08 14:56 19/11/08 14:56

10 rows selected.

SQL> archive log list


Database log mode Archive Mode
Automatic archival Enabled
Archive destination G:\oracle\oradata\SATI\archive
Oldest online log sequence 306
Next log sequence to archive 0
Current log sequence 310

The apply process on the standby alert log

-- Connected User is Valid


Wed Nov 19 14:45:10 2008
31/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

RFS[4]: Identified database type as 'physical standby'


Wed Nov 19 14:45:10 2008
RFS[5]: Assigned to RFS process 3976
RFS[5]: Identified database type as 'physical standby'
Wed Nov 19 14:45:10 2008
RFS[4]: Archived Log: 'G:\ORACLE\ORADATA\SATI\ARCHIVE\1_300_646399178.ARC'
Wed Nov 19 14:45:14 2008
RFS[5]: Archived Log: 'G:\ORACLE\ORADATA\SATI\ARCHIVE\1_301_646399178.ARC'
Wed Nov 19 14:45:39 2008
Media Recovery Log G:\ORACLE\ORADATA\SATI\ARCHIVE\1_300_646399178.ARC
Media Recovery Log G:\ORACLE\ORADATA\SATI\ARCHIVE\1_301_646399178.ARC
Wed Nov 19 14:45:49 2008
Media Recovery Log G:\ORACLE\ORADATA\SATI\ARCHIVE\1_302_646399178.ARC
Media Recovery Waiting for thread 1 sequence 303 (in transit)
Wed Nov 19 14:47:36 2008
Primary database is in MAXIMUM PERFORMANCE mode
RFS[3]: Successfully opened standby log 4: 'Z:\ORACLE\ORADATA\SATI\STDBYREDOG4_01.LOG'
Wed Nov 19 14:47:41 2008
Media Recovery Log G:\ORACLE\ORADATA\SATI\ARCHIVE\1_303_646399178.ARC
Media Recovery Waiting for thread 1 sequence 304 (in transit)
Wed Nov 19 14:50:15 2008
Primary database is in MAXIMUM PERFORMANCE mode
RFS[3]: Successfully opened standby log 4: 'Z:\ORACLE\ORADATA\SATI\STDBYREDOG4_01.LOG'
Wed Nov 19 14:50:16 2008
Media Recovery Log G:\ORACLE\ORADATA\SATI\ARCHIVE\1_304_646399178.ARC
Media Recovery Waiting for thread 1 sequence 305 (in transit)
Wed Nov 19 14:56:17 2008
Primary database is in MAXIMUM PERFORMANCE mode
RFS[3]: Successfully opened standby log 4: 'Z:\ORACLE\ORADATA\SATI\STDBYREDOG4_01.LOG'
Primary database is in MAXIMUM PERFORMANCE mode
RFS[3]: Successfully opened standby log 4: 'Z:\ORACLE\ORADATA\SATI\STDBYREDOG4_01.LOG'
Primary database is in MAXIMUM PERFORMANCE mode
RFS[3]: Successfully opened standby log 4: 'Z:\ORACLE\ORADATA\SATI\STDBYREDOG4_01.LOG'
Wed Nov 19 14:56:21 2008
Media Recovery Log G:\ORACLE\ORADATA\SATI\ARCHIVE\1_305_646399178.ARC
Media Recovery Log G:\ORACLE\ORADATA\SATI\ARCHIVE\1_306_646399178.ARC
Media Recovery Log G:\ORACLE\ORADATA\SATI\ARCHIVE\1_307_646399178.ARC
Media Recovery Waiting for thread 1 sequence 308 (in transit)
32/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Wed Nov 19 14:56:22 2008


Redo Shipping Client Connected as PUBLIC
-- Connected User is Valid
RFS[6]: Assigned to RFS process 3012
RFS[6]: Identified database type as 'physical standby'
RFS[6]: Successfully opened standby log 5: 'Z:\ORACLE\ORADATA\SATI\STDBYREDOG5_01.LOG'
Wed Nov 19 14:56:23 2008
Primary database is in MAXIMUM PERFORMANCE mode
RFS[3]: Successfully opened standby log 4: 'Z:\ORACLE\ORADATA\SATI\STDBYREDOG4_01.LOG'
Wed Nov 19 14:56:27 2008
Media Recovery Log G:\ORACLE\ORADATA\SATI\ARCHIVE\1_308_646399178.ARC
Media Recovery Log G:\ORACLE\ORADATA\SATI\ARCHIVE\1_309_646399178.ARC
Media Recovery Waiting for thread 1 sequence 310 (in transit)

After a while recheck

SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

SEQUENCE# FIRST_TIME NEXT_TIME


---------- -------------- --------------
300 16/11/08 17:41 19/11/08 12:58
301 19/11/08 12:58 19/11/08 13:03
302 19/11/08 13:03 19/11/08 14:45
303 19/11/08 14:45 19/11/08 14:48
304 19/11/08 14:48 19/11/08 14:50
305 19/11/08 14:50 19/11/08 14:56
306 19/11/08 14:56 19/11/08 14:56
307 19/11/08 14:56 19/11/08 14:56
308 19/11/08 14:56 19/11/08 14:56
309 19/11/08 14:56 19/11/08 14:56
310 19/11/08 14:56 19/11/08 15:25
311 19/11/08 15:25 19/11/08 15:26
312 19/11/08 15:26 19/11/08 15:26
313 19/11/08 15:26 19/11/08 15:26
314 19/11/08 15:26 19/11/08 15:26
315 19/11/08 15:26 19/11/08 15:28
316 19/11/08 15:28 19/11/08 15:31
33/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

317 19/11/08 15:31 19/11/08 15:40


318 19/11/08 15:40 19/11/08 15:41
319 19/11/08 15:41 19/11/08 15:41
320 19/11/08 15:41 19/11/08 15:41

21 rows selected.

SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

SEQUENCE# APP
---------- ---
300 YES
301 YES
302 YES
303 YES
304 YES
305 YES
306 YES
307 YES
308 YES
309 YES
310 YES
311 YES
312 YES
313 YES
314 YES
315 YES
316 YES
317 YES
318 YES
319 YES
320 YES

21 rows selected.

34/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Configuring Data Guard Broker

Enable flashback database on primary database

SQL> shutdown immediate;


Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.

Total System Global Area 1258291200 bytes


Fixed Size 1292180 bytes
Variable Size 637536364 bytes
Database Buffers 612368384 bytes
Redo Buffers 7094272 bytes
Database mounted.

SQL> select name ,db_unique_name from v$database;

NAME DB_UNIQUE_NAME
--------- ------------------------------
SATI SATI

SQL> ALTER SYSTEM SET UNDO_RETENTION=3600 SCOPE=SPFILE;

System altered.

SQL> ALTER SYSTEM SET UNDO_MANAGEMENT='AUTO' SCOPE=SPFILE;

System altered.

SQL> ALTER DATABASE FLASHBACK ON;

Database altered.
35/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

On The Standby

SQL> startup mount;


ORACLE instance started.

Total System Global Area 1258291200 bytes


Fixed Size 1292180 bytes
Variable Size 520095852 bytes
Database Buffers 729808896 bytes
Redo Buffers 7094272 bytes
Database mounted.
SQL> select name ,db_unique_name from v$database;

NAME DB_UNIQUE_NAME
--------- ------------------------------
SATI SATISTD

SQL> ALTER SYSTEM SET UNDO_RETENTION=3600 SCOPE=SPFILE;

System altered.

SQL> ALTER SYSTEM SET UNDO_MANAGEMENT='AUTO' SCOPE=SPFILE;

System altered.

SQL> ALTER DATABASE FLASHBACK ON;

Database altered.

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

Database altered.

36/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Enable database broker on primary database

The broker configuration files are automatically created when the broker is started using ALTER SYSTEM
SET DG_BROKER_START=TRUE.
SQL> ALTER SYSTEM SET DG_BROKER_START=TRUE SCOPE=BOTH;

System altered.

SQL> show parameters dg_broker

NAME TYPE VALUE


------------------------------------ ----------- ------------------------------
dg_broker_config_file1 string C:\ORACLE\PRODUCT\10.2.0\DB_1\
DATABASE\DR1SATI.DAT
dg_broker_config_file2 string C:\ORACLE\PRODUCT\10.2.0\DB_1\
DATABASE\DR2SATI.DAT
dg_broker_start boolean TRUE

Enable database broker on standby database

SQL> ALTER SYSTEM SET DG_BROKER_START=TRUE SCOPE=BOTH;

System altered.

SQL> show parameters dg_broker

NAME TYPE VALUE


------------------------------------ ----------- ------------------------------
dg_broker_config_file1 string C:\ORACLE\PRODUCT\10.2.0\DB_1\
DATABASE\DR1SATISTD.DAT
dg_broker_config_file2 string C:\ORACLE\PRODUCT\10.2.0\DB_1\
DATABASE\DR2SATISTD.DAT
dg_broker_start boolean TRUE

37/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Setup the Local_Listener parameter on the Primary Database

SQL> ALTER SYSTEM SET LOCAL_LISTENER='LISTENER_DGONE' SCOPE=BOTH;

System altered.

SQL> show parameters local_listener

NAME TYPE VALUE


------------------------------------ ----------- ------------------------------
local_listener string LISTENER_DGONE

Setup the Local_Listener parameter on the Standby Database

SQL> ALTER SYSTEM SET LOCAL_LISTENER='LISTENER_DGTWO' SCOPE =BOTH;

System altered.

SQL> show parameters local_listener;

NAME TYPE VALUE


------------------------------------ ----------- ------------------------------
local_listener string LISTENER_DGTWO

Setup the Tnsnames.ora and Listener.ora parameter files on the Primary Database

The listener.ora needs to include a service named global_db_name_DGMGRL to enable the broker
to start the databases on the event of switchover. This configuration needs to be included
on both servers. To setup shutdown the listener, make the changes and restart the listener.

38/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Listener.ora
LISTENER_DGONE =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DGONE)(PORT = 1522))
)
)

SID_LIST_LISTENER_DGONE =
(SID_LIST =
(SID_DESC =
(SID_NAME = SATI)
(GLOBAL_DBNAME=SATI_DGMGRL)
(ORACLE_HOME = C:\oracle\product\10.2.0\db_1)
)
)

Tnsnames.ora
SATI =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DGONE)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = SATI_DGMGRL)
)
)

SATISTD =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DGTWO)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)

39/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

(SERVICE_NAME = SATISTD_DGMGRL)
)
)

Check
C:\Documents and Settings\AV>lsnrctl status LISTENER_DGONE

LSNRCTL for 32-bit Windows: Version 10.2.0.4.0 - Production on 14-DEC-2008 10:19:22

Copyright (c) 1991, 2007, Oracle. All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=DGONE)(PORT=1522)))
STATUS of the LISTENER
------------------------
Alias LISTENER_DGONE
Version TNSLSNR for 32-bit Windows: Version 10.2.0.4.0 - Production
Start Date 08-DEC-2008 18:22:44
Uptime 5 days 15 hr. 56 min. 42 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File C:\oracle\product\10.2.0\db_1\network\admin\listener.ora
Listener Log File C:\oracle\product\10.2.0\db_1\network\log\listener_DGONE.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=DGONE)(PORT=1522)))
Services Summary...
Service "SATI" has 1 instance(s).
Instance "SATI", status READY, has 1 handler(s) for this service...
Service "SATI_DGB" has 1 instance(s).
Instance "SATI", status READY, has 1 handler(s) for this service...
Service "SATI_DGMGRL" has 1 instance(s).
Instance "SATI", status UNKNOWN, has 1 handler(s) for this service...
Service "SATI_XPT" has 1 instance(s).
Instance "SATI", status READY, has 1 handler(s) for this service...
The command completed successfully

C:\Documents and Settings\AV>TNSPING SATI

TNS Ping Utility for 32-bit Windows: Version 10.2.0.4.0 - Production on 14-DEC-2008 10:20:13
40/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

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

Used parameter files:


C:\oracle\product\10.2.0\db_1\network\admin\sqlnet.ora

Used TNSNAMES adapter to resolve the alias


Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = DGONE)(PORT = 1522)) (CONNECT_DATA =
(SERVER
= DEDICATED) (SERVICE_NAME = SATI_DGMGRL)))
OK (20 msec)

C:\Documents and Settings\AV>TNSPING SATISTD

TNS Ping Utility for 32-bit Windows: Version 10.2.0.4.0 - Production on 14-DEC-2008 10:20:17

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

Used parameter files:


C:\oracle\product\10.2.0\db_1\network\admin\sqlnet.ora

Used TNSNAMES adapter to resolve the alias


Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = DGTWO)(PORT = 1522)) (CONNECT_DATA =
(SERVER
= DEDICATED) (SERVICE_NAME = SATISTD_DGMGRL)))
OK (0 msec)

C:\Documents and Settings\AV>SQLPLUS sys@SATI as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on Sun Dec 14 10:21:09 2008

Copyright (c) 1982, 2007, Oracle. All Rights Reserved.

Enter password:

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

C:\Documents and Settings\AV>SQLPLUS sys@SATISTD as sysdba


41/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

SQL*Plus: Release 10.2.0.4.0 - Production on Sun Dec 14 10:21:09 2008

Copyright (c) 1982, 2007, Oracle. All Rights Reserved.

Enter password:

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

Setup the Tnsmanes.ora and Listener.ora parameter files on the Standby Database

The listener.ora needs to include a service named global_db_name_DGMGRL to enable the broker
to start the databases on the event of switchover. This configuration needs to be included
on both servers. To setup shutdown the listener, make the changes and restart the listener.

Listener.ora
LISTENER_DGTWO =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DGTWO)(PORT = 1522))
)
)

SID_LIST_LISTENER_DGTWO =
(SID_LIST =
(SID_DESC =
(SID_NAME = SATISTD)
(GLOBAL_DBNAME=SATISTD_DGMGRL)
(ORACLE_HOME = C:\oracle\product\10.2.0\db_1)
)
)

42/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Tnsnames.ora
SATI =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DGONE)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = SATI_DGMGRL)
)
)

SATISTD =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DGTWO)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = SATISTD_DGMGRL)
)
)

Check

C:\Documents and Settings\AV>lsnrctl status LISTENER_DGTWO

LSNRCTL for 32-bit Windows: Version 10.2.0.4.0 - Production on 14-DEC-2008 10:40:21

Copyright (c) 1991, 2007, Oracle. All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=DGTWO)(PORT=1522)))
STATUS of the LISTENER
------------------------
Alias listener_DGTWO
Version TNSLSNR for 32-bit Windows: Version 10.2.0.4.0 - Production
Start Date 08-DEC-2008 18:22:36
Uptime 5 days 16 hr. 17 min. 46 sec
Trace Level off

43/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Security ON: Local OS Authentication


SNMP OFF
Listener Parameter File C:\oracle\product\10.2.0\db_1\network\admin\listener.ora
Listener Log File C:\oracle\product\10.2.0\db_1\network\log\listener_DGTWO.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=DGTWO)(PORT=1522)))
Services Summary...
Service "SATISTD" has 1 instance(s).
Instance "SATISTD", status READY, has 1 handler(s) for this service...
Service "SATISTD_DGB" has 1 instance(s).
Instance "SATISTD", status READY, has 1 handler(s) for this service...
Service "SATISTD_DGMGRL" has 1 instance(s).
Instance "SATISTD", status UNKNOWN, has 1 handler(s) for this service...
Service "SATISTD_XPT" has 1 instance(s).
Instance "SATISTD", status READY, has 1 handler(s) for this service...
The command completed successfully

C:\Documents and Settings\AV>TNSPING SATI

TNS Ping Utility for 32-bit Windows: Version 10.2.0.4.0 - Production on 14-DEC-2008 10:41:28

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

Used parameter files:


C:\oracle\product\10.2.0\db_1\network\admin\sqlnet.ora

Used TNSNAMES adapter to resolve the alias


Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = DGONE)(PORT = 1522))
(CONNECT_DATA = (SERVER= DEDICATED) (SERVICE_NAME = SATI_DGMGRL)))
OK (0 msec)

C:\Documents and Settings\AV>TNSPING SATISTD

TNS Ping Utility for 32-bit Windows: Version 10.2.0.4.0 - Production on 14-DEC-2008 10:41:31

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


44/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Used parameter files:


C:\oracle\product\10.2.0\db_1\network\admin\sqlnet.ora

Used TNSNAMES adapter to resolve the alias


Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = DGTWO)(PORT = 1522))
(CONNECT_DATA = (SERVER= DEDICATED) (SERVICE_NAME = SATISTD_DGMGRL)))
OK (30 msec)

C:\Documents and Settings\AV>SQLPLUS SYS@SATI AS SYSDBA

SQL*Plus: Release 10.2.0.4.0 - Production on Sun Dec 14 10:41:41 2008

Copyright (c) 1982, 2007, Oracle. All Rights Reserved.

Enter password:

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

C:\Documents and Settings\AV>SQLPLUS SYS@SATISTD AS SYSDBA

SQL*Plus: Release 10.2.0.4.0 - Production on Sun Dec 14 10:41:59 2008

Copyright (c) 1982, 2007, Oracle. All Rights Reserved.

Enter password:

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

45/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Create the DataGuard Broker Configuration

From within the Broker Command Line interface, DGMGRL create the configuration

C:\oracle\product\agent10g\BIN>dgmgrl
DGMGRL for 32-bit Windows: Version 10.2.0.3.0 - Production

Copyright (c) 2000, 2005, Oracle. All rights reserved.

Welcome to DGMGRL, type "help" for information.


DGMGRL> help

The following commands are availablZ:

add Add a standby database to the broker configuration


connect Connect to an Oracle instance
create Create a broker configuration
disable Disable a configuration, a database, or Fast-Start Failover
edit Edit a configuration, database, or instance
enable Enable a configuration, a database, or Fast-Start Failover
exit Exit the program
failover Change a standby database to be the primary database
help Display description and syntax for a command
quit Exit the program
reinstate Change a disabled database into a viable standby database
rem Comment to be ignored by DGMGRL
remove Remove a configuration, database, or instance
show Display information about a configuration, database, or instance
shutdown Shutdown a currently running Oracle instance
start Start Fast-Start Failover observer
startup Start an Oracle database instance
stop Stop Fast-Start Failover observer
switchover Switch roles between the primary database and a standby database

Use "help <command>" to see syntax for individual commands

DGMGRL> CONNECT SYS/XXXXXX@SATI


46/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Connected.

DGMGRL> CREATE CONFIGURATION fsfodg AS


> PRIMARY DATABASE IS SATI
> CONNECT IDENTIFIER IS SATI;
Configuration "fsfodg" created with primary database "SATI"

DGMGRL> ADD DATABASE SATISTD AS


> CONNECT IDENTIFIER IS SATISTD
> MAINTAINED AS PHYSICAL;
Database "SATISTD" added

DGMGRL> show configuration;

Configuration
NamZ: fsfodg
Enabled: NO
Protection ModZ: MaxPerformance
Fast-Start Failover: DISABLED
Databases:
SATI - Primary database
SATISTD - Physical standby database

Current status for "SATI":


DISABLED

DGMGRL> SHOW DATABASE VERBOSE SATISTD;

Database
NamZ: SATISTD
RolZ: PHYSICAL STANDBY
Enabled: NO
Intended StatZ: ONLINE
Instance(s):
SATISTD

Properties:
47/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

InitialConnectIdentifier = 'SATISTD'
LogXptMode = 'SYNC'
Dependency = ''
DelayMins = '0'
Binding = 'OPTIONAL'
MaxFailure = '0'
MaxConnections = '1'
ReopenSecs = '300'
NetTimeout = '180'
LogShipping = 'ON'
PreferredApplyInstance = ''
ApplyInstanceTimeout = '0'
ApplyParallel = 'AUTO'
StandbyFileManagement = 'auto'
ArchiveLagTarget = '0'
LogArchiveMaxProcesses = '30'
LogArchiveMinSucceedDest = '1'
DbFileNameConvert = ''
LogFileNameConvert = ''
FastStartFailoverTarget = 'SATI'
StatusReport = '(monitor)'
InconsistentProperties = '(monitor)'
InconsistentLogXptProps = '(monitor)'
SendQEntries = '(monitor)'
LogXptStatus = '(monitor)'
RecvQEntries = '(monitor)'
HostName = 'DGTWO'
SidName = 'SATISTD'
LocalListenerAddress = '(ADDRESS=(PROTOCOL=TCP)(HOST=DGTWO)(PORT=1522))'
StandbyArchiveLocation = 'G:\ORACLE\ORADATA\SATI\ARCHIVE'
AlternateLocation = ''
LogArchiveTrace = '0'
LogArchiveFormat = '%t_%s_%r.arc'
LatestLog = '(monitor)'
TopWaitEvents = '(monitor)'

Current status for "SATISTD":


DISABLED
48/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

DGMGRL> SHOW DATABASE VERBOSE SATI;

Database
NamZ: SATI
RolZ: PRIMARY
Enabled: NO
Intended StatZ: ONLINE
Instance(s):
SATI

Properties:
InitialConnectIdentifier = 'SATI'
LogXptMode = 'SYNC'
Dependency = ''
DelayMins = '0'
Binding = 'OPTIONAL'
MaxFailure = '0'
MaxConnections = '1'
ReopenSecs = '300'
NetTimeout = '180'
LogShipping = 'ON'
PreferredApplyInstance = ''
ApplyInstanceTimeout = '0'
ApplyParallel = 'AUTO'
StandbyFileManagement = 'auto'
ArchiveLagTarget = '0'
LogArchiveMaxProcesses = '30'
LogArchiveMinSucceedDest = '1'
DbFileNameConvert = ''
LogFileNameConvert = ''
FastStartFailoverTarget = 'SATISTD'
StatusReport = '(monitor)'
InconsistentProperties = '(monitor)'
InconsistentLogXptProps = '(monitor)'
SendQEntries = '(monitor)'
LogXptStatus = '(monitor)'
RecvQEntries = '(monitor)'
49/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

HostName = 'DGONE'
SidName = 'SATI'
LocalListenerAddress = '(ADDRESS=(PROTOCOL=TCP)(HOST=DGONE)(PORT=1522))'
StandbyArchiveLocation = 'G:\oracle\oradata\SATI\archive'
AlternateLocation = ''
LogArchiveTrace = '0'
LogArchiveFormat = '%t_%s_%r.arc'
LatestLog = '(monitor)'
TopWaitEvents = '(monitor)'

Current status for "SATI":


DISABLED

Enable the Broker Configuration


DGMGRL> ENABLE CONFIGURATION;
Enabled.
DGMGRL> show configuration;

Configuration
NamZ: fsfodg
Enabled: YES
Protection ModZ: MaxPerformance
Fast-Start Failover: DISABLED
Databases:
SATI - Primary database
SATISTD - Physical standby database

Current status for "fsfodg":


SUCCESS

DGMGRL> ENABLE DATABASE SATISTD;


Enabled.

DGMGRL> show configuration;


50/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Configuration
NamZ: fsfodg
Enabled: YES
Protection ModZ: MaxPerformance
Fast-Start Failover: DISABLED
Databases:
SATI - Primary database
SATISTD - Physical standby database

Current status for "fsfodg":


SUCCESS

Configure Data Guard Broker For Switchover

First Check that the configuration is healthy, show database must return success
DGMGRL> show database SATI;

Database
NamZ: SATI
RolZ: PRIMARY
Enabled: YES
Intended StatZ: ONLINE
Instance(s):
SATI

Current status for "SATI":


SUCCESS

DGMGRL> show database SATISTD;

Database
NamZ: SATISTD
RolZ: PHYSICAL STANDBY
Enabled: YES
51/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Intended StatZ: ONLINE


Instance(s):
SATISTD

Current status for "SATISTD":


SUCCESS

Set the “LogXptMode” Property to SYNC

DGMGRL> EDIT DATABASE SATI SET PROPERTY 'LogXptMode'='SYNC';


Property "LogXptMode" updated
DGMGRL> EDIT DATABASE SATISTD SET PROPERTY 'LogXptMode'='SYNC';
Property "LogXptMode" updated

Set the “FastStartFailoverTarget” Property for Both the Primary and Physical Databases
DGMGRL> EDIT DATABASE SATI SET PROPERTY FastStartFailoverTarget='SATISTD';
Property "faststartfailovertarget" updated
DGMGRL> EDIT DATABASE SATISTD SET PROPERTY FastStartFailoverTarget='SATI';
Property "faststartfailovertarget" updated

Change the Protection Mode to Maximum Availability


DGMGRL> EDIT CONFIGURATION SET PROTECTION MODE AS MAXAVAILABILITY;
Succeeded.

Start The Observer to Enable Fast Start Failover

Note that the observer process needs to be run on the background of a third productions server all
the time in order to provide automatic fast start failover.
C:\oracle\product\agent10g\BIN>dgmgrl
DGMGRL for 32-bit Windows: Version 10.2.0.3.0 - Production

Copyright (c) 2000, 2005, Oracle. All rights reserved.

52/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Welcome to DGMGRL, type "help" for information.


DGMGRL> connect sys/xxxxxx@SATI
Connected.
DGMGRL> start observer;
Observer started

Enable Fast Start Failover


DGMGRL> show configuration;
Configuration
NamZ: fsfodg
Enabled: YES
Protection ModZ: MaxAvailability
Fast-Start Failover: DISABLED
Databases:
SATI - Primary database
SATISTD - Physical standby database

Current status for "fsfodg":


SUCCESS

DGMGRL> ENABLE FAST_START FAILOVER;


Enabled.
DGMGRL> show configuration;

Configuration
NamZ: fsfodg
Enabled: YES
Protection ModZ: MaxAvailability
Fast-Start Failover: ENABLED
Databases:
SATI - Primary database
SATISTD - Physical standby database
- Fast-Start Failover target

Current status for "fsfodg":

53/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

SUCCESS

Check Status On Primary and Standby databases


SQL> select DB_UNIQUE_NAME,DATABASE_ROLE,OPEN_MODE,FS_FAILOVER_STATUS,FS_FAILOVER_CURRENT_TARGET from
v$database;

DB_UNIQUE_NAME DATABASE_ROLE OPEN_MODE FS_FAILOVER_STATUS FS_FAILOVER_CURRENT_TARGET


--------------- ---------------- ---------- --------------------- ------------------------------
SATI PRIMARY READ WRITE SYNCHRONIZED SATISTD

select DB_UNIQUE_NAME,DATABASE_ROLE,OPEN_MODE,FS_FAILOVER_STATUS,FS_FAILOVER_CURRENT_TARGET from


v$database;

DB_UNIQUE_NAME DATABASE_ROLE OPEN_MODE FS_FAILOVER_STATUS FS_FAILOVER_CURRENT_TARGET


--------------- ---------------- ---------- --------------------- ------------------------------
SATISTD PHYSICAL STANDBY MOUNTED SYNCHRONIZED SATISTD

Test Switchover

Switchover is used for maintenance on the primary, downtime is required to switch roles between primary
and standby databases.

Before starting a switchover is convenient to check that the configuration and the managed databases are
healthy
DGMGRL> show configuration

Configuration
NamZ: fsfodg
Enabled: YES
Protection ModZ: MaxAvailability
Fast-Start Failover: ENABLED
Databases:
SATISTD - Physical standby database
- Fast-Start Failover target
SATI - Primary database

54/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Current status for "fsfodg":


SUCCESS

DGMGRL> show database SATI

Database
NamZ: SATI
RolZ: PRIMARY
Enabled: YES
Intended StatZ: ONLINE
Instance(s):
SATI

Current status for "SATI":


SUCCESS

DGMGRL> show database SATISTD

Database
NamZ: SATISTD
RolZ: PHYSICAL STANDBY
Enabled: YES
Intended StatZ: ONLINE
Instance(s):
SATISTD

Current status for "SATISTD":


SUCCESS

DGMGRL> switchover to SATISTD


Performing switchover NOW, please wait...
Operation requires shutdown of instance "SATI" on database "SATI"
Shutting down instance "SATI"...
ORA-01109: database not open

Database dismounted.
ORACLE instance shut down.
Operation requires shutdown of instance "SATISTD" on database "SATISTD"
Shutting down instance "SATISTD"...
ORA-01109: database not open

Database dismounted.
55/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

ORACLE instance shut down.


Operation requires startup of instance "SATI" on database "SATI"
Starting instance "SATI"...
ORACLE instance started.
Database mounted.
Operation requires startup of instance "SATISTD" on database "SATISTD"
Starting instance "SATISTD"...
ORACLE instance started.
Database mounted.
Switchover succeeded, new primary is "SATISTD"

After a successful switchover the primary and the standby needs to be synchronized

Execute this sql statement on both databases:

select DB_UNIQUE_NAME, DATABASE_ROLE, OPEN_MODE, FS_FAILOVER_STATUS,


FS_FAILOVER_CURRENT_TARGET
from v$database;

DB_UNIQUE_NAME DATABASE_ROLE OPEN_MODE FS_FAILOVER_STATUS FS_FAILOVER_CURRENT_TARGET


--------------- ---------------- ---------- --------------------- --------------------------
SATISTD PRIMARY READ WRITE SYNCHRONIZED SATI

DB_UNIQUE_NAME DATABASE_ROLE OPEN_MODE FS_FAILOVER_STATUS FS_FAILOVER_CURRENT_TARGET


--------------- ---------------- ---------- --------------------- --------------------------
SATI PHYSICAL STANDBY MOUNTED SYNCHRONIZED SATI

Configuring the Observer Process


The Observer process will be in charge of monitoring the Primary and Standby databases; in case of Primary site
failure, after checking that the Standby site is ready for the role change it will trigger the failover.

56/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Once the failed Primary site became available again the Broker will convert it to the standby site and will resume
normal activity.
The observer process needs to be run on a productions server that will provide assurance of continuous
availability. A watchdog process needs to be put in place to restart the observer immediately in the event that is
stopped.

On most productions systems it is possible to define a script that will both check and restart the process in case of
failure.

#!/bin/ksh
# startobserver
export ORACLE_BASE=/vmractst3/app01/oracle
export ORACLE_HOME=/vmractst3/app01/oracle/product/10.2
export
BASE_PATH=/vmractst3/app01/oracle/scripts/general:/opt/CTEact/bin:/usr/local/sbi
n:/usr/local/bin:/sbin:/bin:/usr/bin:/etc:/usr/local/maint/oraclZ:/usr/ccs/bin:/
usr/openwin/bin:/usr/dt/bin:/usr/local/bin:.
export PATH=$ORACLE_HOME/bin:$BASE_PATH
dgmgrl << eof
connect sys/oracle@whiteowl
STOP OBSERVER;
START OBSERVER;
eof

On windows a script can be used to start the Observer process at server startup using the Windows Scheduler.

The same script can be invoked in case that the observer process crash to restart the Observer

set ORACLE_HOME=C:\oracle\product\10.2.0\db_1
call dgmgrl -silent sys/xxxxxx@SATI "stop observer"
57/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

call dgmgrl -silent sys/xxxxxx@SATI "start observer"

Fast Start Failover Test

The FSFO can be tested by either shutting down the server where the primary database run or by shutting down
the database with the abort option.

The progress and efficiency of the FSFO can be monitored by doing tail to the Primary and Standby databases
alert logs. The whole process is also reflected on the Observer window if running on foreground.

These are the outputs registered during a FSFO test:

Observer Output During FSFO

On the observer output we see the following output:

1. At 17:36:32 the Observer detected a failure on the Primary database SATI and initiated failover
to the Standby database SATISTD
2. At 17:37:19 SATISTD is up and running as the Primary, total downtime was 47 seconds.
3. At 17:38:33 the Observer detected that the failed database SATI was mounted and initiates the
reinstatement, the database is shut down to perform flashback and recovery until it is
synchronized with the new Primary
4. at 17:40:01 SATI is up and synchronized

Database Monitoring During FSFO

Status of the databases before the Failure at 17:36:00

58/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Primary Database SATI


DB_UNIQUE_NAME DATABASE_ROLE OPEN_MODE FS_FAILOVER_STATUS FS_FAILOVER_CURRENT_TARGET
------------------------------ ---------------- ---------- --------------------- ------------------------------
SATI PRIMARY READ WRITE SYNCHRONIZED SATISTD

Standby Database SATISTD


DB_UNIQUE_NAME DATABASE_ROLE OPEN_MODE FS_FAILOVER_STATUS FS_FAILOVER_CURRENT_TARGET
------------------------------ ---------------- ---------- --------------------- ------------------------------
SATISTD PHYSICAL STANDBY MOUNTED SYNCHRONIZED SATISTD

Primary Database SATI is Shutdown


SQL> shutdown abort
ORACLE instance shut down.

Standby Database SATISTD is Converted to Primary

The new primary is up and ready in seconds, the new FSFO target is the failed database SATI and its status is
“Reinstate Required”
DB_UNIQUE_NAME DATABASE_ROLE OPEN_MODE FS_FAILOVER_STATUS FS_FAILOVER_CURRENT_TARGET
------------------------------ ---------------- ---------- ------------------ -------------------------------
SATISTD PRIMARY READ WRITE REINSTATE REQUIRED SATI

The Failed Database is Mounted


SQL> connect / as sysdba
Connected to an idle instance.
SQL> startup mount;
ORACLE instance started.

Total System Global Area 1258291200 bytes


Fixed Size 1298304 bytes
Variable Size 494928000 bytes
59/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Database Buffers 754974720 bytes


Redo Buffers 7090176 bytes
Database mounted.
SQL> @chkstat

Immediately after the database is mounted the broker shuts it down and initiates reinstate, that’s why we got ora-
3113 when trying to check status:
select DB_UNIQUE_NAME,DATABASE_ROLE,OPEN_MODE,FS_FAILOVER_STATUS,FS_FAILOVER_CURRENT_TARGET from v$database
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel

Once the database is mounted by the broker it is flashed back and synchronized with the new primary
SQL> connect / as sysdba
Connected.
SQL> @chkstat

DB_UNIQUE_NAME DATABASE_ROLE OPEN_MODE FS_FAILOVER_STATUS FS_FAILOVER_CURRENT_TARGET


------------------------------ ---------------- ---------- --------------------- ------------------------------
SATI PHYSICAL STANDBY MOUNTED SYNCHRONIZED SATI

Database Monitoring During FSFO Using the Alert Logs

The alert logs provide the best information to monitor both the FSFO and the Reinstate processes; if available you
can use the command “tail -f <alert.log>” to monitor the progress.

This is a summary of the commands executed by the broker at both databases during the FSFO and the Reinstate
processes.

SATISTD alert log (Standby converted to Primary)

60/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Wed Dec 10 17:39:04 2008


RFS[4]: Possible network disconnect with primary database
Wed Dec 10 17:39:07 2008
RFS[3]: Possible network disconnect with primary database
Wed Dec 10 17:39:07 2008
RFS[5]: Possible network disconnect with primary database
Wed Dec 10 17:39:34 2008
Attempting fast-start failover because the threshold of 30 seconds has elapsed.
Wed Dec 10 17:39:34 2008
Initiated fast-start failover to database SATISTD.
Wed Dec 10 17:39:35 2008
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE
Wed Dec 10 17:39:35 2008
Terminal Recovery: Stopping real time apply
Wed Dec 10 17:39:36 2008
MRP0: Background Media Recovery cancelled with status 16037
Wed Dec 10 17:39:36 2008
Errors in file Z:\oracle\admin\SATI\bdump\SATISTD_mrp0_2428.trc:
ORA-16037: user requested cancel of managed recovery operation

Managed Standby Recovery not using Real Time Apply


Recovery interrupted!
Recovered data files to a consistent state at change 4134609708
Wed Dec 10 17:39:40 2008
Errors in file Z:\oracle\admin\SATI\bdump\SATISTD_mrp0_2428.trc:
ORA-16037: user requested cancel of managed recovery operation

Wed Dec 10 17:39:41 2008


Terminal Recovery: Stopped real time apply
Managed Standby Recovery not using Real Time Apply
parallel recovery started with 3 processes
Terminal Recovery timestamp is '12/10/2008 17:39:48'
Terminal Recovery: applying standby redo logs.
Terminal Recovery: thread 1 seq# 721 redo required
Terminal Recovery:
Wed Dec 10 17:39:48 2008
Recovery of Online Redo Log: Thread 1 Group 5 Seq 721 Reading mem 0
Mem# 0: Z:\ORACLE\ORADATA\SATI\STDBYREDOG5_01.LOG
61/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Mem# 1: X:\ORACLE\ORADATA\SATI\STDBYREDOG5_02.LOG
Identified End-Of-Redo for thread 1 sequence 721
Terminal Recovery: Updated next available block for thread 1 sequence 721 lno 5 to value 74605
Wed Dec 10 17:39:49 2008
Incomplete recovery applied all redo ever generated.
Recovery completed through change 4134609709
Terminal Recovery: successful completion
Begin: Standby Redo Logfile archival
End: Standby Redo Logfile archival
Resetting standby activation ID 1481388743 (0x584c32c7)
Completed: ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE
Wed Dec 10 17:39:57 2008
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WAIT WITH SESSION SHUTDOWN
If media recovery active, switchover will wait 900 seconds
Standby terminal recovery start SCN: 4134609708
RESETLOGS after complete recovery through change 4134609709
Online log Z:\ORACLE\ORADATA\SATI\REDO01.LOG: Thread 1 Group 1 was previously cleared
Online log X:\ORACLE\ORADATA\SATI\REDO02.LOG: Thread 1 Group 1 was previously cleared
Online log Z:\ORACLE\ORADATA\SATI\REDO11.LOG: Thread 1 Group 2 was previously cleared
Online log X:\ORACLE\ORADATA\SATI\REDO12.LOG: Thread 1 Group 2 was previously cleared
Online log Z:\ORACLE\ORADATA\SATI\REDO21.LOG: Thread 1 Group 3 was previously cleared
Online log X:\ORACLE\ORADATA\SATI\REDO22.LOG: Thread 1 Group 3 was previously cleared
Standby became primary SCN: 4134609707
Wed Dec 10 17:39:58 2008
Setting recovery target incarnation to 3
Wed Dec 10 17:39:58 2008
Converting standby mount to primary mount.
Completed: ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WAIT WITH SESSION SHUTDOWN
Wed Dec 10 17:39:58 2008
ARC0: STARTING ARCH PROCESSES
ARC2: Archival started
ARC2 started with pid=20, OS id=2744
Wed Dec 10 17:39:58 2008
ARC0: STARTING ARCH PROCESSES COMPLETE
ARC0: Becoming the 'no SRL' ARCH
Wed Dec 10 17:40:00 2008
ALTER SYSTEM SET standby_archive_dest='' SCOPE=BOTH SID='SATISTD';
Wed Dec 10 17:40:00 2008
62/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

ALTER SYSTEM SET


log_archive_dest_1='location="G:\oracle\oradata\SATI\archive"','valid_for=(ONLINE_LOGFILE,ALL_ROLES)'
SCOPE=BOTH SID='SATISTD';
Wed Dec 10 17:40:00 2008
ALTER SYSTEM SET log_archive_dest_state_1='ENABLE' SCOPE=BOTH SID='SATISTD';
Wed Dec 10 17:40:00 2008
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE AVAILABILITY
Wed Dec 10 17:40:00 2008
Completed: ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE AVAILABILITY
Wed Dec 10 17:40:00 2008
ALTER DATABASE OPEN
Wed Dec 10 17:40:01 2008
Assigning activation ID 1481384601 (0x584c2299)
LGWR: Primary database is in MAXIMUM AVAILABILITY mode
LGWR: Destination LOG_ARCHIVE_DEST_1 is not serviced by LGWR
Thread 1 opened at log sequence 1
Current log# 1 seq# 1 mem# 0: Z:\ORACLE\ORADATA\SATI\REDO01.LOG
Current log# 1 seq# 1 mem# 1: X:\ORACLE\ORADATA\SATI\REDO02.LOG
Successful open of redo thread 1
Wed Dec 10 17:40:01 2008
SMON: enabling cache recovery
Wed Dec 10 17:40:04 2008
Successfully onlined Undo Tablespace 1.
Dictionary check beginning
Dictionary check complete
Starting control autobackup
Control autobackup written to DISK device
handle 'G:\ORACLE_BACKUP\SATI\RMAN\DB\SATI_CONTROL_SATIXXX_C-1342263826-20081210-00'
Wed Dec 10 17:40:06 2008
SMON: enabling tx recovery
Wed Dec 10 17:40:06 2008
*********************************************************************
WARNING: The following temporary tablespaces contain no files.
This condition can occur when a backup controlfile has
been restored. It may be necessary to add files to these
tablespaces. That can be done using the SQL statement:

ALTER TABLESPACE <tablespace_name> ADD TEMPFILE


63/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Alternatively, if these temporary tablespaces are no longer


needed, then they can be dropped.
Empty temporary tablespacZ: TEMP_TOOLS
*********************************************************************
Database Characterset is IW8ISO8859P8
Opening with internal Resource Manager plan
where NUMA PG = 1, CPUs = 4
replication_dependency_tracking turned off (no async multimaster replication found)
Starting background process QMNC
QMNC started with pid=22, OS id=2912
Wed Dec 10 17:40:08 2008
LOGSTDBY: Validating controlfile with logical metadata
Wed Dec 10 17:40:08 2008
LOGSTDBY: Validation complete
Completed: ALTER DATABASE OPEN
Wed Dec 10 17:40:13 2008
ALTER SYSTEM SET standby_archive_dest='' SCOPE=BOTH SID='SATISTD';
Wed Dec 10 17:40:13 2008
ALTER SYSTEM SET log_archive_trace=0 SCOPE=BOTH SID='SATISTD';
Wed Dec 10 17:40:13 2008
ALTER SYSTEM SET log_archive_format='%t_%s_%r.arc' SCOPE=SPFILE SID='SATISTD';
Wed Dec 10 17:40:14 2008
ALTER SYSTEM SET standby_file_management='auto' SCOPE=BOTH SID='*';
Wed Dec 10 17:40:14 2008
ALTER SYSTEM SET archive_lag_target=0 SCOPE=BOTH SID='*';
Wed Dec 10 17:40:14 2008
ALTER SYSTEM SET log_archive_max_processes=2 SCOPE=BOTH SID='*';
Wed Dec 10 17:40:14 2008
ALTER SYSTEM SET log_archive_min_succeed_dest=1 SCOPE=BOTH SID='*';
FSFP started with pid=27, OS id=460
Wed Dec 10 17:40:20 2008
Failover succeeded. Primary database is now SATISTD.
Wed Dec 10 17:40:50 2008
Shutting down archive processes
Wed Dec 10 17:40:55 2008
ARCH shutting down
ARC2: Archival stopped
64/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Wed Dec 10 17:41:35 2008


ALTER SYSTEM SET
log_archive_dest_2='service="(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=DGONE)(PORT=1522)
))(CONNECT_DATA=(SERVICE_NAME=SATI_XPT)(INSTANCE_NAME=SATI)(SERVER=dedicated)))"',' LGWR SYNC AFFIRM
delay=0 OPTIONAL max_failure=0 max_connections=1 reopen=1 db_unique_name="SATI" register
net_timeout=180 valid_for=(online_logfile,primary_role)' SCOPE=BOTH;
Wed Dec 10 17:41:35 2008
ALTER SYSTEM SET log_archive_dest_state_2='RESET' SCOPE=BOTH;
Wed Dec 10 17:42:23 2008
ALTER SYSTEM SET
log_archive_dest_2='service="(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=DGONE)(PORT=1522)
))(CONNECT_DATA=(SERVICE_NAME=SATI_XPT)(INSTANCE_NAME=SATI)(SERVER=dedicated)))"',' LGWR SYNC AFFIRM
delay=0 OPTIONAL max_failure=0 max_connections=1 reopen=1 db_unique_name="SATI" register
net_timeout=180 valid_for=(online_logfile,primary_role)' SCOPE=BOTH;
Wed Dec 10 17:42:23 2008
ALTER SYSTEM SET log_archive_dest_state_2='RESET' SCOPE=BOTH;
Wed Dec 10 17:42:47 2008
ALTER SYSTEM SET
log_archive_dest_2='service="(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=DGONE)(PORT=1522)
))(CONNECT_DATA=(SERVICE_NAME=SATI_XPT)(INSTANCE_NAME=SATI)(SERVER=dedicated)))"',' LGWR SYNC AFFIRM
delay=0 OPTIONAL max_failure=0 max_connections=1 reopen=300 db_unique_name="SATI" register
net_timeout=180 valid_for=(online_logfile,primary_role)' SCOPE=BOTH;
Wed Dec 10 17:42:47 2008
ALTER SYSTEM SET log_archive_dest_state_2='ENABLE' SCOPE=BOTH;
Wed Dec 10 17:42:47 2008
ALTER SYSTEM ARCHIVE LOG
Wed Dec 10 17:42:47 2008
Destination LOG_ARCHIVE_DEST_2 is UNSYNCHRONIZED
******************************************************************
LGWR: Setting 'active' archival for destination LOG_ARCHIVE_DEST_2
******************************************************************
LNSb started with pid=31, OS id=388
Wed Dec 10 17:42:55 2008
LGWR: Standby redo logfile selected to archive thread 1 sequence 2
LGWR: Standby redo logfile selected for thread 1 sequence 2 for destination LOG_ARCHIVE_DEST_2
Wed Dec 10 17:42:55 2008
Thread 1 advanced to log sequence 2 (LGWR switch)
Current log# 2 seq# 2 mem# 0: Z:\ORACLE\ORADATA\SATI\REDO11.LOG
65/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Current log# 2 seq# 2 mem# 1: X:\ORACLE\ORADATA\SATI\REDO12.LOG


Wed Dec 10 17:42:55 2008
ARCH: LGWR is actively archiving destination LOG_ARCHIVE_DEST_2
ARCH: Standby redo logfile selected for thread 1 sequence 1 for destination LOG_ARCHIVE_DEST_2
Wed Dec 10 17:44:05 2008
Destination LOG_ARCHIVE_DEST_2 is SYNCHRONIZED
LGWR: Standby redo logfile selected to archive thread 1 sequence 3
LGWR: Standby redo logfile selected for thread 1 sequence 3 for destination LOG_ARCHIVE_DEST_2
Wed Dec 10 17:44:05 2008
Thread 1 advanced to log sequence 3 (LGWR switch)
Current log# 3 seq# 3 mem# 0: Z:\ORACLE\ORADATA\SATI\REDO21.LOG
Current log# 3 seq# 3 mem# 1: X:\ORACLE\ORADATA\SATI\REDO22.LOG

SATI alert log (Failed Primary Reinstated and converted to Standby)

Wed Dec 10 17:39:42 2008


Shutting down instance (abort)
License high water mark = 7
Instance terminated by USER, pid = 3416
Wed Dec 10 17:41:51 2008
Starting ORACLE instance (normal)
LICENSE_MAX_SESSION = 0
LICENSE_SESSIONS_WARNING = 0
Picked latch-free SCN scheme 2
Autotune of undo retention is turned on.
IMODE=BR
ILAT =55
LICENSE_MAX_USERS = 0
SYS auditing is disabled
ksdpec: called for event 13740 prior to event group initialization
Starting up ORACLE RDBMS Version: 10.2.0.4.0.
System parameters with non-default values:
processes = 150
sessions = 500
timed_statistics = TRUE
sga_max_size = 1258291200
66/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

__shared_pool_size = 209715200
shared_pool_size = 0
__large_pool_size = 16777216
large_pool_size = 0
__java_pool_size = 8388608
java_pool_size = 0
__streams_pool_size = 50331648
streams_pool_size = 50331648
sga_target = 1048576000
control_files = Z:\ORACLE\ORADATA\SATI\CONTROL01.CTL,
X:\ORACLE\ORADATA\SATI\CONTROL02.CTL, G:\ORACLE\ORADATA\SATI\CONTROL03.CTL
db_block_size = 8192
__db_cache_size = 754974720
db_cache_size = 0
compatible = 10.2.0.4.0
log_archive_config = DG_CONFIG=(SATI,SATISTD)
log_archive_dest_1 = location="G:\oracle\oradata\SATI\archive",
valid_for=(ONLINE_LOGFILE,ALL_ROLES)
log_archive_dest_2 =
service="(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=DGTWO)(PORT=1522)))(CONNECT_DATA=(SER
VICE_NAME=SATISTD_XPT)(INSTANCE_NAME=SATISTD)(SERVER=dedicated)))", LGWR SYNC AFFIRM delay=0
OPTIONAL max_failure=0 max_connections=1 reopen=300 db_unique_name="SATISTD" register
net_timeout=180 valid_for=(online_logfile,primary_role)
log_archive_dest_state_1 = ENABLE
log_archive_dest_state_2 = ENABLE
log_archive_max_processes= 2
log_archive_min_succeed_dest= 1
standby_archive_dest =
log_archive_trace = 0
log_archive_format = %t_%s_%r.arc
fal_client =
(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=DGONE)(PORT=1522)))(CONNECT_DATA=(SERVICE_NAME
=SATI_XPT)(INSTANCE_NAME=SATI)(SERVER=dedicated)))
fal_server =
(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=DGTWO)(PORT=1522)))(CONNECT_DATA=(SERVICE_NAME
=SATISTD_XPT)(SERVER=dedicated)))
archive_lag_target = 0
db_files = 1024
67/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

db_file_multiblock_read_count= 16
db_recovery_file_dest = G:\FRA
db_recovery_file_dest_size= 26843545600
standby_file_management = AUTO
fast_start_mttr_target = 300
undo_management = AUTO
undo_tablespace = UNDOTBS1
undo_retention = 3600
remote_os_authent = TRUE
remote_login_passwordfile= EXCLUSIVE
db_domain =
instance_name = SATI
local_listener = (ADDRESS = (PROTOCOL = TCP)(HOST = DGONE)(PORT = 1522))
utl_file_dir = Z:\oracle\admin\SATI\bdump
job_queue_processes = 50
background_dump_dest = Z:\ORACLE\ADMIN\SATI\BDUMP
user_dump_dest = Z:\ORACLE\ADMIN\SATI\UDUMP
core_dump_dest = Z:\ORACLE\ADMIN\SATI\CDUMP
session_max_open_files = 20
db_name = SATI
db_unique_name = SATI
open_cursors = 1000
star_transformation_enabled= TRUE
query_rewrite_enabled = TRUE
pga_aggregate_target = 524288000
workarea_size_policy = AUTO
dg_broker_start = TRUE
PMON started with pid=2, OS id=488
PSP0 started with pid=3, OS id=548
MMAN started with pid=4, OS id=3920
DBW0 started with pid=5, OS id=2408
LGWR started with pid=6, OS id=2440
CKPT started with pid=7, OS id=2756
SMON started with pid=8, OS id=3620
RECO started with pid=9, OS id=3128
CJQ0 started with pid=10, OS id=3800
MMON started with pid=11, OS id=1144
MMNL started with pid=12, OS id=3068
68/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

DMON started with pid=13, OS id=3384


Wed Dec 10 17:41:52 2008
ALTER DATABASE MOUNT
Wed Dec 10 17:41:56 2008
Setting recovery target incarnation to 2
Wed Dec 10 17:41:56 2008
Successful mount of redo thread 1, with mount id 1481496160
Wed Dec 10 17:41:56 2008
Allocated 7966612 bytes in shared pool for flashback generation buffer
Starting background process RVWR
RVWR started with pid=15, OS id=2180
Wed Dec 10 17:41:56 2008
Database mounted in Exclusive Mode
Completed: ALTER DATABASE MOUNT
Wed Dec 10 17:41:59 2008
Starting Data Guard Broker (DMON)
NSV0 started with pid=16, OS id=568
INSV started with pid=18, OS id=2840
Wed Dec 10 17:42:06 2008
ALTER SYSTEM SET log_archive_dest_state_2='RESET' SCOPE=BOTH;
NSV0 started with pid=19, OS id=1528
RSM0 started with pid=20, OS id=376
Wed Dec 10 17:42:27 2008
ALTER SYSTEM SET log_archive_dest_2='' SCOPE=BOTH;
Wed Dec 10 17:42:27 2008
ALTER SYSTEM SET log_archive_dest_state_2='ENABLE' SCOPE=BOTH;
Wed Dec 10 17:42:27 2008
FLASHBACK DATABASE TO SCN 4134609707
Flashback Restore Start
Flashback Restore Complete
Flashback Media Recovery Start
parallel recovery started with 3 processes
Wed Dec 10 17:42:35 2008
Recovery of Online Redo Log: Thread 1 Group 1 Seq 721 Reading mem 0
Mem# 0: Z:\ORACLE\ORADATA\SATI\REDO01.LOG
Mem# 1: X:\ORACLE\ORADATA\SATI\REDO02.LOG
Wed Dec 10 17:42:39 2008
Incomplete Recovery applied until change 4134609708
69/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Flashback Media Recovery Complete


Completed: FLASHBACK DATABASE TO SCN 4134609707
Wed Dec 10 17:42:41 2008
alter database convert to physical standby
Clearing standby activation ID 1481388743 (0x584c32c7)
The primary database controlfile was created using the
'MAXLOGFILES 37' clause.
There is space for up to 34 standby redo logfiles
Use the following SQL commands on the standby database to create
standby redo logfiles that match the primary databasZ:
ALTER DATABASE ADD STANDBY LOGFILE 'srl1.f' SIZE 104857600;
ALTER DATABASE ADD STANDBY LOGFILE 'srl2.f' SIZE 104857600;
ALTER DATABASE ADD STANDBY LOGFILE 'srl3.f' SIZE 104857600;
ALTER DATABASE ADD STANDBY LOGFILE 'srl4.f' SIZE 104857600;
Completed: alter database convert to physical standby
Wed Dec 10 17:42:42 2008
Shutting down instancZ: further logons disabled
Wed Dec 10 17:42:42 2008
Stopping background process CJQ0
Wed Dec 10 17:42:43 2008
Stopping background process MMNL
Wed Dec 10 17:42:44 2008
Stopping background process MMON
Wed Dec 10 17:42:44 2008
Shutting down instance (immediate)
License high water mark = 7
Wed Dec 10 17:42:44 2008
Stopping Job queue slave processes, flags = 7
Wed Dec 10 17:42:44 2008
Job queue slave processes stopped
Wed Dec 10 17:42:51 2008
alter database CLOSE NORMAL
ORA-1109 signalled during: alter database CLOSE NORMAL...
Wed Dec 10 17:42:51 2008
alter database DISMOUNT
Completed: alter database DISMOUNT
ARCH: Archival disabled due to shutdown: 1089
Shutting down archive processes
70/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Archiving is disabled
Archive process shutdown avoided: 0 active
Shutting down Data Guard Broker processes
Wed Dec 10 17:42:53 2008
Completed: Data Guard Broker shutdown
Wed Dec 10 17:42:55 2008
ARCH: Archival disabled due to shutdown: 1089
Shutting down archive processes
Archiving is disabled
Archive process shutdown avoided: 0 active
Wed Dec 10 17:42:56 2008
Starting ORACLE instance (normal)
LICENSE_MAX_SESSION = 0
LICENSE_SESSIONS_WARNING = 0
Picked latch-free SCN scheme 2
Autotune of undo retention is turned on.
IMODE=BR
ILAT =55
LICENSE_MAX_USERS = 0
SYS auditing is disabled
ksdpec: called for event 13740 prior to event group initialization
Starting up ORACLE RDBMS Version: 10.2.0.4.0.
System parameters with non-default values:
processes = 150
sessions = 500
timed_statistics = TRUE
sga_max_size = 1258291200
__shared_pool_size = 209715200
shared_pool_size = 0
__large_pool_size = 16777216
large_pool_size = 0
__java_pool_size = 8388608
java_pool_size = 0
__streams_pool_size = 50331648
streams_pool_size = 50331648
sga_target = 1048576000
control_files = Z:\ORACLE\ORADATA\SATI\CONTROL01.CTL,
X:\ORACLE\ORADATA\SATI\CONTROL02.CTL, G:\ORACLE\ORADATA\SATI\CONTROL03.CTL
71/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

db_block_size = 8192
__db_cache_size = 754974720
db_cache_size = 0
compatible = 10.2.0.4.0
log_archive_config = DG_CONFIG=(SATI,SATISTD)
log_archive_dest_1 = location="G:\oracle\oradata\SATI\archive",
valid_for=(ONLINE_LOGFILE,ALL_ROLES)
log_archive_dest_2 =
log_archive_dest_state_1 = ENABLE
log_archive_dest_state_2 = ENABLE
log_archive_max_processes= 2
log_archive_min_succeed_dest= 1
standby_archive_dest =
log_archive_trace = 0
log_archive_format = %t_%s_%r.arc
fal_client =
(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=DGONE)(PORT=1522)))(CONNECT_DATA=(SERVICE_NAME
=SATI_XPT)(INSTANCE_NAME=SATI)(SERVER=dedicated)))
fal_server =
(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=DGTWO)(PORT=1522)))(CONNECT_DATA=(SERVICE_NAME
=SATISTD_XPT)(SERVER=dedicated)))
archive_lag_target = 0
db_files = 1024
db_file_multiblock_read_count= 16
db_recovery_file_dest = G:\FRA
db_recovery_file_dest_size= 26843545600
standby_file_management = AUTO
fast_start_mttr_target = 300
undo_management = AUTO
undo_tablespace = UNDOTBS1
undo_retention = 3600
remote_os_authent = TRUE
remote_login_passwordfile= EXCLUSIVE
db_domain =
instance_name = SATI
local_listener = (ADDRESS = (PROTOCOL = TCP)(HOST = DGONE)(PORT = 1522))
utl_file_dir = Z:\oracle\admin\SATI\bdump
job_queue_processes = 50
72/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

background_dump_dest = Z:\ORACLE\ADMIN\SATI\BDUMP
user_dump_dest = Z:\ORACLE\ADMIN\SATI\UDUMP
core_dump_dest = Z:\ORACLE\ADMIN\SATI\CDUMP
session_max_open_files = 20
db_name = SATI
db_unique_name = SATI
open_cursors = 1000
star_transformation_enabled= TRUE
query_rewrite_enabled = TRUE
pga_aggregate_target = 524288000
workarea_size_policy = AUTO
dg_broker_start = TRUE
PMON started with pid=2, OS id=2172
PSP0 started with pid=3, OS id=2320
MMAN started with pid=4, OS id=3324
DBW0 started with pid=5, OS id=3820
LGWR started with pid=6, OS id=3244
CKPT started with pid=7, OS id=3984
SMON started with pid=8, OS id=1872
RECO started with pid=9, OS id=3768
CJQ0 started with pid=10, OS id=3988
MMON started with pid=11, OS id=2016
MMNL started with pid=12, OS id=3840
DMON started with pid=13, OS id=3280
Wed Dec 10 17:42:56 2008
alter database mount
Wed Dec 10 17:43:00 2008
Setting recovery target incarnation to 2
ARCH: STARTING ARCH PROCESSES
ARC0 started with pid=15, OS id=888
Wed Dec 10 17:43:00 2008
ARC0: Archival started
ARC1 started with pid=16, OS id=756
Wed Dec 10 17:43:00 2008
ARC1: Archival started
ARCH: STARTING ARCH PROCESSES COMPLETE
Wed Dec 10 17:43:00 2008
ARC0: Becoming the 'no FAL' ARCH
73/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

ARC0: Becoming the 'no SRL' ARCH


ARC0: Thread not mounted
Wed Dec 10 17:43:00 2008
Successful mount of redo thread 1, with mount id 1481482656
Wed Dec 10 17:43:00 2008
Allocated 7966612 bytes in shared pool for flashback generation buffer
Starting background process RVWR
RVWR started with pid=17, OS id=1828
Wed Dec 10 17:43:01 2008
Physical Standby Database mounted.
Wed Dec 10 17:43:01 2008
ARC1: Becoming the heartbeat ARCH
Completed: alter database mount
Wed Dec 10 17:43:04 2008
Starting Data Guard Broker (DMON)
INSV started with pid=18, OS id=1040
NSV0 started with pid=19, OS id=3944
RSM0 started with pid=20, OS id=3380
Using STANDBY_ARCHIVE_DEST parameter default value as USE_DB_RECOVERY_FILE_DEST
Wed Dec 10 17:43:19 2008
ALTER SYSTEM SET log_archive_dest_2='location="dgsby"','valid_for=(STANDBY_LOGFILE,STANDBY_ROLE)'
SCOPE=BOTH SID='SATI';
Wed Dec 10 17:43:19 2008
ALTER SYSTEM SET log_archive_dest_state_2='ENABLE' SCOPE=BOTH SID='SATI';
Wed Dec 10 17:43:19 2008
ALTER SYSTEM SET standby_archive_dest='dgsby' SCOPE=BOTH SID='SATI';
Wed Dec 10 17:43:19 2008
ALTER SYSTEM SET log_archive_trace=0 SCOPE=BOTH SID='SATI';
Wed Dec 10 17:43:19 2008
ALTER SYSTEM SET log_archive_format='%t_%s_%r.arc' SCOPE=SPFILE SID='SATI';
Wed Dec 10 17:43:19 2008
ALTER SYSTEM SET standby_file_management='AUTO' SCOPE=BOTH SID='*';
Wed Dec 10 17:43:19 2008
ALTER SYSTEM SET archive_lag_target=0 SCOPE=BOTH SID='*';
Wed Dec 10 17:43:19 2008
ALTER SYSTEM SET log_archive_max_processes=2 SCOPE=BOTH SID='*';
Wed Dec 10 17:43:19 2008
ALTER SYSTEM SET log_archive_min_succeed_dest=1 SCOPE=BOTH SID='*';
74/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Wed Dec 10 17:43:19 2008


ALTER SYSTEM SET
fal_server='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=DGTWO)(PORT=1522)))(CONNECT_DATA=(
SERVICE_NAME=SATISTD_XPT)(SERVER=dedicated)))' SCOPE=BOTH;
Wed Dec 10 17:43:19 2008
ALTER SYSTEM SET
fal_client='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=DGONE)(PORT=1522)))(CONNECT_DATA=(
SERVICE_NAME=SATI_XPT)(INSTANCE_NAME=SATI)(SERVER=dedicated)))' SCOPE=BOTH;
Wed Dec 10 17:43:19 2008
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE THROUGH ALL SWITCHOVER DISCONNECT USING CURRENT
LOGFILE
MRP0 started with pid=23, OS id=2548
Managed Standby Recovery starting Real Time Apply
parallel recovery started with 3 processes
Wed Dec 10 17:43:28 2008
Waiting for all non-current ORLs to be archived...
Clearing online redo logfile 1 Z:\ORACLE\ORADATA\SATI\REDO01.LOG
Clearing online log 1 of thread 1 sequence number 721
Wed Dec 10 17:43:28 2008
Completed: ALTER DATABASE RECOVER MANAGED STANDBY DATABASE THROUGH ALL SWITCHOVER DISCONNECT USING
CURRENT LOGFILE
Wed Dec 10 17:43:30 2008
Clearing online redo logfile 1 complete
Clearing online redo logfile 2 Z:\ORACLE\ORADATA\SATI\REDO11.LOG
Clearing online log 2 of thread 1 sequence number 719
Wed Dec 10 17:43:31 2008
Redo Shipping Client Connected as PUBLIC
-- Connected User is Valid
RFS[1]: Assigned to RFS process 3180
RFS[1]: Identified database type as 'physical standby'
Primary database is in MAXIMUM AVAILABILITY mode
Changing standby controlfile to RESYNCHRONIZATION level
Wed Dec 10 17:43:32 2008
RFS LogMiner: Client disabled from further notification
Wed Dec 10 17:43:32 2008
Clearing online redo logfile 2 complete
Clearing online redo logfile 3 Z:\ORACLE\ORADATA\SATI\REDO21.LOG
Clearing online log 3 of thread 1 sequence number 720
75/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Clearing online redo logfile 3 complete


Media Recovery Waiting for thread 1 sequence 721
Wed Dec 10 17:43:35 2008
Primary database is in MAXIMUM AVAILABILITY mode
Standby controlfile consistent with primary
RFS[1]: Successfully opened standby log 4: 'Z:\ORACLE\ORADATA\SATI\STDBYREDOG4_01.LOG'
Wed Dec 10 17:43:37 2008
Redo Shipping Client Connected as PUBLIC
-- Connected User is Valid
RFS[2]: Assigned to RFS process 3536
RFS[2]: Identified database type as 'physical standby'
Wed Dec 10 17:43:37 2008
Redo Shipping Client Connected as PUBLIC
-- Connected User is Valid
RFS[3]: Assigned to RFS process 3808
RFS[3]: Identified database type as 'physical standby'
Wed Dec 10 17:43:39 2008
RFS[2]: Successfully opened standby log 5: 'Z:\ORACLE\ORADATA\SATI\STDBYREDOG5_01.LOG'
RFS[2]: Detected missing archivals for Branch(resetlogs_id): 646399178
RFS[2]: Last archived SCN: 0:-160415356 Last change SCN: 0:-160357587
RFS[2]: New Archival REDO Branch(resetlogs_id): 673119597 Prior: 646399178
RFS[2]: Archival Activation ID: 0x584c2299 Current: 0x0
RFS[2]: Effect of primary database OPEN RESETLOGS
RFS[2]: Managed Standby Recovery process is active
New incarnation branch detected in ArchiveLog, filename Z:\ORACLE\ORADATA\SATI\STDBYREDOG5_01.LOG
Inspection of file changed rdi from 2 to 3
Setting recovery target incarnation to 3
Wed Dec 10 17:43:40 2008
Setting recovery target incarnation to 3
Wed Dec 10 17:43:44 2008
RFS[3]: Archived Log: 'C:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\DGSBY1_721_646399178.ARC'
Wed Dec 10 17:43:45 2008
MRP0: Incarnation has changed! Retry recovery...
Wed Dec 10 17:43:45 2008
Errors in file Z:\oracle\admin\SATI\bdump\SATI_mrp0_2548.trc:
ORA-19906: recovery target incarnation changed during recovery

Managed Standby Recovery not using Real Time Apply


76/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Recovery interrupted!
Wed Dec 10 17:43:49 2008
Errors in file Z:\oracle\admin\SATI\bdump\SATI_mrp0_2548.trc:
ORA-19906: recovery target incarnation changed during recovery

Wed Dec 10 17:44:09 2008


Managed Standby Recovery starting Real Time Apply
parallel recovery started with 3 processes
Media Recovery start incarnation depth : 1, target inc# : 3, irscn : 4134609709
Wed Dec 10 17:44:15 2008
Waiting for all non-current ORLs to be archived...
Media Recovery Log C:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\DGSBY1_721_646399178.ARC
Identified End-Of-Redo for thread 1 sequence 721
Wed Dec 10 17:44:15 2008
Media Recovery End-Of-Redo indicator encountered
Wed Dec 10 17:44:15 2008
Media Recovery Continuing
Media Recovery Log C:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\DGSBY1_1_673119597.ARC
Media Recovery Waiting for thread 1 sequence 2 (in transit)
Wed Dec 10 17:44:21 2008
Recovery of Online Redo Log: Thread 1 Group 4 Seq 2 Reading mem 0
Mem# 0: Z:\ORACLE\ORADATA\SATI\STDBYREDOG4_01.LOG
Mem# 1: X:\ORACLE\ORADATA\SATI\STDBYREDOG4_02.LOG
Wed Dec 10 17:44:46 2008
Primary database is in MAXIMUM AVAILABILITY mode
Changing standby controlfile to MAXIMUM AVAILABILITY level
RFS[1]: Successfully opened standby log 4: 'Z:\ORACLE\ORADATA\SATI\STDBYREDOG4_01.LOG'
Wed Dec 10 17:44:47 2008
Media Recovery Log C:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\DGSBY1_2_673119597.ARC
Media Recovery Waiting for thread 1 sequence 3 (in transit)
Wed Dec 10 17:44:47 2008
Recovery of Online Redo Log: Thread 1 Group 4 Seq 3 Reading mem 0
Mem# 0: Z:\ORACLE\ORADATA\SATI\STDBYREDOG4_01.LOG
Mem# 1: X:\ORACLE\ORADATA\SATI\STDBYREDOG4_02.LOG
Wed Dec 10 17:57:59 2008
db_recovery_file_dest_size of 25600 MB is 4.70% used. This is a
user-specified limit on the amount of space that will be used by this
database for recovery-related files, and does not reflect the amount of
77/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

space available in the underlying filesystem or ASM diskgroup.

DGMGRL CHECKUPS

There are several checkup commands that can be executed from within DGMGRL to obtain the status of each one
of the Dataguard components. If at the last line of the output of any acomponent there is a line having SUCCESS
status, that means the component is healthy.

C:\Documents and Settings\AV\Desktop\SCRIPTS>dgmgrl sys/xxxxxx@SATISTD


DGMGRL for 32-bit Windows: Version 10.2.0.4.0 - Production

Copyright (c) 2000, 2005, Oracle. All rights reserved.

Welcome to DGMGRL, type "help" for information.


Connected.
DGMGRL> SHOW CONFIGURATION

Configuration
NamZ: fsfodg
Enabled: YES
Protection ModZ: MaxAvailability
Fast-Start Failover: ENABLED
Databases:
SATISTD - Primary database
SATI - Physical standby database
- Fast-Start Failover target

Current status for "fsfodg":


SUCCESS

78/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

DGMGRL> SHOW DATABASE SATI

Database
NamZ: SATI
RolZ: PHYSICAL STANDBY
Enabled: YES
Intended StatZ: ONLINE
Instance(s):
SATI

Current status for "SATI":


SUCCESS

DGMGRL> SHOW DATABASE SATISTD

Database
NamZ: SATISTD
RolZ: PRIMARY
Enabled: YES
Intended StatZ: ONLINE
Instance(s):
SATISTD

Current status for "SATISTD":


SUCCESS

DGMGRL> SHOW DATABASE SATISTD

Database
NamZ: SATISTD
RolZ: PRIMARY
79/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Enabled: YES
Intended StatZ: ONLINE
Instance(s):
SATISTD

Current status for "SATISTD":


SUCCESS

DGMGRL> SHOW INSTANCE SATI

Instance 'SATI' of database 'SATI'


Host NamZ: DGONE

Current status for "SATI":


SUCCESS

DGMGRL> SHOW INSTANCE SATISTD

Instance 'SATISTD' of database 'SATISTD'


Host NamZ: DGTWO

Current status for "SATISTD":


SUCCESS

DGMGRL> SHOW DATABASE VERBOSE SATI

Database
NamZ: SATI
RolZ: PHYSICAL STANDBY
Enabled: YES
Intended StatZ: ONLINE
80/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Instance(s):
SATI

Properties:
InitialConnectIdentifier = 'SATI'
ObserverConnectIdentifier = ''
LogXptMode = 'SYNC'
Dependency = ''
DelayMins = '0'
Binding = 'OPTIONAL'
MaxFailure = '0'
MaxConnections = '1'
ReopenSecs = '300'
NetTimeout = '180'
LogShipping = 'ON'
PreferredApplyInstance = ''
ApplyInstanceTimeout = '0'
ApplyParallel = 'AUTO'
StandbyFileManagement = 'AUTO'
ArchiveLagTarget = '0'
LogArchiveMaxProcesses = '2'
LogArchiveMinSucceedDest = '1'
DbFileNameConvert = ''
LogFileNameConvert = ''
FastStartFailoverTarget = 'SATISTD'
StatusReport = '(monitor)'
InconsistentProperties = '(monitor)'
InconsistentLogXptProps = '(monitor)'
SendQEntries = '(monitor)'
LogXptStatus = '(monitor)'
RecvQEntries = '(monitor)'
81/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

HostName = 'DGONE'
SidName = 'SATI'
LocalListenerAddress =
'(ADDRESS=(PROTOCOL=TCP)(HOST=DGONE)(PORT=1522))'
StandbyArchiveLocation = 'dgsby'
AlternateLocation = ''
LogArchiveTrace = '0'
LogArchiveFormat = '%t_%s_%r.arc'
LatestLog = '(monitor)'
TopWaitEvents = '(monitor)'

Current status for "SATI":


SUCCESS

DGMGRL> SHOW DATABASE VERBOSE SATISTD

Database
NamZ: SATISTD
RolZ: PRIMARY
Enabled: YES
Intended StatZ: ONLINE
Instance(s):
SATISTD

Properties:
InitialConnectIdentifier = 'SATISTD'
ObserverConnectIdentifier = ''
LogXptMode = 'SYNC'
Dependency = ''
DelayMins = '0'
Binding = 'OPTIONAL'
82/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

MaxFailure = '0'
MaxConnections = '1'
ReopenSecs = '300'
NetTimeout = '180'
LogShipping = 'ON'
PreferredApplyInstance = ''
ApplyInstanceTimeout = '0'
ApplyParallel = 'AUTO'
StandbyFileManagement = 'auto'
ArchiveLagTarget = '0'
LogArchiveMaxProcesses = '2'
LogArchiveMinSucceedDest = '1'
DbFileNameConvert = ''
LogFileNameConvert = ''
FastStartFailoverTarget = 'SATI'
StatusReport = '(monitor)'
InconsistentProperties = '(monitor)'
InconsistentLogXptProps = '(monitor)'
SendQEntries = '(monitor)'
LogXptStatus = '(monitor)'
RecvQEntries = '(monitor)'
HostName = 'DGTWO'
SidName = 'SATISTD'
LocalListenerAddress =
'(ADDRESS=(PROTOCOL=TCP)(HOST=DGTWO)(PORT=1522))'
StandbyArchiveLocation = 'G:\oracle\oradata\SATI\archive'
AlternateLocation = ''
LogArchiveTrace = '0'
LogArchiveFormat = '%t_%s_%r.arc'
LatestLog = '(monitor)'
TopWaitEvents = '(monitor)'
83/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Current status for "SATISTD":


SUCCESS

DGMGRL> SHOW INSTANCE VERBOSE SATI

Instance 'SATI' of database 'SATI'


Host NamZ: DGONE
PFILZ:

Properties:
HostName = 'DGONE'
SidName = 'SATI'
LocalListenerAddress =
'(ADDRESS=(PROTOCOL=TCP)(HOST=DGONE)(PORT=1522))'
StandbyArchiveLocation = 'dgsby'
AlternateLocation = ''
LogArchiveTrace = '0'
LogArchiveFormat = '%t_%s_%r.arc'
LatestLog = '(monitor)'
TopWaitEvents = '(monitor)'

Current status for "SATI":


SUCCESS

DGMGRL> SHOW INSTANCE VERBOSE SATISTD

Instance 'SATISTD' of database 'SATISTD'


Host NamZ: DGTWO
PFILZ:

84/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Properties:
HostName = 'DGTWO'
SidName = 'SATISTD'
LocalListenerAddress =
'(ADDRESS=(PROTOCOL=TCP)(HOST=DGTWO)(PORT=1522))'
StandbyArchiveLocation = 'G:\oracle\oradata\SATI\archive'
AlternateLocation = ''
LogArchiveTrace = '0'
LogArchiveFormat = '%t_%s_%r.arc'
LatestLog = '(monitor)'
TopWaitEvents = '(monitor)'

Current status for "SATISTD":


SUCCESS

85/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Client Failover Configuration


In order to provide ininterupted service in case of primary failure a failover configuration needs to be implemented,
this can be achieved for single instances and RAC using database services, and a network configuration that point
to all servers that can have the primary role.

On the client side it is very important to set on the ‘sqlnet.ora’ file the parameter
SQLNET.OUTBOUND_CONNECT_TIMEOUT = 3, to assure that the failed connections will not wait for TCP
timeout but will immediately proceed to the next host if the primary is unavailable

SQL > exec DBMS_SERVICE.CREATE_SERVICE (


service_name => 'fsfo',
network_name => 'fsfo', failover_method => 'BASIC',
failover_type => 'SELECT',
failover_retries => 180,
failover_delay => 1);

PL/SQL procedure successfully completed.

SQL > CREATE OR REPLACE TRIGGER manage_dgservice


after startup on database
DECLARE
role VARCHAR(30);
BEGIN
SELECT DATABASE_ROLE INTO role FROM V$DATABASE;
IF role = 'PRIMARY' THEN
DBMS_SERVICE.START_SERVICE('fsfo');
END IF;
END;
86/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Trigger created.

SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;

On tnsnames.ora define this entry

fsfo =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = DGONE)(PORT = 1522))
(ADDRESS = (PROTOCOL = TCP)(HOST = DGTWO)(PORT = 1522))
(LOAD_BALANCE = yes)
)
(CONNECT_DATA=
(SERVICE_NAME=fsfo)
)
)

On sqlnet.ora add this line

SQLNET.OUTBOUND_CONNECT_TIMEOUT = 3

87/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Test client failover

1. from dgmgrl check that configuration and database status return SUCCESS
DGMGRL> connect sys@SATI
Password:
Connected.

DGMGRL> show configuration;

Configuration
NamZ: fsfodg
Enabled: YES
Protection ModZ: MaxAvailability
Fast-Start Failover: ENABLED
Databases:
SATISTD - Physical standby database
- Fast-Start Failover target
SATI - Primary database
Current status for "fsfodg":
SUCCESS

DGMGRL> show database SATI

Database
NamZ: SATI
RolZ: PRIMARY
Enabled: YES
Intended StatZ: ONLINE
Instance(s):
SATI
88/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Current status for "SATI":


SUCCESS

DGMGRL> show database SATISTD

Database
NamZ: SATISTD
RolZ: PHYSICAL STANDBY
Enabled: YES
Intended StatZ: ONLINE
Instance(s):
SATISTD
Current status for "SATISTD":
SUCCESS

DGMGRL> show database SATI

Database
NamZ: SATI
RolZ: PRIMARY
Enabled: YES
Intended StatZ: ONLINE
Instance(s):
SATI
Current status for "SATI":
SUCCESS

2. Connect from a client server using the ‘fsfo’ service, check the instance namZ:

SQL> select instance_name from v$instance;

89/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

INSTANCE_NAME
----------------
SATI

3. From the client server, connected throug the ‘fsfo’ service start a long running query, i.e. ‘select 1,2,3 from
dba_source’ and check how long it takes to complete, you may repeat a couple of times to get it cached and
get the best time.

SQL> select 1,2,3 from dba_source


1 2 3
1 2 3
...
...
1 2 3
1 2 3

140829 rows selected.

Elapsed: 00:0:30.12

4. From the client server, connected throug the ‘fsfo’ service issue again the same long running query,
immediately move to the primary database and shut down it using the abort option.

SQL> select 1,2,3 from dba_source


1 2 3
1 2 3
...
SQL> shutdown abort

5. The ‘shutdown abort’ triggers a FSFO that will complete in about 30 seconds

90/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

6. At the client screen you will notice that the output from ‘select 1,2,3 from dba_source’ stops and then continue
until finished

... <<<<<< Database shutdown abort here


...
1 2 3
1 2 3

140829 rows selected.

Elapsed: 00:01:23.23 <<<<<< the select took longer but finished

7. at the client check the instance name ‘

SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
SATISTD <<<<<

Elapsed: 00:00:00.07

8. Connect to the failed primary, mount it up and check the FSFO status

SQL> startup mount


ORACLE instance started.

Total System Global Area 1258291200 bytes


Fixed Size 1298304 bytes
Variable Size 436207744 bytes
91/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Database Buffers 813694976 bytes


Redo Buffers 7090176 bytes
Database mounted.

SQL> select DB_UNIQUE_NAME, DATABASE_ROLE, OPEN_MODE, FS_FAILOVER_STATUS, FS_FAILOVER_CURRENT_TARGET


From v$database;

DB_UNIQUE_NAME DATABASE_ROLE OPEN_MODE FS_FAILOVER_STATUS FS_FAILOVER_CURRENT_TARGET


--------------- ---------------- ---------- --------------------- ------------------------------
SATI PHYSICAL STANDBY MOUNTED BYSTANDER

SQL> /

DB_UNIQUE_NAME DATABASE_ROLE OPEN_MODE FS_FAILOVER_STATUS FS_FAILOVER_CURRENT_TARGET


--------------- ---------------- ---------- --------------------- ------------------------------
SATI PHYSICAL STANDBY MOUNTED REINSTATE IN PROGRESS SATI

SQL> /

DB_UNIQUE_NAME DATABASE_ROLE OPEN_MODE FS_FAILOVER_STATUS FS_FAILOVER_CURRENT_TARGET


--------------- ---------------- ---------- --------------------- ------------------------------
SATI PHYSICAL STANDBY MOUNTED UNSYNCHRONIZED SATI

SQL> /

DB_UNIQUE_NAME DATABASE_ROLE OPEN_MODE FS_FAILOVER_STATUS FS_FAILOVER_CURRENT_TARGET


--------------- ---------------- ---------- --------------------- ------------------------------
SATI PHYSICAL STANDBY MOUNTED SYNCHRONIZED SATI

9. From DGMGRL switchover back to the primary site

DGMGRL> connect sys@SATI


Password:
Connected.

92/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

DGMGRL> show configuration


Configuration
NamZ: fsfodg
Enabled: YES
Protection ModZ: MaxAvailability
Fast-Start Failover: ENABLED
Databases:
SATISTD - Primary database
SATI - Physical standby database
- Fast-Start Failover target

Current status for "fsfodg":


SUCCESS

DGMGRL> show database SATI


Database
NamZ: SATI
RolZ: PHYSICAL STANDBY
Enabled: YES
Intended StatZ: ONLINE
Instance(s):
SATI

Current status for "SATI":


SUCCESS

DGMGRL> show database SATISTD


Database
NamZ: SATISTD
RolZ: PRIMARY
Enabled: YES
93/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Intended StatZ: ONLINE


Instance(s):
SATISTD

Current status for "SATISTD":


SUCCESS

DGMGRL> switchover to SATI


Performing switchover NOW, please wait...
Operation requires shutdown of instance "SATISTD" on database "SATISTD"
Shutting down instance "SATISTD"...
ORA-01109: database not open

Database dismounted.
ORACLE instance shut down.
Operation requires shutdown of instance "SATI" on database "SATI"
Shutting down instance "SATI"...
ORA-01109: database not open

Database dismounted.
ORACLE instance shut down.
Operation requires startup of instance "SATISTD" on database "SATISTD"
Starting instance "SATISTD"...
ORACLE instance started.
Database mounted.
Operation requires startup of instance "SATI" on database "SATI"
Starting instance "SATI"...
ORACLE instance started.
Database mounted.
Switchover succeeded, new primary is "SATI"

94/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

10. Check status of both sites


C: >sqlplus sys@SATI as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on Sun Dec 28 16:55:22 2008


Copyright (c) 1982, 2007, Oracle. All Rights Reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select DB_UNIQUE_NAME, DATABASE_ROLE, OPEN_MODE, FS_FAILOVER_STATUS, FS_FAILOVER_CURRENT_TARGET


From v$database;

DB_UNIQUE_NAME DATABASE_ROLE OPEN_MODE FS_FAILOVER_STATUS FS_FAILOVER_CURRENT_TARGET


--------------- ---------------- ---------- --------------------- ------------------------------
SATI PRIMARY READ WRITE SYNCHRONIZED SATISTD

SQL> connect sys@SATISTD as sysdba

Enter password:
Connected.

SQL> /

DB_UNIQUE_NAME DATABASE_ROLE OPEN_MODE FS_FAILOVER_STATUS FS_FAILOVER_CURRENT_TARGET


--------------- ---------------- ---------- --------------------- ------------------------------
SATISTD PHYSICAL STANDBY MOUNTED SYNCHRONIZED SATISTD

95/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

Summary of main commands used on this document


Following there is a list of the main commands used on this document with a brief explanation of the functionality
that is invoked with the command.

Command Description
alter database force logging; Switch off no logging operations at the database
level
orapwd file=orapwSATI password=<sys_password> Create the password file on the primary database
force=y
alter database add standby logfile group 4 ( Create standby redologs, they need to be the same
'Z:\ORACLE\ORADATA\SATI\STDBYREDOG4_01.LOG', size as online logs, we need to create at least
'X:\ORACLE\ORADATA\SATI\STDBYREDOG4_02.LOG') one standby group more than total number of online
SIZE 104857600; groups.
startup mount; Mount the database, enable archive log mode and
alter database archivelog; open the database
alter database open;
oradim –NEW –SID SATISTD –STARTMODE Create a database service on Windows
manual
alter database create standby Create a stnadby controlfile on the primary
controlfile as 'c:\SATISTD.ctl'; database, to be copied to the standby
create pfile='c:\standby_pfile.ora' from Create a pfile from the primary database to be
spfile; edited for the physical standby
create spfile from pfile='c:\standby_pfile.txt'; Create an spfile on the default location,
?/database on windows
alter database recover managed standby database Start recovery on the physical standby
disconnect from session;
select sequence#, first_time, next_time from Check redo apply on the physical standby
v$archived_log order by sequence#;
alter system set dg_broker_start=true Enable the dataguard broker
scope=both;
dgmgrl sys/<passwd>@SATISTD Connect to the broker command line utility dgmgrl

96/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

create configuration fsfodg as primary database Create Dataguard configuration form dgmngrl
is SATI connect identifier is SATI;
add database SATISTD as connect identifier is Add database to the broker configuration
SATISTD maintained as physical;
show configuration; show broker configuration and status
show database verbose SATISTD; Show broker database configuration
show instance verbose SATISTD; Show broker instance configuration
enable configuration; Enable broker configuration
enable database SATISTD; Enable database in broker configuration
edit database SATI set property Set database property logxptmode to sync on
'logxptmode'='sync'; broker, to enable FSFO
edit configuration set protection mode as Change configuration protection mode to max
maxavailability; availability, to enable FSFO
enable fast_start failover; Enable FSFO
select db_unique_name, database_role, open_mode, Check FSFO status on both Primary and Standby
fs_failover_status, fs_failover_current_target Databases
from v$database;
switchover to SATISTD; From within DGMGRL start switchover

97/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

References

1. Switchover and Failover Best Practices: Oracle Data Guard 10g Release 2
http://www.oracle.com/technology/deploy/availability/pdf/MAA_WP_10gR2_FastStartFailoverBestPractices.pdf

2. Fast-Start Failover Best Practices: Oracle Data Guard 10g Release


http://www.oracle.com/technology/deploy/availability/pdf/MAA_WP_10gR2_FastStartFailoverBestPractices.pdf

3. Oracle Maximum Availability Architecture


http://www.oracle.com/technology/deploy/availability/htdocs/maa.htm

4. Oracle Database High Availability Best Practices (Part #B25159)


http://otn.oracle.com/pls/db102/db102.to_toc?partno=b25159

5. Workload Management with Oracle Real Application Clusters


http://www.oracle.com/technology/products/database/clustering/pdf/twpracwkldmgmt.pdf

6. Oracle Data Guard


http://www.oracle.com/technology/deploy/availability/htdocs/DataGuardOverview.html

7. Oracle Database Oracle Clusterware and Oracle Real Application Clusters Administration and Deployment
Guide (Part #14197)
http://download-west.oracle.com/docs/cd/B19306_01/rac.102/b14197/toc.htm

8. Workload Management with Oracle Real Application Clusters 10g (Provides a detailed explanation of the
implementation of Services, FAN and Fast Connection Failover in a RAC environment.):
http://www.oracle.com/technology/products/database/clustering/pdf/twpracwkldmgmt.pdf

98/99

/
DATAGUARD FAST START FAILOVER IMPLEMENTATION

9. Oracle Data Guard Broker (Part #B14230)


http://otn.oracle.com/pls/db102/db102.to_toc?partno=b14230

10. Oracle Database PL/SQL Packages and Types Reference (Part #B14261)
http://otn.oracle.com/pls/db102/db102.to_toc?partno=b14261

11. Oracle Call Interface Programmer’s Guide (Part #B14250)


http://otn.oracle.com/pls/db102/db102.to_toc?partno=b14250

12. Oracle Data Guard Concepts and Administration (Part #B14239)


http://otn.oracle.com/pls/db102/db102.to_toc?partno=b14239

99/99

You might also like