DataGuard_Concepts_Architecture_10072007

Download Report

Transcript DataGuard_Concepts_Architecture_10072007

Oracle DataGuard
Concepts and Architecture
Brian Hitchcock
OCP 10g DBA
Sun Microsystems
[email protected]
[email protected]
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 1
Oracle DataGuard
 Maintains a standby database
–
–
Archived redo logs on primary
Sent to standby and applied
 Simple idea
 Many configuration options
–
–
No attempt to cover them all here
Discuss several specific sets of options
 Can become very complicated
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 2
Oracle DataGuard
 Comes in Two Flavors
–
Physical Standby
 When I was young this was all we had…
 Read-only when not applying redo logs
–
Logical Standby
 Can be read-write while applying redo logs
 Can add db objects to standby
- Indexes for reporting
 Many options
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 3
Themes
 What is a standby?
–
‘standby’ implies specific capabilities
 Ready for failover
 Complete copy of primary
 No need to verify standby before failover
 When is a standby not a standby?
–
When it doesn’t provide what name implies
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 4
What is a standby database?
 Database that we can fail over to
 Kept closely synchronized with primary db
–
–
Up to the minute
Once a day
 Primarily dedicated to being ready for failover
–
May also be used for reporting
 Guaranteed to be an exact copy
–
–
To the point of last synchronization
Can catch up as long as redo logs available
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 5
What is a standby database?
 No question about standby
–
–
Is it a complete copy?
Is it ready for failover
 Standby for reporting
–
Is standby providing accurate data for reports?
 No one can change standby
–
No changes to data/objects in standby
 If changes made to standby
–
Should be very obvious
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 6
Before DataGuard?
 Scripts, cron jobs
–
–
Copy archived redo logs from primary to standby
Apply redo logs on standby periodically
 When script(s) executes
 Standby db can’t be used for anything else
–
Constantly recovering
 Failover
–
–
–
Open standby db with resetlogs
Can’t be standby again without rebuild
Can’t fail back to primary without rebuild
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 7
Standby
Can’t change standby db objects
Primary
Database
Standby
Database
Standby mounted, recovering
Can only be opened resetlogs
Once opened, can’t switch back
Online Redo
Logs
Archived
Redo Logs
Scripts, Cron Jobs
Archived
Redo Logs
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 8
Why DataGuard?
 Part of Oracle RDBMS
–
–
–
–
No scripts or cronjobs to maintain
Supported by Oracle
Can switch between primary/standby repeatedly
Redo sent and applied continuously (options)
 Standby db can be used for other things
–
–
Read-only when not applying redo logs
Read-write with limitations (Logical Standby)
 Failover
–
–
Primary fails, standby becomes primary
Can’t switch back without rebuild
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 9
DataGuard Classic*
*Before choice of physical or logical standby
Primary
Database
Standby
Database
Standby mounted, recovering
or
Standby read-only, no apply
Can switch back and forth
-Primary becomes standby
-Standby becomes primary
Online Redo
Logs
Archived
Redo Logs
DataGuard
Archived
Redo Logs
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 10
Applying Redo Logs
 Default
–
–
Archived redo log complete on primary
Sent and applied to standby
 Standby Redo Logs (Optional)
–
Redo sent to standby as it is written on primary
 Real-time apply
–
No waiting for primary archive redo log complete
 No waiting for primary log switch
–
Not to be confused with init.ora parameter
 VALID_FOR=(STANDBY_LOGFILES,…)
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 11
Standby Redo Logs
Primary
Database
Primary redo written
continuously to standby
No waiting for primary log switch
Standby
Database
Online Redo
Logs
Archived
Redo Logs
Archived
Redo Logs
DataGuard
Standby
Redo Logs
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 12
Typical Configurations
 Standby dedicated for failover
–
Primary db
 configured for log switch every 15 minutes
–
Standby db
 always applying redo logs
 Behind primary by 15 minutes at most
- Less if primary writes redo logs more often
 Use standby redo logs
- Very close to primary at all times
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 13
Typical Configurations
 Standby for failover and reporting
–
Primary db
 configured for log switch every 15 minutes
–
Standby db
 apply redo logs 8pm to 5am
- Long enough to apply 24 hours of redo logs
 Stop applying redo logs 5am to 8pm
 Standby up to 15 hours behind primary
 Open for reporting 15 hours a day
- Reports use ‘old’ data
- Standby data doesn’t change from 5am to 8pm
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 14
Protection Modes
 Maximum Performance (default)
–
–
Primary sends transactions to standby
Doesn’t wait for them to commit
 Maximum Protection
–
–
Primary stops if standby doesn’t commit
Requires standby redo logs
 Maximum Availability
–
–
Max protection but primary doesn’t stop
Switch to max perf until standby catches up
 Switch back to max availability
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 15
DataGuard Physical Standby
Can’t change standby db objects
Log Apply
Services
Physical
Standby
Database
Primary
Database
Standby mounted, recovering
Or
Standby read-only, no apply
Can switch back and forth
Online Redo
Logs
Archived
Redo Logs
Log Transport
Services
DataGuard
Archived
Redo Logs
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 16
Physical Standby a Standby?
 Failover
–
Ready to failover?
 Block by block copy of primary
 If any changes made, can’t failover
- Standby had to be opened resetlogs to change
 Refresh
–
–
No questions
Complete rebuild from primary
 Only need backup of primary, nothing else
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 17
Physical Standby
 Just a copy of production
 Only needed in production
–
Don’t need to do any dev, testing
 Don’t need backups
–
Recover from backups of primary database
 What is added to your infrastructure?
–
–
One database
No backups
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 18
Physical vs Logical Standby
 Physical Standby
–
–
–
‘classic’ standby
Can’t connect to db while applying redo logs
Can be read only when not applying redo logs
 Logical Standby
–
Applies redo logs from primary all the time
 As long as SQL apply process is running
–
Open for users for read and write
 Various restrictions
 Many configuration options
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 19
DataGuard Logical Standby
Can change db objects (restrictions)
SQL Apply
Services
Logical
Standby
Database
Primary
Database
Standby open while redo applied
Online Redo
Logs
Online Redo
Logs
Archived
Redo Logs
Log Transport
Services
DataGuard
Archived
Redo Logs
Two sets of archived
redo logs
Archived
Redo Logs
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 20
DataGuard Logical Standby
Logical
Standby
Database
Primary
Database
SQL applied to Logical Standby
Just like any other database user
Online Redo
Logs
Archived
Redo Logs
DataGuard
Archived
Redo Logs
LogMiner
Extract SQL
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 21
Logical Standby
 Standby is open, read-write
 Anything copied from primary
–
Maintained by DataGuard
 Depending on Guard status
–
DataGuard doesn’t maintain things added to
standby
 Guard status restricts who can update
–
This can be bypassed
 Alter session or database
 Needed to import db objects into standby
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 22
Logical Standby Guard Status
 All
–
SYS can modify anything in standby database
 Standby
–
–
SYS can modify anything
Other users can modify objects not maintained
by DataGuard
 Subject to normal user privs
 None
–
–
Standby not protected by DataGuard
Any user can alter db objects
 Subject to normal user privs
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 23
Skipping
 Schemas, tables, transactions
–
–
May be skipped automatically
Can be skipped manually
 Why anything skipped?
–
–
–
Performance
Unsupported db objects
More later
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 24
Logical Standby a Standby?
 Failover
–
Ready to failover?
 Not sure if standby is a complete copy
- Tables, schemas, transactions skipped?
 Standby can be changed
- Failover not prevented
- Changes can be made
- No warning that changes made
–
Who knows what you are failing over to?
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 25
Logical Standby a Standby?
 Refresh
–
Additional db objects in standby need backup
 Refresh from primary wipes out these objects
–
Complete rebuild from primary
 Insert additional db objects
–
If standby fails




Need to recover standby db from backups
Extract additional db objects from standby
Refresh logical standby
Insert additional db objects
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 26
Refresh Standby
 Physical Standby
–
–
–
Just refresh
Standard process
No debate
 Logical Standby
–
–
–
–
Refresh wipes out unique db objects
Must extract them first
Refresh from primary
Load unique db objects
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 27
Standby Fails
 Physical
–
–
No problem, just a copy of primary
Refresh from primary
 Logical
–
–
–
–
–
What about unique db objects
Recover standby from standby backups
Extract unique db objects
Refresh standby
Insert unique db objects
 Logical standby db must be backed up
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 28
Recovering Logical Standby
 You wanted Logical
–
To add things
 Indexes for reporting
 How to recover Logical?
–
–
–
Rebuild physical from primary
Convert to logical
How to recreate the additional db objects/data?
 If indexes, recreate them
 If data extracted from copy of primary?
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 29
How It Works
Log_archive_dest_n
Where n is 1 to 10
Specific value doesn’t matter
 Basic DataGuard setup
 Where to send archived redo logs?
 Primary
–
–
–
Log_archive_dest_1
 Location for local archived redo logs
 Location=/arch01/NY Valid_for=(All_Logfiles, All_Roles)
Log_archive_dest_2
 Sends archived redo logs to service name
 Service name points to standby
 Service=LA Valid_for=(Online_logfiles, Primary_Role)
Tnsnames.ora
 Contains entry for service name for standby
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 30
How it works
 Standby
–
Log_archive_dest_n
Where n is 1 to 10
Specific value doesn’t matter
Log_archive_dest_1
 Location for local archived redo logs
 Not used while db is physical standby
 Location=/arch01/LA Valid_for=(All_Logfiles, All_Roles)
–
Log_archive_dest_2
 Location receives archived redo logs from primary
 Location=/arch02/LA Valid_for=(Standby_logfiles,
Standby_Role)
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 31
Symmetrical init.ora/spfile
 Use three log_archive_dest_n parameters
–
–
–
Setup on primary and standby
Don’t need to change for failover
Don’t need to change for fail-back
 Create tnsnames.ora entry
–
On primary
 Pointing to standby
–
On standby
 Pointing to primary
 Less maintenance for frequent failover/back
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 32
DataGuard init.ora/spfile
Active
Active
Inactive
Db_unique_name=NY_DB
Primary
Database
Online Redo
Logs
Archived
Redo Logs
Inactive
Db_unique_name=LA_DB
Log_archive_dest_1
LOCATION=/arch01/NY
VALID_FOR=(ALL_LOGFILES,
ALL_ROLES)
Log_archive_dest_1
LOCATION=/arch01/LA
VALID_FOR=(ALL_LOGFILES,
ALL_ROLES)
Log_archive_dest_2
LOCATION=/arch02/NY
VALID_FOR=(STANDBY_LOGFILES,
STANDBY_ROLE)
Log_archive_dest_2
LOCATION=/arch02/LA
VALID_FOR=(STANDBY_LOGFILES,
STANDBY_ROLE)
Log_archive_dest_3
SERVICE=LA
VALID_FOR=(ONLINE_LOGFILES,
PRIMARY_ROLE)
Log_archive_dest_3
SERVICE=NY
VALID_FOR=(ONLINE_LOGFILES,
PRIMARY_ROLE)
Tnsnames.ora
LA=(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)
(HOST=<hostnameLA>)(PORT=1521))
(CONNECT_DATA= (SID=LA_DB) ) )
Active for Logical Standby
Tnsnames.ora
NY=(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)
(HOST=<hostnameNY>)(PORT=1521))
(CONNECT_DATA= (SID=NY_DB) ) )
Standby
Database
Archived
Redo Logs
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 33
DataGuard init.ora/spfile
Active
Inactive
Active for Logical Standby
Db_unique_name=NY
Standby
Database
Archived
Redo Logs
Active
Inactive
Db_unique_name=LA
Log_archive_dest_1
LOCATION=/arch01/NY
VALID_FOR=(ALL_LOGFILES,
ALL_ROLES)
Log_archive_dest_1
LOCATION=/arch01/LA
VALID_FOR=(ALL_LOGFILES,
ALL_ROLES)
Log_archive_dest_2
LOCATION=/arch02/NY
VALID_FOR=(STANDBY_LOGFILES,
STANDBY_ROLE)
Log_archive_dest_2
LOCATION=/arch02/LA
VALID_FOR=(STANDBY_LOGFILES,
STANDBY_ROLE)
Log_archive_dest_3
SERVICE=LA
VALID_FOR=(ONLINE_LOGFILES,
PRIMARY_ROLE)
Log_archive_dest_3
SERVICE=NY
VALID_FOR=(ONLINE_LOGFILES,
PRIMARY_ROLE)
Tnsnames.ora
LA=(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)
(HOST=<hostnameLA>)(PORT=1521))
(CONNECT_DATA= (SID=LA_DB) ) )
Tnsnames.ora
NY=(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)
(HOST=<hostnameNY>)(PORT=1521))
(CONNECT_DATA= (SID=NY_DB) ) )
Primary
Database
Online Redo
Logs
Archived
Redo Logs
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 34
DataGuard Reporting
Logical
Standby
Database
Primary
Database
Database objects added to
Logical standby database
-- indexes for reporting
Online Redo
Logs
Archived
Redo Logs
Database objects
Copied from primary
Maintained by DataGuard
DataGuard
Archived
Redo Logs
LogMiner
Extract SQL
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 35
Rebuild Reporting Standby
 If additional standby db objects have no data
–
Indexes for reporting
 Refresh from primary wipes out indexes
 Refresh standby
–
Execute script to recreate indexes
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 36
Create DataGuard Standby
 Physical Standby
 Logical Standby
–
–
Create physical standby
Convert to logical standby
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 37
Create Physical Standby
 On Primary database
–
–
–
–
–
–
Enable Forced Logging
Create password file
Setup init.ora/spfile parameters
Verify archiving enabled
Backup db (hot or cold)
Create standby control file
 Don’t use backup control file
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 38
Create Physical Standby
 On Standby database
–
–
–
Copy db backup files from primary
Copy standby control file from primary
Setup init.ora/spfile parameters
 Db_name same as primary db_name
–
–
Start physical standby db
Verify physical standby working
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 39
Convert to Logical Standby
 On Primary database
–
Build LogMiner dictionary
 On Standby database
–
–
Stop redo apply
Convert database to logical standby
 Change db_name
–
–
–
Restart db
Open resetlogs
Verify logical standby working
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 40
Cascaded Standbys
 DataGuard supports cascading standbys
 Primary sends redo to
–
–
Physical standby A
Logical standby B
 Physical standby A sends redo to
–
–
Physical standby B
Physical standby C
 Logical standby B sends redo to
 Don’t you have enough to worry about?
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 41
Real World Example
 What I’m supporting now
–
–
–
Logical standby
2 added schemas for custom app
Primary db supports Oracle Applications 11i
 Requirements
–
Provide copy of primary 11i db for reporting
 Oracle Discoverer
–
–
Provide copy of 20-30 tables for custom app
Additional schemas store custom app data
 Extracted from standby copies of primary tables
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 42
DataGuard Logical Real World
Primary
Database
Database objects added to
Logical standby database
-- 2 schemas for custom app
-- store data extracted from
standby copies of primary
tables
Logical
Standby
Database
Database objects
Copied from primary
Maintained by DataGuard
Procs extract data
Online Redo
Logs
Archived
Redo Logs
DataGuard
Archived
Redo Logs
Processed Data
Stored
LogMiner
Extract SQL
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 43
Real World Refresh/Recovery
 Refresh
–
–
–
Backup standby db objects not in primary
Refresh standby from primary
Recreate additional db objects in standby
 If Logical standby fails
–
–
–
–
–
Db objects not in primary are lost
Need to recover standby db
Extract db objects
Refresh standby from primary
Recreate additional db objects in standby
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 44
Logical Standby Issues
Does this sound like a standby?
 Unsupported
–
Data types
BFILE, user-defined types
–
PL/SQL supplied packages
 That modify metadata, DBMA_JAVA etc.
–
Other things, see manual
 If unsupported, automatically skipped
–
–
No notification of skipped objects
Examine primary for unsupported things
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 45
Logical Standby Issues
Does this sound like a standby?
 Processing
–
–
Everything done on primary has to be extracted
from redo logs and applied to standby db
Apply process is just another db user session
 Primary db
–
Objects may not be well designed
 Tables with poor (or no) indexes
–
Updates on primary can be very slow when
applied as SQL to standby
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 46
Logical Standby Issues
Does this sound like a standby?
 If applying to standby too slow
–
–
May have to skip for performance
To keep standby in synch per business reqmts
 Ready for reporting once per day
 Primary SQL depends on files on primary
–
Create java class
 Class files not on standby
 DataGuard doesn’t maintain filesystems
–
No notification of such problems
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 47
Logical Standby Issues
 Performance impact
–
–
At any time, slow SQL may take days to complete
If you need standby in synch once per day
 Must skip table
–
If you must have this table in standby
 Must do full refresh from primary
–
If you can and do skip the table
 Can’t support requirement for reporting on standby
 You never know when this will happen
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 48
Logical Standby Issues
 Logical Standby is like an application
–
Needs control, review, careful release process
 If Logical Standby is an ‘application’
–
–
–
–
Need dev, alpha, beta, prod
Logical standby database for dev, alpha, beta
Backups for additional dbs
Add space to primary production database?
 Need to add space to 4 primary, 4 logical dbs
 What is added to your infrastructure?
–
–
4 standby databases
Backups for 4 standby databases
Does this sound like a standby?
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 49
Logical Standby Issues
 How can standby get out of synch?
–
–
–
–
Someone bypassed guard and left it off
Someone left guard altered to NONE
SYS altered db objects in standby
Schema, table, transaction skipped
 No record of transactions skipped
–
No utilities
 Compare logical standby to primary
 Compare tables standby/primary
Does this sound like a standby?
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 50
Logical Standby Issues
 Logical apply process examines standby
–
–
When applying update from primary to standby
Compares
 Previous values on primary
 Current values on standby
–
–
–
Does this sound like a standby?
If different, refuses to apply update from primary
Apply process fails
Can’t apply anything more
 must cure issue or skip table/transaction
 Differences can go undetected indefinitely
–
Until next time primary updates object
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 51
Logical Standby Issues
Does this sound like a standby?
 Need backups of logical standby database
–
If there are any unique database objects
 If there aren’t, why use logical standby?
 Refresh or rebuild
–
Have to recover db objects unique to standby
 After refresh
–
Previously skipped tables
 Do we skip them again?
 Do we wait for them to need to be skipped?
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 52
Real World Redesign
Separate database dedicated to custom application
Primary
Database
Physical
Standby
Database
-- 2 schemas for custom app
-- store data extracted from
tables in physical standby
database
Online Redo
Logs
Procs extract data
Archived
Redo Logs
DataGuard
Processed Data
Stored
Archived
Redo Logs
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 53
Real World Redesign
 Custom Application database
–
–
–
Dedicated for app schemas
Db link into physical standby
Backup provides recovery of app schemas
 Physical Standby database
–
–
–
Let DataGuard do what it does well
None of the Logical Standby issues
Can be used as read-only for reporting
 When not applying redo logs
 Support an extra database
–
Don’t have to support Logical Standby
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 54
Recommendation
 Logical for reporting
–
–
–
Copy of primary
Add indexes to speed reporting
Add tables for aggregates
 Objects added to standby
–
–
Easily recreated from a SQL script
Contain data that can always be regenerated
from copy of primary
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 55
Recommendation
 Physical standby
–
–
Is solid, dependable
No issues
 Logical standby
–
–
–
–
–
Is it really a standby?
Is it ready for failover?
Is it providing complete data for reports?
Lots of issues
Is it worth the effort/risk?
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 56
DataGuard Support Issues
 Covered in 2nd presentation
 “Oracle DataGuard Logical Standby Support
Issues”
www.brianhitchcock.net
Brian Hitchcock October 23, 2007
Page 57