Upload
eleanore-baker
View
216
Download
0
Embed Size (px)
Citation preview
1 © 2006 Julian Dyke
LogicalStandbyJulian Dyke
Independent Consultant
juliandyke.com
Web Version
2
© 2006 Julian Dykejuliandyke.com
LogicalStandby
3
© 2006 Julian Dykejuliandyke.com
Standby DatabaseARCH Redo Transmission
ARC0 ARC1
OnlineRedoLog
LGWR RFS
StandbyRedoLog
ARCn
ArchivedRedoLogs
MRPLSP
StandbyDatabase
PrimaryDatabase
LOG_ARCHIVE_DEST_1
LOG
_AR
CH
IVE
_DE
ST_
2
Primary Database Standby Database
ArchivedRedoLogs
4
© 2006 Julian Dykejuliandyke.com
Standby DatabaseLGWR (ASYNC) Redo Transmission
ArchivedRedoLogs
ARCn
RFS
StandbyRedoLog
ARCn
ArchivedRedoLogs
MRPLSP
StandbyDatabase
PrimaryDatabase
LOG_ARCHIVE_DEST_1
Primary Database Standby Database
LNSn
LGWR
OnlineRedoLog
5
© 2006 Julian Dykejuliandyke.com
Standby DatabaseLGWR (SYNC) Redo Transmission
ArchivedRedoLogs
ARCn
OnlineRedoLog
RFS
StandbyRedoLog
ARCn
ArchivedRedoLogs
MRPLSP
StandbyDatabase
PrimaryDatabase
LOG_ARCHIVE_DEST_1
Primary Database Standby Database
LNSnLGWR
6
© 2006 Julian Dykejuliandyke.com
Logical StandbyPreparation Used two separate servers
london1 and reading1
Used DBCA to create one database on primary server PRIMARY
Archiving must be enabled NOLOGGING must be disabled
Installed SCOTT/TIGER schema $ORACLE_HOME/rdbms/admin/utlsampl.sql
Created physical standby on reading1
SQL> ALTER DATABASE FORCE LOGGING;
7
© 2006 Julian Dykejuliandyke.com
Physical StandbyPreparation On both servers, configure TNSNAMES.ORA
LONDON =(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = london1)(PORT = 1521))(CONNECT_DATA =
(SERVER = DEDICATED)(SERVICE_NAME = LONDON)
))
READING =(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = reading1)(PORT = 1521))(CONNECT_DATA =
(SERVER = DEDICATED)(SERVICE_NAME = READING)
))
8
© 2006 Julian Dykejuliandyke.com
Physical StandbyPreparation On primary server create backup location
mkdir /u01/oradata/PRIMARY/backup;
On primary server run RMAN to backup database
$ORACLE_HOME/bin/rman NOCATALOG TARGET sys/oracle@PRIMARY
In RMAN configure backup
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/oradata/PRIMARY/backup/%F';
CONFIGURE CHANNEL 1 DEVICE TYPE DISK CONNECT 'sys/oracle@PRIMARY';
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/admin/PRIMARY/backup/snapcf_PRIMARY.f';
9
© 2006 Julian Dykejuliandyke.com
Physical StandbyPreparation In RMAN backup database
BACKUP FORMAT '/u01/oradata/PRIMARY/backup/%d_D_%T_%u_s%s_p%p' DATABASE;
BACKUP CURRENT CONTROLFILE FOR STANDBY FORMAT '/u01/oradata/PRIMARY/backup/%d_C_%U';
SQL "ALTER SYSTEM ARCHIVE LOG CURRENT";
BACKUPFILESPERSET 10ARCHIVELOG ALLFORMAT '/u01/oradata/PRIMARY/backup/%d_A_%T_%u_s%s_p%p';
In RMAN create controlfile for standby database
In RMAN switch and archive current online redo log
In RMAN backup archived redo logs
10
© 2006 Julian Dykejuliandyke.com
Physical StandbyPreparation On standby server create administrative directories
$ mkdir $ORACLE_BASE/admin/PRIMARY;$ mkdir $ORACLE_BASE/admin/PRIMARY/adump;$ mkdir $ORACLE_BASE/admin/PRIMARY/bdump;$ mkdir $ORACLE_BASE/admin/PRIMARY/cdump;$ mkdir $ORACLE_BASE/admin/PRIMARY/dpdump;$ mkdir $ORACLE_BASE/admin/PRIMARY/pfile;$ mkdir $ORACLE_BASE/admin/PRIMARY/udump;
On standby server create database location
$ mkdir /u01/oradata/PRIMARY/arch
On standby server create backup location
$ mkdir /u01/oradata/PRIMARY/backup;
$ mkdir /u01/oradata/PRIMARY
On standby server create archived redo log location
11
© 2006 Julian Dykejuliandyke.com
Physical StandbyPreparation On standby server create password file
Copy SPFILE from primary to standby
scp london1:$ORACLE_HOME/dbs/spfilePRIMARY.ora \ reading1:$ORACLE_HOME/dbs
$ORACLE_HOME/bin/orapwd \ file=$ORACLE_HOME/dbs/orapwPRIMARY \ password=oracle \
Note - initPRIMARY.ora is not required on either server
12
© 2006 Julian Dykejuliandyke.com
Physical StandbyConfiguration On primary server set parameters
ALTER SYSTEM SET db_unique_name = LONDON SCOPE = SPFILE;
ALTER SYSTEM SET log_archive_dest_1 = 'LOCATION=/u01/oradata/PRIMARY/arch'
SCOPE=SPFILE;
ALTER SYSTEM SET log_archive_dest_2 = 'SERVICE=READING VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=READING'
SCOPE=SPFILE;
ALTER SYSTEM SET fal_client = LONDON SCOPE = SPFILE;
ALTER SYSTEM SET fal_server = READING SCOPE = SPFILE;
ALTER SYSTEM SET standby_file_management = AUTO SCOPE = SPFILE;
Restart the instance
13
© 2006 Julian Dykejuliandyke.com
Physical StandbyConfiguration On standby server configure LISTENER.ORA
SID_LIST_LISTENER_SERVER4 =(SID_LIST =
(SID_DESC =(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)(SID_NAME = PRIMARY)
))
Reload the listener
$ lsnrctl reload
Start the standby instance (NOMOUNT)
$ export ORACLE_SID=PRIMARY$ sqlplus / as sysdbaSQL> startup nomount
14
© 2006 Julian Dykejuliandyke.com
Physical StandbyConfiguration On standby server set parameters
ALTER SYSTEM SET db_unique_name = READING SCOPE = SPFILE;
ALTER SYSTEM SET log_archive_dest_1 = 'LOCATION=/u01/oradata/PRIMARY/arch'
SCOPE = SPFILE;
ALTER SYSTEM SET log_archive_dest_2 = 'SERVICE=LONDON VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=LONDON'
SCOPE=SPFILE;
ALTER SYSTEM SET fal_client = READING SCOPE = SPFILE;
ALTER SYSTEM SET fal_server = LONDON SCOPE = SPFILE;
ALTER SYSTEM SET standby_file_management = AUTO SCOPE = SPFILE;
Restart the instance
15
© 2006 Julian Dykejuliandyke.com
Physical StandbyConfiguration On primary server run RMAN connecting to standby server as
AUXILIARY
$ORACLE_HOME/bin/rman NOCATALOG TARGET / AUXILIARY sys/oracle@"(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=reading1)(PORT=1521))(CONNECT_DATA=(SID=PRIMARY)))"
Run the following command to clone the database backup on the standby server
RMAN> DUPLICATE TARGET DATABASE FOR STANDBY DORECOVER NOFILENAMECHECK;
16
© 2006 Julian Dykejuliandyke.com
Physical StandbyConfiguration On standby server restart the instance
SQL> SHUTDOWN IMMEDIATE
SQL> STARTUP NOMOUNT
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Mount the standby database
Start managed recovery
17
© 2006 Julian Dykejuliandyke.com
Logical Standby Configuration On standby server cancel managed recovery
SQL> ALTER SYSTEM SET log_archive_dest_2 = 'SERVICE=READING
VALID_FOR=(ONLINE_LOGFILES,STANDBY_ROLE) DB_UNIQUE_NAME=READING'
SCOPE=SPFILE;
On primary server modify the LOG_ARCHIVE_DEST_2 parameter
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
18
© 2006 Julian Dykejuliandyke.com
Logical Standby Configuration On primary server build the logical standby dictionary
SQL> EXECUTE LOGSTDBY.BUILD;
For a default database this generated about 8MB redo and updated the following objects:
SYS.LOGMNRG_SEED$ SYS.LOGMNRG_TYPE$
SYS.LOGMNRG_DICTIONARY$ SYS.LOGMNRG_COLTYPE$
SYS.LOGMNRG_OBJ$ SYS.LOGMNRG_ATTRIBUTE$
SYS.LOGMNRG_TAB$ SYS.LOGMNRG_LOB$
SYS.LOGMNRG_COL$ SYS.LOGMNRG_CDEF$
SYS.LOGMNRG_ATTRCOL$ SYS.LOGMNRG_CCOL$
SYS.LOGMNRG_TS$ SYS.LOGMNRG_ICOL$
SYS.LOGMNRG_IND$ SYS.LOGMNRG_LOGFRAG$
SYS.LOGMNRG_USER$ SYS.LOGMNRG_INDPART$
SYS.LOGMNRG_TABPART$ SYS.LOGMNRG_BUILDLOG
19
© 2006 Julian Dykejuliandyke.com
Logical Standby Configuration On standby server enable recovery and change the name of
the standby database
SQL> ALTER DATABASE RECOVER TO LOGICAL STANDBY standby;
On standby server create a new password file
$ORACLE_HOME/bin/orapwd file=$ORACLE_HOME/dbs/orapwSTANDBY \password=oracle
On standby server restart the instance and reset the logs
SQL> SHUTDOWN IMMEDIATESQL> STARTUPSQL> ALTER DATABASE OPEN RESETLOGS;
On standby server start SQL apply
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY;