0% found this document useful (0 votes)
78 views

Data Guard

This document discusses Oracle Data Guard and logical standby databases. It provides an overview of Data Guard architecture and components, including redo transport services and the SQL apply process. It covers logical standby database creation prerequisites, protection modes, and switchover and failover procedures. Key points include how logical standby databases transform redo logs to SQL for real-time replication, and the various protection modes for failure tolerance.

Uploaded by

huber.mc
Copyright
© © All Rights Reserved
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)
78 views

Data Guard

This document discusses Oracle Data Guard and logical standby databases. It provides an overview of Data Guard architecture and components, including redo transport services and the SQL apply process. It covers logical standby database creation prerequisites, protection modes, and switchover and failover procedures. Key points include how logical standby databases transform redo logs to SQL for real-time replication, and the various protection modes for failure tolerance.

Uploaded by

huber.mc
Copyright
© © All Rights Reserved
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/ 90

Session id: 12766

ORACLE 10g/9i DATA GUARD –


LOGICAL STANDBY DATABASE

Inderpal S. Johal
Principal Consultant
AGENDA
 Standby Database enhancements
 Data Guard and its Architecture
 Background Process
 Pre-requisite for Logical Standby
Database
 Logical Standby Creation and DG
configuration
 Switchover and Failover
 Troubleshooting Tips
 Questions & Answers
History of Standby Database [1]
 Oracle 7/8 Manual Standby Database

 Oracle 8i Automated Standby


Open Read Only
Managed Recovery Mode
Using RMAN to backup Primary db using
Standby db
 Oracle 8i Data Guard
Script based switchover and Failover
History of Standby Database [2]
 Oracle 9i Data Guard – Release 1
Rename Standby to Data Guard
Data Guard Broker and Data Guard Manager
New Data Protection Mode – No Data Loss
Capability
Integration with OEM
Built-in Database Switchover/Switchback
Auto detection of Archive gaps
Auto add datafiles and Logfiles
More Archive Destinations (upto 10 from 5)
Standby Redo Logs
Delayed log application
History of Standby Database [3]
 Oracle 9i Data Guard – Release 2
 Logical Standby Database
 Cascading Standby Database
 New Database protection modes replacing 9i Release 1
modes.
 Oracle 10g – Release 1
 Real time SQL Apply
 Rolling Upgrades
 Zero Downtime Instantiation
 Additional Data types support
 Enhanced fast browser based OEM interface
 Flashback Database support
 Improved Archival behavior
What is Oracle Data Guard
 Software to Maintain transactional consistency
between primary and standby database(s)
 Oracle’s disaster recovery solution for Oracle
data
 Feature of Oracle Database Enterprise Edition
 Automates the creation and maintenance of one
or more standby database
 Ease the Switchover or Failover operation
Oracle Data Guard Architecture
Physical Standby
Database
Backup
Sync or Async
Production Redo Shipping
Database Redo Apply
DIGITAL DATA STORAGE

DIGITAL DATA STORAGE

Network
Broker

Logical Standby
Transform Database Open for
Redo to SQL Reports

SQL
Apply Additional
Indexes & MVs
Data Guard Components
 Log Transport (LGWR, ARC, FAL, RFS)
Archive log permissions, destinations,
transmission, reception & transmission failure
LGWR or ARCH can write from primary to standby
 Log Apply (MRP or LSP)
Managed recovery (not read-only) mode
SQL apply mode
 Role Management
Primary or Standby
Switchovers, graceful or forced failover
 Data Guard Broker (DMON)
 Additional bgnd process [ Pxx, RSM0, NSV0 ]
SQL Apply Process

Oracle Net
Logical
Transactions Standby
Database

[ SYNC / ASYNC ]
LGWR RFS LSP

Transform
Redo to
Online SQL
Redo Logs for SQL
Primary Apply
Database Reports

ARCH

[SYNC]

Archived Redo Logs Archived Redo Logs


Real Time Apply
An up-to-date

Oracle Net
Transactions Logical
Standby
Database

LGWR RFS LSP

Online Standby
Redo Redo
Primary Logs
Logs
Database
ARCH ARCH Real Time
Apply!

Archived Redo Logs Archived Redo Logs


SQL Apply Engine Architecture

Mining Applying
Group LSP Group

PX PX PX PX

Redo SQL

RFS
Log
Transport
Services
Remote Archived Logical Standby
Logs Database
Protection Modes
ALTER DATABASE
SET STANDBY DATABASE TO MAXIMIZE
{PROTECTION | AVAILABILITY |PERFORMANCE};
Protection Mode Failure Protection Redo Shipping
Maximum Zero Data Loss LGWR using
Protection Double Failure Protection SYNC
Impact Performance
Maximum Zero Data Loss LGWR using
Availability Single Failure Protection SYNC
Impact Performance
Maximum Best Performance ARCH or LGWR
Performance Minimal Data Loss using ASYNC
Maximum Protection Mode
ALTER DATABASE SET STANDBY TO MAXIMIZE PROTECTION;

Protection Mode Failure Protection Redo Shipping


Maximum Zero Data Loss LGWR using
Protection Double Failure Protection SYNC
Impact Performance

 Configuration: LGWR SYNC


 Requires at least one available Physical
Standby with Standby Redo Logs
 Enforces protection of every transaction
 If last standby is unavailable, processing stops at
primary
 Impact Performance on Primary database
Maximum Availability Mode
ALTER DATABASE SET STANDBY TO MAXIMIZE AVAILABILITY;

Protection Mode Failure Protection Redo Shipping


Maximum Zero Data Loss LGWR using
Availability Single Failure Protection SYNC
Impact Performance
 Zero Data Loss protection as long as the network stays
up!
 Automatic switches to Max Performance
 Automatic sync when standby become available and
switch back to Max Availability Mode
 Configuration: LGWR SYNC
 Requires at least one Physical or Logical Standby
 If last standby is unavailable, processing continues at
primary
 Impact Performance on Primary database
Maximum Performance Mode
ALTER DATABASE SET STANDBY TO MAXIMIZE PERFORMANCE;

Protection Mode Failure Protection Redo Shipping


Maximum Best Effort ARCH or LGWR
Performance Primary Loss using ASYNC

 Highest level of Primary performance


 Automatic data synchronization after
disconnect from standby
 Configuration: LGWR ASYNC, or ARCH
 Useful for applications that
 Require high performance on Primary db
 tolerate some data loss
Switchover and Failover [ 1 ]
 Switchover
Planned role reversal between Primary and
standby db
Guarantees no data loss
Used for maintenance of OS or hardware
No database reinstantiation required
 Failover
Unplanned failure (e.g. disasters) of primary db
Primary database must be reinstantiated – [ not
in 10g]
Can loose data based on Protection mode
Switchover and Failover [ 2 ]
 Can be initiated using
Data Guard Manager
DGMGRL Command Line interface
SQL*Plus
Pre-requisites for Logical
Standby Creation
Verifying Primary Db Configuration [1]
 Oracle 9i Release 2 or higher

 Apply OEM patches for using Data guard


use 214071.1 Metalink Docid for more information

 Running in ARCHIVELOG mode


SQL> Select log_mode From V$database;

 Check unsupported datatypes


SQL>Select * from dba_logstdby_unsupported;
improved in 10g with Attribute col
 Enabling Force Logging
SQL>SELECT force_logging FROM v$database;
SQL>Alter database force logging;
Verifying Primary Db Configuration [2]
 Unsupported Data types
NCLOB ………[Supported in 10g]
LONG ………[Supported in 10g]
LONG RAW ………[Supported in 10g]
BFILE
ROWID
UROWID
user-defined types, object types REFs
Varrays, nested tables
 Unsupported Tables, Sequences, and Views
 User-defined tables and sequences in SYS schema
 Tables with unsupported datatypes
 Tables using data segment compression
 Index-organized tables ……[Supported in 10g]
Verifying Primary Db Configuration [3]

 Check Missing Primary/Unique key constraint


SQL>Select * from dba_logstdby_not_unique;

 Enable Supplemental Logging


SQL>Alter database add supplemental log data
(primary key, unique index) columns;
SQL>Alter system archive log current;
SQL>Select Supplemental_log_data_min min,
Supplemental_log_data_pk pk,
Supplemental_log_data_ui ui
From v$database;
Verifying Primary Db Configuration [4]
 Start Resource Manager if using Hot backup for
standby database ……[Not rerquired in 10g]
SQL>Alter system set
resource_manager_plan=system_plan;
SQL>shutdown immediate;
SQL>startup;

 Move LogMiner objects to alternate tablespace


……[Not required in 10g]
SQL>Create tablespace lgmnr datafile
‘/oradata/indy/lgmnr01.dbf’ size 50m;
SQL>Exec dbms_logmnr_d.set_tablespace(‘lgmnr’);

 Use Spfile
SQL>show parameter spfile;
Verifying Primary Db Configuration [5]
 Important Initialization parameters
Log_parallelism =1
Parallel_max_servers > 5
Shared_pool_size > 160M
 Use Spfile
SQL>show parameter spfile;
SQL>create spfile from pfile;
SQL>shutdown immediate;

 Avoid Database creation directly using Database


assistant due to bug on Solaris Platform ….…
Bug 3375328
PLS-00306 AND ORA-16109 ON SWITCHOVER TO PRIMARY
Verifying Primary Db Configuration [6]

 LOG_ARCHIVE_DEST_2 attributes
OPTIONAL
LGWR
ASYNC
NOAFFIRM
REOPEN
MAX_FAILURE
DELAY
NET_TIMEOUT
Logical Standby Creation
Manual Method
Backup the Primary Database
Backup the Primary Database
Create Standby Control File
SQL> ALTER DATABASE BACKUP CONTROLFILE
TO ‘/tmp/control01.ctl’;

In 10g the syntax is


SQL> ALTER DATABASE CREATE LOGICAL
STANDBY CONTROLFILE TO ‘/tmp/control01.ctl’;
Create init.ora file for Standby Database
SQL> create pfile from spfile;
Copy the Data,Control & init.ora file to standby
Backup the Primary Database
Copy the Archive logs from primary db server to
standby_archive_dest as defined in standby
init.ora ………[ Not required in 10g]
Build the Log Miner Dictionary to obtain starting
SCN ………[ Not required in 10g]
SQL>alter system quiesce restricted;
SQL>execute dbms_logstdby.build;
SQL>alter system switch logfile;
SQL>select name from v$archived_log
where dictionary_begin=‘YES’ and
standby_dest=‘NO’;
SQL>alter system unquiesce;
SQL>alter system switch logfile;
Startup Logical Standby Db
 Recover the Standby Database and turn on the
Database guard and startup the database
SQL>Alter database guard all;
SQL>Alter database open resetlogs;
In 10g the steps are
SQL>Alter database recover managed
standby database;
SQL>Alter database activate standby
database;
 Shutdown database
 Use nid utility to change database name
$ nid target=sys/syspwd dbname=stdy
setname=yes
Startup Logical Standby Db
 Change DB_NAME init.ora parameter to match new
db name and create the spfile as well as password
file.
 Startup db with reset logs
SQL>Startup mount exclusive;
SQL>Alter database open resetlogs;
 Drop existing temp files and create new ones
SQL>Select * from v$tempfile;
SQL>Alter database tempfile ‘….’ drop;
SQL>Alter tablespace temp add tempfile ‘…’;
 Start the Logical standby Apply services
SQL>alter database start logical standby apply initial;
SQL>alter database start logical standby apply
immediate; .. [ in 10g]
Activate Standby Database
 Register the manually copied archive log
SQL>Alter database register logical logfile
‘/oradata/arch/arch1001.log’;
In 10g, If it is missing any archive logs (gaps) that
it needs to bring the standby up to this SCN it will
use the FAL gap resolution mechanism to fetch
them automatically from the primary as usual.
Logical Standby Creation
Using Data Guard GUI
Logical Standby Database
Adding existing Database
to
New Data Guard Configuration
Logical Standby Database
Adding existing Database
to
Existing Data Guard Configuration
Logical Standby Database
Creating Data Guard
configuration using DGMGRL
DGMGRL> Connect sys/welcome
DGMGRL> create configuration 'ewtest' as
> primary site is 'indy002_site'
> resource is 'indy002_db'
> hostname is 'indy002'
> instance name is 'indy'
> service name is 'indy'
> site is maintained as logical;
Configuration "ewtest" added with primary site "indy002_site"
DGMGRL> create site 'standby_site'
> resource is 'standby_db'
> hostname is 'devindy'
> instance name is 'indyl'
> service name is 'indyl'
> site is maintained as logical;
Site "standby_site" added to configuration.
Database resource "standby_db" added.
DGMGRL> enable site indy002_site;
DGMGRL> enable site standby_site;
Logical Standby Database
Manual
Switchover Methods
Step 1 : On Primary Database
SQL>ALTER DATABASE COMMIT TO
SWITCHOVER TO LOGICAL STANDBY;

SQL>ALTER SYSTEM SWITCH LOGFILE;

SQL>ALTER SYSTEM SET


log_archive_dest_2=DEFER SCOPE=both;
Transaction Reports
Transform Redo
to SQL and Apply

Network

Redo Shipment

Primary Logical Standby


Database Database
Step 2 : On Logical Standby
SQL>ALTER DATABASE COMMIT TO
SWITCHOVER TO PRIMARY;
SQL>ALTER SYSTEM SET
log_archive_dest_2=enable SCOPE=both;
On New Logical Standby or Old Primary Db
SQL>ALTER DATABASE START LOGICAL STANDBY
APPLY NEW PRIMARY <dblink_to_prim>;

Reports Transaction
Transform Redo
to SQL and Apply Redo Shipment

New Logical Standby New Primary


Database Database
Step 1 : On Primary Database
SQL>SELECT SWITCHOVER_STATUS FROM
V$DATABASE;
Switchover_status
TO STANDBY | TO LOGICAL STANDBY | SESSIONS ACTIVE

SQL>ALTER DATABASE PREPARE TO SWITCHOVER


TO LOGICAL STANDBY;
Transaction Reports
Transform Redo
to SQL and Apply

Network

Redo Shipment

Primary Logical Standby


Database Database
Step 2 : On Logical Database
SQL>SELECT SWITCHOVER_STATUS FROM
V$DATABASE;
Switchover_status
TO PRIMARY

SQL>ALTER DATABASE PREPARE TO SWITCHOVER


TO PRIMARY;
Transaction Reports
Transform Redo
to SQL and Apply

Network

Redo Shipment

Primary Logical Standby


Database Database
Step 3 : On Primary/Standby Db
On Primary Database
SQL>ALTER DATABASE COMMIT TO
SWITCHOVER TO LOGICAL STANDBY;
On Logical Standby Database
SQL>ALTER DATABASE COMMIT TO
SWITCHOVER TO PRIMARY;
On New Logical Standby or Old Primary Db
SQL>ALTER DATABASE START LOGICAL STANDBY
APPLY;
Transaction Reports
Transform Redo
to SQL and Apply

Network

Redo Shipment

Primary Logical Standby


Database Database
Logical Standby Database
Data Guard GUI
Switchover Methods
Logical Standby Database

Manual DGMGRL CLI


Switchover Methods
DGMGRL Command Line Interface
$ dgmgrl
DGMGRL>connect SYS/welcome
DGMGRL>show configuration
Configuration ‘primary’ is
standby Site is ‘devindy_site’
primary_site is ‘indy002_site’
Current status for “primary”
SUCCESS
DGMGRL>switchover to devindy_site;
Performing switchover NOW. Please wait…….
Switchover succeeded,New primary is “devindy_site”
DGMGRL>show configuration
Configuration ‘primary’ is
standby Site is ‘indy002_site’
primary_site is ‘devindy_site’
Current status for “primary”
SUCCESS
Logical Standby Database

Data Guard GUI


Failover Methods
How to migrate Unsupported Datatype Table
On Primary Database
SQL>Alter table ABC.table1 add
(NewColumn Varchar2(1000));
SQL>Update ABC.table1
set NewColumn=OldColumn;
SQL>Alter Table ABC.Table1
drop column old_column;
On Logical Standby Database
SQL>ALTER DATABASE STOP LOGICAL
STANDBY APPLY;
SQL>Exec
Dbms_logstdby.instantiate_table(‘abc’,’table1’,’dblnk’);
SQL>ALTER DATABASE START LOGICAL
STANDBY APPLY;
How to User for DDL/DML on Standby Db

Only user SYS is allowed to perform DML/DDL


SQL> connect scott/tiger
SQL> UPDATE departments SET
location_id=2000;
Error at Line 1:
ORA-1031: insufficient privileges

SQL> CREATE TABLE dept AS


SELECT * FROM departments;
Error at Line 1:
ORA-1031: insufficient privileges
How to User for DDL/DML on Standby Db

SQL>connect / as sysdba
SQL>GRANT execute ON dbms_logstdby TO hr;
SQL>connect hr/hr
SQL>execute dbms_logstdby.guard_bypass_on;
SQL>UPDATE departments SET location_id=2000;
27 rows updated
SQL>CREATE TABLE dept AS
SELECT * FROM departments;
Table Created
SQL>exec dbms_logstdby.guard_bypass_off;
SQL>UPDATE departments SET location_id=2000;
ORA-1031: insufficient privileges
SQL>DROP TABLE dept;
ORA-1031: insufficient privileges
New Guard Bypass Syntax

SQL> ALTER SESSION DISABLE GUARD;

SQL> ALTER SESSION ENABLE GUARD;


How to User for DDL/DML on Standby Db

SQL>connect / as sysdba
SQL>ALTER DATABASE GUARD STANDBY ;
By Default it is ALL

SQL>connect hr/hr
SQL>UPDATE departments SET
location_id=2000;
Error at Line 1:
ORA-1031: insufficient privileges

SQL>DROP TABLE dept;


Table Dropped.
Using Wildcards to Skip Tables
DBMS_LOGSTDBY.SKIP(stmt, schema_name, table_name,
proc_name, use_like, esc);

• In Oracle9i Database all names are wildcard


matched.
– TEST_T% for table_name skips all tables starting with
TEST and with anything in the place of the ‘_’.
• No way to indicate that you only wanted table
TEST_TABLE and not TEST1TABLE.
• Set use_like to False to use the escape character.
• Set esc to a \ for example to allow better matching
– Now TEST\_T% will only skip TEST_TABLE.
Auto Skip of Last Failed Transaction

Logical
Standby
Database

Redo
from
primary Restart
Skip Failed SQL
transaction Apply

ALTER DATABASE START STANDBY APPLY ;


Administer Logical Standby
 Skip maintenance of unneeded tables or schemas
Skip all DML statements on actlog table
SQL>Alter database stop logical standby
apply;
SQL>Exec dbms_logstdby.skip( ‘DML’,
’APPL’, ’ACTLOG’, null);
SQL>Exec dbms_logstdby.skip(
‘SCHEMA_DDL’, ’APPL’, ’ACTLOG’, null);
SQL>Alter database start logical standby
apply;
Troubleshooting

 Review alert log


 Trace Data Guard processes
Set LOG_ARCHIVE_TRACE on either
Primary or Standby or both
Alter system set log_archive_trace =
<level>
Rolling Upgrades
Upgrade

Redo Patch Set


Clients
A B Logs A B Upgrades
Queue

Major
Version X Version X X X+1 Release
2
1 Primary-
Primary- logical standby Setup Upgrade node B to X+1 Upgrades

Redo Redo Cluster


Upgrade A B A B Software &
Hardware
Upgrades
X+1 X+1 X X+1
4 Switchover to B, upgrade A 3 Run in mixed mode to test
QUESTIONS
ANSWERS
REMINDER

Please complete the IOUG session


survey

THANK YOU

You might also like