With every release of Oracle database there are new possibilities to build a required solution (ex. standby database) faster and with fewer steps. This is not official guide but rather a mix of Oracle 12c functionality used to build DataGuard configuration using RMAN and DataGuard Broker.
Assumptions:
Listener configuration
New parameters for database
Steps to run on new standby database
Database parameter file - it could be a copy of primary database file with two changes - db_unique_name and local_listener
Starting up instance
RMAN restore over network is an Oracle 12c feature. Yes there was duplicate from active database in 11g but this one is much easier to run and required fewer configuration steps. To restore Oracle data files on standby server we need to configure only instance in mount mode and add tns alias to primary database.
Starting RMAN and restoring data files
At that stage we have primary and standby database almost ready.
Step to run on primary and standby database
Starting DataGuard Broker and create standby log files
Steps to run on primary database
Now is time for DataGuard Broker to work for us.
Adding primary database
regards,
Marcin
Assumptions:
- There is a database which will be used as primary.
- New listener will be added to support standby traffic
Listener configuration
LISTENER_DG = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROCDG1)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.45)(PORT = 1522)) ) ) SID_LIST_LISTENER_DG = (SID_LIST = (SID_DESC= (ORACLE_HOME= /u01/app/oracle/product/12.1.0/db1) (SID_NAME=test12c) ) (SID_DESC = (SID_NAME = test12c) (GLOBAL_DBNAME = test12c_prim_DGMGRL) (ORACLE_HOME = /u01/app/oracle/product/12.1.0/db1) ) )tnsnames entries
test12c_std = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.1.79)(PORT = 1522)) ) (CONNECT_DATA = (SID = test12c) (SERVER = dedicated) ) ) test12c_prim = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.45)(PORT = 1522)) ) (CONNECT_DATA = (SID = test12c) (SERVER = dedicated) ) )
New parameters for database
[oracle@ora12c ~]$ rlwrap sqlplus / as sysdba SQL*Plus: Release 12.1.0.1.0 Production on Fri Jul 26 21:02:14 2013 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options SQL> alter system set local_listener='(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.45)(PORT = 1522)))'; System altered. SQL> alter system set db_unique_name='test12c_prim' scope=spfile; System altered. SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> startup ORACLE instance started. Total System Global Area 471830528 bytes Fixed Size 2289688 bytes Variable Size 255856616 bytes Database Buffers 209715200 bytes Redo Buffers 3969024 bytes Database mounted. Database opened.
New control file for standby
SQL> alter database create standby controlfile as '/tmp/standby.ctl' reuse; Database altered.
Copy standby control file to standby server
[oracle@ora12c ~]$ scp -i /home/oracle/oracle_standby.key /tmp/standby.ctl oracle@10.0.1.79:/u01/app/oracle/oradata/test12c/control01.ctl standby.ctl 100% 10MB 438.0KB/s 00:24 [oracle@ora12c ~]$ scp -i /home/oracle/oracle_standby.key /tmp/standby.ctl oracle@10.0.1.79:/u01/app/oracle/oradata/test12c/control02.ctl standby.ctl 100% 10MB 438.0KB/s 00:24 [oracle@ora12c ~]$ scp -i /home/oracle/oracle_standby.key /tmp/standby.ctl oracle@10.0.1.79:/u01/app/oracle/oradata/test12c/control03.ctl standby.ctl 100% 10MB 438.0KB/s 00:24
Steps to run on new standby database
Database parameter file - it could be a copy of primary database file with two changes - db_unique_name and local_listener
*.audit_file_dest='/home/oracle/admin/test12c/adump' *.audit_trail='db' *.compatible='12.1.0.0.0' *.control_files='/u01/app/oracle/oradata/test12c/control01.ctl','/u01/app/oracle/oradata/test12c/control02.ctl','/u01/app/oracle/oradata/test12c/control03.ctl' *.db_block_size=8192 *.db_domain='' *.db_name='test12c' *.diagnostic_dest='/u01/app/oracle' *.dispatchers='(PROTOCOL=TCP) (SERVICE=test12cXDB)' *.log_archive_dest_1='location=/u01/app/oracle/oradata/test12c/arch' *.open_cursors=300 *.pga_aggregate_target=150m *.processes=300 *.remote_login_passwordfile='EXCLUSIVE' *.sga_target=450m *.undo_tablespace='UNDOTBS1' # changes for standby *.db_unique_name='test12c_std' *.local_listener='(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.1.79)(PORT = 1522)))'Listener configuration
LISTENER_DG = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROCDG1)) (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.1.79)(PORT = 1522)) ) ) SID_LIST_LISTENER_DG = (SID_LIST = (SID_DESC= (ORACLE_HOME= /u01/app/oracle/product/12.1.0/db1) (SID_NAME=test12c) ) (SID_DESC = (SID_NAME = test12c) (GLOBAL_DBNAME = test12c_std_DGMGRL) (ORACLE_HOME = /u01/app/oracle/product/12.1.0/db1) ) )tnsnames entries
test12c_std = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.1.79)(PORT = 1522)) ) (CONNECT_DATA = (SID = test12c) (SERVER = dedicated) ) ) test12c_prim = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.45)(PORT = 1522)) ) (CONNECT_DATA = (SID = test12c) (SERVER = dedicated) ) )
In next step we have to check if all datafile and configuration directory are in place on standby machine and startup instance in mount mode.
Starting up instance
[oracle@ip-10-0-1-79 dbs]$ rlwrap sqlplus / as sysdba SQL*Plus: Release 12.1.0.1.0 Production on Fri Jul 26 17:39:48 2013 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to an idle instance. SQL> create spfile from pfile; File created. SQL> startup mount ORACLE instance started. Total System Global Area 471830528 bytes Fixed Size 2289688 bytes Variable Size 255856616 bytes Database Buffers 209715200 bytes Redo Buffers 3969024 bytes Database mounted. SQL>
RMAN restore over network is an Oracle 12c feature. Yes there was duplicate from active database in 11g but this one is much easier to run and required fewer configuration steps. To restore Oracle data files on standby server we need to configure only instance in mount mode and add tns alias to primary database.
Starting RMAN and restoring data files
[oracle@ip-10-0-1-79 dbs]$ rlwrap rman target / Recovery Manager: Release 12.1.0.1.0 - Production on Fri Jul 26 16:18:57 2013 Copyright (c) 1982, 2013, Oracle and/or its affiliates. All rights reserved. connected to target database: TEST12C (DBID=1424547711, not open) RMAN> restore database from service test12c_prim using compressed backupset; Starting restore at 26-JUL-13 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=27 device type=DISK channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: using compressed network backup set from service test12c_prim channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00001 to /u01/app/oracle/oradata/test12c/system01.dbf channel ORA_DISK_1: restore complete, elapsed time: 00:08:15 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: using compressed network backup set from service test12c_prim channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00002 to /u01/app/oracle/oradata/test12c/sysaux01.dbf channel ORA_DISK_1: restore complete, elapsed time: 00:08:55 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: using compressed network backup set from service test12c_prim channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00003 to /u01/app/oracle/oradata/test12c/undotbs01.dbf channel ORA_DISK_1: restore complete, elapsed time: 00:01:25 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: using compressed network backup set from service test12c_prim channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00004 to /u01/app/oracle/oradata/test12c/users01.dbf channel ORA_DISK_1: restore complete, elapsed time: 00:00:15 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: using compressed network backup set from service test12c_prim channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00005 to /u01/app/oracle/oradata/test12c/soe.dbf channel ORA_DISK_1: restore complete, elapsed time: 00:46:45 Finished restore at 26-JUL-13 RMAN>
At that stage we have primary and standby database almost ready.
Step to run on primary and standby database
Starting DataGuard Broker and create standby log files
SQL> alter system set dg_broker_start = true; System altered. SQL> alter database add standby logfile ('/u01/app/oracle/oradata/test12c/standby01.log') size 50M reuse; Database altered. SQL> alter database add standby logfile ('/u01/app/oracle/oradata/test12c/standby02.log') size 50M reuse; Database altered. SQL> alter database add standby logfile ('/u01/app/oracle/oradata/test12c/standby03.log') size 50M reuse; Database altered.
Steps to run on primary database
Now is time for DataGuard Broker to work for us.
Adding primary database
[oracle@ora12c ~]$ rlwrap dgmgrl / DGMGRL for Linux: Version 12.1.0.1.0 - 64bit Production Copyright (c) 2000, 2012, Oracle. All rights reserved. Welcome to DGMGRL, type "help" for information. Connected as SYSDG. DGMGRL> connect / Connected as SYSDG. DGMGRL> create configuration FSC as primary database is test12c_prim connect identifier is 'test12c_prim'; Configuration "fsc" created with primary database "test12c_prim"
Adding standby database and displaying configuration
DGMGRL> add database test12c_std as connect identifier is 'test12c_std' maintained as physical; Database "test12c_std" added DGMGRL> show configuration verbose; Configuration - fsc Protection Mode: MaxPerformance Databases: test12c_prim - Primary database test12c_std - Physical standby database Properties: FastStartFailoverThreshold = '30' OperationTimeout = '30' TraceLevel = 'USER' FastStartFailoverLagLimit = '30' CommunicationTimeout = '180' ObserverReconnect = '0' FastStartFailoverAutoReinstate = 'TRUE' FastStartFailoverPmyShutdown = 'TRUE' BystandersFollowRoleChange = 'ALL' ObserverOverride = 'FALSE' Fast-Start Failover: DISABLED Configuration Status: DISABLED
Enabling configuration and checking DataGuard status
DGMGRL> enable configuration; Enabled. DGMGRL> show configuration verbose; Configuration - fsc Protection Mode: MaxPerformance Databases: test12c_prim - Primary database test12c_std - Physical standby database Properties: FastStartFailoverThreshold = '30' OperationTimeout = '30' TraceLevel = 'USER' FastStartFailoverLagLimit = '30' CommunicationTimeout = '180' ObserverReconnect = '0' FastStartFailoverAutoReinstate = 'TRUE' FastStartFailoverPmyShutdown = 'TRUE' BystandersFollowRoleChange = 'ALL' ObserverOverride = 'FALSE' Fast-Start Failover: DISABLED Configuration Status: SUCCESSAnd our DataGuard configuration is up and running. Now we can change default configuration to one which meet our requirements. I next post I will add Far Sync instance and switch configuration to Maximum Availability.
regards,
Marcin
3 comments:
Many Thanks to share your 12c DG experience with us.
Its really a great feature of rman in 12c to create standby database in mount mode by accepting primary service name.
regards,
rohit gupta
Interesting example, but really does not work.
Just try to switchover and you shall see error :)
Hi Stanislav,
What kind of error you got ?
If Data Guard Broker is showing a working configuration, switchover should be possible.
Marcin
Post a Comment