SQL Server – Application Compatibility with AlwaysOn

availability-groupssql server

This is the question a client of ours is asking. For now I have given a generic response that we will support this however they should provide us with a test environment.

Our application is using .net and we allow clients to configure our server service with the database instance name and username/password (we use sql-server authentication).

From what I understand all they will need to do is configure our application with the cluster instance name instead of the hostname of the database server. Reading the Prerequisites that Microsoft provide it seems like it will be completely transparent for us.

Is this correct? Are there other changes we need to make to our connection string? Any other gotchas?

Best Answer

First, let's clarify terms. AlwaysOn is a Microsoft marketing term which includes both SQL Server Availability Groups and SQL Server Failover Cluster Instances. You should stop using AlwaysOn and be specific for all future communications.

If you are referring to FCIs: the configuration should be completely transparent to your application. They should configure the connection to the virtual network name of the FCI and your application will not notice any difference.

If you are referring to AGs: With AGs, they have the option of configuring an AG Listener or not.

If they are not using a listener then all is well and your application won't notice any difference.

If they are using a listener, in a single subnet, then it is transparent.

If they are using a listener, with multiple subnets (multiple IPs for the listener), then your application will need to support the MultiSubnetFailover=TRUE connection parameter or they will need to modify the RegisterAllProvidersIP Windows property. If one of those aren't used then they will have issues with DNS caching the wrong IP address and might blame the application for failing to connect.

See this article regarding the MultiSubnetFailover parameter.

See this article regarding the RegisterAllProvidersIP property.