Should I have a SNAC with my cumulative update?

Here is a question we have received from several customers and internally at Microsoft:

Do I need to apply the “SNAC” package that comes with some of the cumulative updates?

Just so we are all on the same terms, SNAC refers to SQL Native Client. and basically contains our SQL Server “native code” data providers including OLE-DB and ODBC.

To understand more why people have asked this question, let’s look at a Cumulative Update 4 for SQL Server 2008 SP1 as found at: https://support.microsoft.com/kb/973602 as an example. Please note that there are some differences for SQL Server 2005 which I’ll talk about later in the blog post.

When you select

image

you are presented with the following choices (by default we detect your OS platform and present you with only packages that apply, but you can expand to get all platform packages):

image

The first package titled SQL_Server_2008_SP1_Cumulative_Update_4 is the “main” CU package you would install on a server or client with SQL Server components. The package I’ve highlighted is referred to as the “SNAC package”. So when presented with this screen you may be asking “Do I need to apply this separate package?” (there are other packages listed here and I’ll talk about them as well later in this blog post).

The answer is “it depends” (don’t you hate it when people say this). Consider these two scenarios:

1) You have SQL Server installed on a server or client tools installed on a client computer

The answer is NO because if you install the “main” cumulative update package you get the bits that come in the SNAC package. You may wonder why it matters whether SNAC is updated on the server itself especially if you don’t run any applications on your server that use SNAC. Linked Server Queries are one of the big reasons. A “default” SQL Server linked server is based on SNAC so this DLL (sqlncli.dll for 2005 and sqlncli10.dll for 2008) will be loaded in SQLSERVR.EXE to run a linked server query.

2) You don’t have SQL Server installed on a client or server but have an application that uses SNAC

The answer is YES. In fact, that is why we created a separate SNAC package. For customers who just need the SNAC update but don’t want to download and install the entire main CU package.

What would happen if you did try to install the main CU package on a machine where SQL Server is not installed but SNAC was installed? The answer is nothing more than if you had just installed the SNAC package (except the SQL Setup Support Files get installed). We detect what is already installed and only offer up to you the appropriate updates. In the case of a machine where SNAC is the only thing installed, you would see a screen like this from the main CU:

image

the feature that shows up is just called “Shared Features”. If you proceed with the rest of the install, it will only update sqlncl10.dll to the version with the cumulative update.

Why did we ship a separate package for SNAC if the main package can do the trick? It is all about size and redistribution. In the above screen if you select  Show Additional Information you can se the sizes of the packages:

image

As you can see the main package is ~232Mb while the SNAC package is ~7Mb. So for customers who have downloaded the SNAC redistributable package from the SQL Server 2008 Feature Pack, having a separate SNAC package for a cumulative update is critical. Any time you see a separate package in the Cumulative update list, it is primarily because a particular software component was updated that could be installed outside the normal SQL Server installation, such as a feature pack component.

Just so I can show the complete evidence here, let’s look at the SNAC files in each of these packages (read this post to find out more about how to use msiexec to extract files from an msi package).

If you extract the sqlncli.msi package (the SNAC package), you will find several files (mostly because we include the SDK lib files) but the one to drill in on is the sqlncli10.dll file. Here is my directory listing in Powershell for my extracted file:

image

Now if I extract the main package files. (since this is an .EXE file you will need to use a tool like winzip to extract all the files from the .EXE) I will get the same file. When you do this extraction, the sqlncli.msi file will be in the path <platform>/setup/<platform> such as x64/setup/x64:

image

This second set of files comes from the main CU package. You can see the sqlncli10.dll is the exact same date/time, file length, and version.

Here are some other important points regarding SNAC and SQL Server 2008 Cumulative Updates:

  • If you go look at Cumulative Update 1 and 2 for SQL Server 2008 SP1, you will notice there is no separate SNAC package. This is because no changes to SNAC were made for CU1 and CU2. Since there were no changes, there is no separate package and the main package doesn’t contain any updates to SNAC
  • The first change to SNAC made after SQL Server 2008 SP1 was in Cumulative Update 3.  So a SNAC package was included and updates in the main package exist.
  • This means from this point forward any cumulative update package for SQL Server 2008 SP1 will include a separate SNAC package and an update in the main package with an updated version even if no changes were made to SNAC. This is in line with how we do cumulative updates. This is why Cumulative Update 4 and 5  for SQL Server 2008 SP1 included a SNAC package and updates to SNAC in the main package (including a version that lines up with the engine for that
  • Cumulative Updates for SQL Server 2008 RTM behave the same as SQL Server 2008 SP1.

What about these other packages in SQL Server 2008 Cumulative Updates?. These are packages that are separable from the main CU package because they apply to different components related to SQL Server but installed through some other means such as a feature pack. As with SNAC, they only show up when an actual change is made. At that point, they will show up for each cumulative update package going forward for that service pack:

SQL_Server_2008_SP1_Cumulative_Update_NN_RSSharepoint – These are updates that are specific to the SQL Server 2008 Reporting Services Sharepoint Add-in that installs with Sharepoint Services. This package also exists for RTM CUs.

SQL_Server_2008_SP1_Cumulative_Update_NN_RRB2ClickOn – These are updates to the Report Builder 2.0 ClickOnce package.

 

What about SQL Server 2005?

SQL Server 2005 is very similar to SQL Server 2008 in that a separate package is provided as an option when changes are made to that component. But, a major difference for SNAC is that the SNAC updates ARE NOT included in the main package.

So on a SQL Server if you need SNAC updated, you must apply both the main and SNAC packages. This is something customers using linked servers should be very aware of.

Another difference is some other separate packages exist that are not in SQL Server 2008. Like SQL Server 2008, these exist to update components that can be installed outside of the normal SQL Server installation. They may not exist in all cumulative update packages because they will only appear when a change is made (or any CU afterwards):

SQL_Server_2005_SP3_Cumulative_Update_NN_SQLWriter – Updates for the Microsoft SQL Server VSS Writer Service used for SQL Server VSS backups. This package also exists for SP2 CUs.

SQL_Server_2005_SP3_Cumulative_Update_NN_RS_Sharepo – Like 2008, this is an update for the SQL Server 2005 Reporting Services Sharepoint Add-in. This package also exists for SP2 CUs.

SQL_Server_2005_SP3_Cumulative_Update_NN_XMO – This is an update to the Microsoft SQL Server 2005 Management Objects Collection as found in the SQL Server 2005 Feature Pack. This package also exists for SP2 CUs.

 

So for SNAC, here is a quick summary:

  1. If you have installed SNAC as a separate installation (say from the feature pack), then just apply the SNAC package. This applies to SQL Server 2005 or 2008
  2. If you have installed SQL Server 2008 on a client or server and want to make sure SNAC is updated, just apply the main cumulative update package. Any SNAC updates are included.
  3. if you have installed SQL Server 2005 on a client or server and want to make sure SNAC is updated, you need to apply the SNAC package in addition to the main cumulative update package

Bob Ward
Microsoft