- Primary database server (DB1 on server1)
- Standby database server (DB2 on server2)
- separate Observer machine
I created the setup "manually" (scripted, not using EM) and everything worked fine (using FAST_START FAILOVER). Everything, except that after a failover from server2 (initially the standby) to server1 (initially the primary), the database on server2 would not start automatically.
Failing over from server1 to server2 works fine:
- Shutdown server1 (disconnect virtual power)
- Observer notices failure and starts DB2 as primary
- Startup server1
- Observer sees server1 online, re-instates DB1 and starts DB1 as standby
And after re-instatement, the DataGuard configuration works fine again.
When I failover from server2 to server1, DB2 will not restart and not be re-instated after the server comes online again. After such a failover, I had to mount the database manually and then the Observer took over and re-instated the database.
After much searching, I found that in the Windows registry, one key was missing. In the registry (HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDB12Home1), there was no entry for "ORACLE_SID". I created the entry "ORACLE_SID=DB2" and set "ORA_DB2_AUTOSTART=TRUE". This was set to TRUE initially, but was set to FALSE on restart of the machine (probably because ORACLE_SID was not set).
I think that the "oradim" command for creating the service does not work properly. It does not create the ORACLE_SID key in the registry. This stops the database from autostarting (in mount mode) and DataGuard (the Observer) was not able to re-instate the database. This is already automatically done on the (initial) primary server, probably by DBCA, so that database works fine after a restart.
So, as a quick solution, you should create the ORACLE_SID key in the Windows registry for the standby server in order to start the database automatically. I hope this helps anyone facing this problem!