High Availability (HA) in Microsoft SQL Server is not supported for Snow Software databases.
SQL High Availability can appear under several names, including:
- Replication
- Log Shipping
- Mirroring
- Always On Failover Clustering
- Always On Availability Groups
- Clusters
If any of these are found to be enabled, the configuration should be disabled, as it is not supported. This article provides a script to check whether HA has been enabled and explains the risks of enabling unsupported configurations.
Why HA is not supported with Snow
Enabling SQL HA for Snow databases causes multiple issues:
- Performance impact
- The Data Update Job (DUJ) modifies millions of rows during execution. Replicating these changes across nodes places extreme load on the system, reducing performance and delaying processing.
- Failover awareness
- Snow License Manager and related services are not designed to detect node failure or switch automatically to replicas. During failover, jobs like DUJ stop running, leaving the replica unable to continue.
- Service instability and errors
- Other Snow services such as NATS are not fault tolerant. Failover may result in errors, interruptions, or potential data loss.
- Cross-database transaction limitations
- Microsoft SQL Server does not support cross-database transactions under most HA configurations. Snow relies heavily on such transactions, which makes HA incompatible.
Example: database mirroring failure scenario
The following database mirroring example illustrates how a logical inconsistency could occur. In this example, an application uses a cross-database transaction to insert two rows of data: one row is inserted into a table in a mirrored database, A, and the other row is inserted into a table in another database, B.
Database A is being mirrored in high-safety mode with automatic failover. While the transaction is being committed, database A becomes unavailable, and the mirroring session automatically fails over to the mirror of database A.
After the failover, the cross-database transaction might be successfully committed on database B but not on the failed-over database. For example, if the original principal server for database A had not sent the log for the cross-database transaction to the mirror server before the failure. After the failover, that transaction would not exist on the new principal server. Databases A and B would become inconsistent, because the data inserted in database B remains intact, but the data inserted in database A has been lost.
A similar scenario can occur while using an MS DTC transaction. For example, after failover, the new principal contacts MS DTC. But MS DTC has no knowledge of the new principal server, and it terminates any transactions that are "preparing to commit," which are considered committed in other databases.
Run the following script to identify whether HA has been enabled:
-- ========================================
-- SQL Server High Availability Check
-- ========================================
-- 1. Always On Availability Groups
PRINT '--- Always On Availability Groups ---';
SELECT * FROM sys.availability_replicas;
SELECT * FROM sys.dm_hadr_availability_replica_cluster_nodes;
DECLARE @IsHadrEnabled AS sql_variant;
SET @IsHadrEnabled = (SELECT SERVERPROPERTY('IsHadrEnabled'));
SELECT
@IsHadrEnabled AS IsHadrEnabled,
CASE @IsHadrEnabled
WHEN 0 THEN 'Always On availability groups are DISABLED'
WHEN 1 THEN 'Always On availability groups are ENABLED'
ELSE 'Invalid Input'
END AS HadrStatus;
-- 1a. Distributed Availability Groups
PRINT '--- Distributed Availability Groups ---';
IF EXISTS (
SELECT 1
FROM sys.columns
WHERE object_id = OBJECT_ID('sys.availability_groups')
AND name = 'distributed_network_name'
)
BEGIN
EXEC sp_executesql N'
SELECT
name AS AG_Name,
distributed_network_name
FROM sys.availability_groups
WHERE distributed_network_name IS NOT NULL;
';
END
ELSE
PRINT 'Distributed Availability Groups not supported on this SQL Server version.';
-- 2. Log Shipping
PRINT '--- Log Shipping Primary Databases ---';
SELECT * FROM msdb.dbo.log_shipping_primary_databases;
PRINT '--- Log Shipping Secondary Databases ---';
SELECT * FROM msdb.dbo.log_shipping_secondary_databases;
-- 3. Database Mirroring
PRINT '--- Database Mirroring ---';
SELECT
db.name AS Database_Name,
db.state_desc AS DB_State,
dm.mirroring_role_desc,
dm.mirroring_state_desc,
dm.mirroring_safety_level_desc,
dm.mirroring_partner_name,
dm.mirroring_partner_instance
FROM sys.databases AS db
INNER JOIN sys.database_mirroring AS dm
ON db.database_id = dm.database_id
WHERE dm.mirroring_guid IS NOT NULL;
-- 4. Failover Cluster Instance (FCI)
PRINT '--- SQL Server Failover Cluster Instance (FCI) ---';
SELECT
@@SERVERNAME AS Server_Name,
CASE
WHEN SERVERPROPERTY('IsClustered') = 1
THEN 'SQL Server instance is part of a Failover Cluster'
ELSE 'SQL Server instance is NOT part of a Failover Cluster'
END AS IsClustered;
-- 5. Replication
PRINT '--- Replication Publications ---';
IF EXISTS (SELECT * FROM sys.databases WHERE name = 'distribution')
BEGIN
SELECT publisher_db, publication, publication_type, sync_method
FROM msdb.dbo.MSpublications;
END
ELSE
PRINT 'Replication not configured (distribution database missing).';
PRINT '--- Replication Subscriptions ---';
IF EXISTS (SELECT * FROM sys.databases WHERE name = 'distribution')
BEGIN
SELECT subscriber_db, publication, subscription_type, status
FROM msdb.dbo.MSsubscriptions;
END;
-- 6. Azure SQL Built-in HA
PRINT '--- Azure SQL HA Info ---';
SELECT
DB_NAME() AS Database_Name,
DATABASEPROPERTYEX(DB_NAME(), 'ServiceObjective') AS Service_Tier,
DATABASEPROPERTYEX(DB_NAME(), 'Edition') AS Edition;
-- 7. Availability Groups Summary
PRINT '--- Summary of Availability Groups ---';
SELECT
ag.name AS AG_Name,
ag.is_distributed,
ag.failure_condition_level,
ag.health_check_timeout,
ar.replica_server_name,
ar.availability_mode_desc,
ar.failover_mode_desc
FROM sys.availability_groups AS ag
JOIN sys.availability_replicas AS ar
ON ag.group_id = ar.group_id;
PRINT '--- High Availability Check Completed ---';
If High Availability (HA) is found to be enabled, disable all HA configurations.
For more information see Snow Software’s documentation on software requirements.
Related Articles
Client Applications Hang at Checkouts from Trusted Storage 6Number of Views Steps to generate the new FNMEA license file 81Number of Views FlexNet Publisher lmadmin Download Links 39Number of Views Why does the download of file "Document Library for FlexNet Publisher Licensing" from PLC 1.0, in Chrome or Explorer,doesn… 5Number of Views IMPORTANT NOTICE: Possible Security Vulnerability in FlexNet Publisher lmadmin License Server Manager 7Number of Views
Hi, I am Reva - Ask me anything.
No new updates
Thanks for the feedback!
Your feedback has been saved.Rate this response:
Add Additional feedback ( Optional )
Are you sure you want to cancel
the case creation?
Are you sure you want to cancel the case creation?
Are you sure you want to close this case
| Products | Region | Phone Numbers |
|---|---|---|
| FlexNet Operations FlexNet Embedded FlexNet Publisher FlexNet Connect FlexNet Code Insight InstallAnywhere InstallShield |
North America * |
+1 630-332-2513 (toll) +1 877-279-2853 (toll-free in North America) |
| Europe * |
+44 1925 944367 (toll) +44 800 047 8642 (toll-free in Europe) |
|
| Japan * | +81 3-4540-5335 (select option 2) | |
| Australia * |
+61 3 9895 2177 +61 1800 560 603 (toll-free in Australia) |
|
|
Usage Intelligence (formerly
Revulytics) Compliance Intelligence |
Please use the Case Portal to submit your support ticket or reach out to your Revenera contact. | |
Case id: 00001065
Activity: Status change: 2 hours ago