Here are a few tips that might be useful to people who are running applications in an environment that's configured to use InterSystems mirroring.
- If you configure an ECP connection to a Caché instance that is a mirror member databases then the ECP connection should also have mirroring enabled (tick the mirroring box when defining the connection). More details here. You may also need to increase the number of ECP connections each end accepts, to cater for the way both members of a mirror pair get involved in ECP negotiation.
- If your app server needs to update an unmirrored database on the mirror-enabled data server, then journalling must be switched off for this database, otherwise you will get <PROTECT> errors when you try to write to it across ECP. A journalled but unmirrored database on a mirroring data server is read-only across ECP.
- When a mirrored instance of Cache/Ensemble is starting up it takes a while to decide whether it is a primary or failover node. During that time any database update will cause a <PROTECT> error because the databases are initially mounted read-only. If your app launches service processes using the JOB command from SYSTEM^%ZSTART this can lead to problems if those processes immediately try to start updating globals. Additionally it probably only makes sense to run these processes on the primary node. Deal with both of these issues by using NotifyBecomePrimary^ZMIRROR as the place to start them instead of SYSTEM^%ZSTART.