Oracle introduced Far Sync Data Guard configuration which I described briefly in this post. Now is time for part two and using Data Guard Broker to add Far Sync instance.
Assuming that you have basic Data Guard Broker configuration ready (as described in - How to quickly build standby database and setup DataGuard configuration using Oracle 12c) adding new Far Sync instance is quite easy task.
First we have to setup a new instance which will be used as Far Sync for our primary database.
Instance parameter file - as a copy of primary database configuration (not necessary)
Copy it to Far Sync server
Redo logs routing rules are described in Oracle documentation.
Enabling and checking configuration
Now all is done. Happy testing.
Marcin
Assuming that you have basic Data Guard Broker configuration ready (as described in - How to quickly build standby database and setup DataGuard configuration using Oracle 12c) adding new Far Sync instance is quite easy task.
First we have to setup a new instance which will be used as Far Sync for our primary database.
Instance parameter file - as a copy of primary database configuration (not necessary)
*.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 *.processes=300 *.remote_login_passwordfile='EXCLUSIVE' *.sga_target=450m *.undo_tablespace='UNDOTBS1' # for far sync *.db_unique_name='test12c_far_sync' *.LOG_FILE_NAME_CONVERT='test','test' *.local_listener='(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.60)(PORT = 1522)))'There are three parameters which have to be changed:
- db_unique_name
- local_listener - new instance has to be registered in proper listener
- log_file_name_convert - it is useful to have even with dummy values so Oracle can recreate standby logs automatically
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_far_sync_DGMGRL) (ORACLE_HOME = /u01/app/oracle/product/12.1.0/db1) ) ) LISTENER_DG = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROCDG1)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.60)(PORT = 1522)) ) )tnsnames file - entry test12c_far_sync has to be added on primary and standby server as well
test12c_prim = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.45)(PORT = 1522)) ) (CONNECT_DATA = (SID = test12c) (SERVER=dedicated) ) ) test12c_std = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.1.79)(PORT = 1522)) ) (CONNECT_DATA = (SID = test12c) (SERVER=dedicated) ) ) test12c_far_sync = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.60)(PORT = 1522)) ) (CONNECT_DATA = (SID = test12c) (SERVER=dedicated) ) )When instance parameter file and network configuration is ready we need to create Far Sync control file on primary server.
[oracle@ora12c dbs]$ rlwrap sqlplus / as sysdba SQL*Plus: Release 12.1.0.1.0 Production on Fri Jul 26 23:21:59 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 DATABASE CREATE FAR SYNC INSTANCE CONTROLFILE AS '/tmp/farsync.ctl'; Database altered.
Copy it to Far Sync server
[oracle@ora12c dbs]$ scp /tmp/farsync.ctl 192.168.1.60:/u01/app/oracle/oradata/test12c/control01.ctl oracle@192.168.1.60's password: farsync.ctl 100% 10MB 10.3MB/s 00:00 [oracle@ora12c dbs]$ scp /tmp/farsync.ctl 192.168.1.60:/u01/app/oracle/oradata/test12c/control02.ctl oracle@192.168.1.60's password: farsync.ctl 100% 10MB 10.3MB/s 00:01 [oracle@ora12c dbs]$ scp /tmp/farsync.ctl 192.168.1.60:/u01/app/oracle/oradata/test12c/control03.ctl oracle@192.168.1.60's password: farsync.ctl 100% 10MB 10.3MB/s 00:00 [oracle@ora12c dbs]$Now Far Sync instance can be started and new standby logs could be created. Make sure if Data Guard Broker has been started as well.
[oracle@oraclese dbs]$ rlwrap sqlplus / as sysdba SQL*Plus: Release 12.1.0.1.0 Production on Fri Jul 26 23:24:27 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 293605352 bytes Database Buffers 167772160 bytes Redo Buffers 8163328 bytes Database mounted. 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.Like if previous post about Data Guard configuration - Broker will be used to do all configuration work. You should to connect to Broker from primary database. This is how current configuration looks like:
[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> 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: SUCCESSAdding Far Sync
DGMGRL> add far_sync test12c_far_sync as connect identifier is 'test12c_far_sync'; far sync instance "test12c_far_sync" added DGMGRL> show configuration verbose; Configuration - fsc Protection Mode: MaxPerformance Databases: test12c_prim - Primary database test12c_std - Physical standby database test12c_far_sync - Far Sync (disabled) 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: SUCCESSNow new rules for redo log transport have to be configured
DGMGRL> edit database 'test12c_prim' set property redoroutes='(local : test12c_far_sync sync)'; Property "redoroutes" updated DGMGRL> edit far_sync 'test12c_far_sync' set property redoroutes='(test12c_prim : test12c_std)'; Property "redoroutes" updatedAbove configuration is sending redo data from primary database to far sync instance using SYNC mode and redo data from far sync instance to standby database using ASYNC mode. As primary and far sync instance are close one to each other you can have no data loss mode without additional network synchronization overhead.
Redo logs routing rules are described in Oracle documentation.
Enabling and checking configuration
DGMGRL> enable far_sync test12c_far_sync; Enabled. DGMGRL> show configuration verbose; Configuration - fsc Protection Mode: MaxPerformance Databases: test12c_prim - Primary database test12c_far_sync - Far Sync 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: SUCCESSIf everything is OK we can switch protection mode from Maximum Performance to Maximum Availability to get all advantages of our new configured Far Sync instance.
DGMGRL> edit configuration set protection mode as MaxAvailability; Succeeded. DGMGRL> show configuration verbose; Configuration - fsc Protection Mode: MaxAvailability Databases: test12c_prim - Primary database test12c_far_sync - Far Sync 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: SUCCESS
Now all is done. Happy testing.
Marcin
2 comments:
Great, now happens if we loose this single Far Sync destination?
Will DataGuard fallback - in Maximum Availability mode - to ASYNC?
Are there any warnings written/external callouts that would inform you that it just lost SYNC destination?
Any possibility of adding HA to this Far Sync destination? E.g. can i have 2 x Far Syncs running but only streaming REDO to only one of them ? :)
Hi Jakub,
Yes - there are options to set up alternate ASYNC location. Unfortunately I didn't find how to do that with DataGuard Broker but it can be done manually.
I'm not aware of any HA options described by Oracle but this is what I'm going investigate. Next thing on my list is symmetric Far Sync configuration in case of primary failover. Hope will post something about this soon.
Marcin
Post a Comment