Getting out of sync after a node was moved from an existing server to a new server, by changing the cmcfg.ora file, replacing Host1 as follows:
Before node switch,
$ more cmcfg.ora
.......
PrivateNodeNames=SID1 SID2 SID3 SID4
PublicNodeNames=Host1 Host2 Host3 Host4
............
After node switch,
$ more cmcfg.ora
.......
PrivateNodeNames=SID1 SID2 SID3 SID4
PublicNodeNames=Host5 Host2 Host3 Host4
............
In etc/hosts changed the IPs for the changed private nodes.
Shareplex considers this as taking out an old node and adding a new node, thus it re-reads from the beginning of the last redo log after node replacement.
WORKAROUND:
If you do not have a lot of downtime, you can use this approach.
Source:
1) Shutdown listener, shutdown application, shutdown database.
2) Restart database in restricted mode, start listener on different port and only allow Shareplex to connect.
sp_ctrl> qstatus
Make sure all messages are zero and check on target make sure all messages are 0 as well.
3) Perform a log switch in Oracle on the node that you will replace later.
4) On source, run this query: 'select seqno, host_name from shareplex_actid'
Make sure you see the new sequence# for this host. This means Shareplex is now reading the new redo log for this node. At this point, there should be no new transactions written to this new redo log. You can do a couple more log switches if you are not sure.
5) Shutdown listener, shutdown database, shutdown Shareplex.
6) Make node change in cmcfg.ora and /etc/hosts file and switch instances to new nodes.
7) Start database, start listener, start Shareplex on new node.
At this point, Shareplex will read from the beginning of the last redo log. Since there are no transactions written to this redo log prior to the node switch, you will not get out of sync.
STATUS:
This issue will be addressed in future release of Shareplex.