Cumulative Update 17 for SQL Server 2017

Applies to: SQL Server 2017 on Windows (all editions)SQL Server 2017 on Linux (all editions)

This article describes Cumulative Update package 17 (CU17) for SQL Server 2017. This update contains fixes that were released after the initial release of SQL Server 2017 and updates the SQL Server and Analysis services components to the following builds:

Component Product version File version
SQL Server 14.0.3238.1 2017.140.3238
Analysis Services 2017.140.249.17


Important notices

This article also provides important information about the following situations:

  • Pacemaker: A behavioral change is made in distributions that use the latest available version of Pacemaker. Mitigations methods are provided.
  • Query Store: You must run this script if you use Query Store and you have previously installed SQL Server 2017 Cumulative Update 2 (CU2).
  • Analysis Services CU build version: Beginning in SQL Server 2017, the Analysis Services build version number and SQL Server Database Engine build version number do not match. For more information, see Verify Analysis Services cumulative update build version.

Cumulative updates

Cumulative updates (CU) are now available at the Microsoft Download Center.

Only the most recent CU that was released for SQL Server 2017 is available at the Download Center.

CU packages for Linux are available at


  • Each new CU contains all the fixes that were included with the previous CU for the installed version of SQL Server.
  • SQL Server CUs are certified to the same levels as Service Packs, and should be installed at the same level of confidence.
  • Microsoft recommends ongoing, proactive installation of CUs as they become available according to these guidelines:
    • Historical data shows that a significant number of support cases involve an issue that has already been addressed in a released CU.
    • CUs may contain added value over and above hotfixes. This includes supportability, manageability, and reliability updates.
  • We recommend that you test CUs before you deploy them to production environments.

How to obtain this cumulative update package for Windows

The following update is available from the Microsoft Download Center:

If the download page does not appear, contact Microsoft Customer Service and Support to obtain the cumulative update package.


  • After future cumulative updates are released for SQL Server 2017, this and all previous CUs can be downloaded from the Microsoft Update Catalog. However, we recommend that you always install the latest cumulative update that is available.

How to obtain this cumulative update package for Linux

To update Linux to the latest CU, you must first have the Cumulative Update repository configured. Then, update your SQL Server packages by using the appropriate platform-specific update command.

For installation instructions and direct links to the CU package downloads, see the release notes.

Additional hotfixes that are included in this cumulative update package

VSTS bug number KB article number Description Fix area Platform
12865857 4338636 FIX: SQL jobs fail due to blocking in SSISDB in SQL Server 2014, 2016 and 2017 Integration Services Windows
12519854 4469600 FIX: Peer-to-peer replication fails in SQL Server 2016 and 2017 if the host name is not uppercase SQL Engine Windows
13017120 4495663 FIX: Error 41162 occurs when the creation of distributed availability groups fails in SQL Server 2016 and 2017 High Availability Windows
13037041;13037044 4497225 FIX: Query against table with both clustered columnstore index and nonclustered rowstore index may return incorrect results in SQL Server 2016 and 2017 SQL Engine All
13037043;13037045 4497701 FIX: Columnstore filter pushdown may return wrong results when there is an overflow in filter expressions in SQL Server 2014, 2016 and 2017 SQL Engine All
12947210 4500770 FIX: AG is suspended when cross-database transaction is applied on AG databases in SQL Server 2016 and 2017 High Availability Windows
12752114 4502442 FIX: sys.fn_hadr_backup_is_preferred_replica causes error 41005 in SQL Server 2017 High Availability Windows
13087324 4511751 FIX: Access violation error occurs when SQL Server 2016 and 2017 uses hash join, hash aggregate, sort or window function in batch-mode plan in the deadlock monitor SQL Engine Windows
12921465 4511884 FIX: Error occurs when a non-dbo user alters procedure in SQL Server 2017 database that has Merge Publication enabled SQL Engine Windows
13087333 4512558 FIX: Assertion error occurs when SQL Server 2016 and 2017 use hash join, hash aggregate, sort or window function in batch-mode plan SQL Engine All
13087320 4512567 FIX: "Non-yielding Scheduler" occurs when you run queries with batch-mode hash join and/or sort in SQL Server 2016 and 2017 SQL Engine Windows
13087325 4513097 FIX: Restore or RESTORE VERIFYONLY of a TDE-compressed backup fails in SQL Server 2016 and 2017 SQL Engine Windows
13087329 4513099 FIX: Azure storage I/O subsystem may not reset transfer details for a failed I/O resulting in backup errors SQL Engine All
13087330 4513238 FIX: Error 9003 occurs when you back up a database on a secondary replica in Microsoft SQL Server 2016 and 2017 SQL Engine Windows
13045830 4515773 FIX: Hadoop File System Task fails to copy gigabyte-large file from HDFS in SQL Server 2017 Integration Services Windows
13109883 4516999 FIX: File content is sent twice when copied to HDFS using Hadoop File System Task in SQL Server 2017 Integration Services Windows
13076556 4517404 FIX: Unexpected results occur when you query a SSAS 2017 tabular mode database in DQ mode Analysis Services Windows
13122905 4518364 FIX: Access violation occurs when you run queries that involve PIVOT or UNPIVOT in SQL Server 2016 and 2017 SQL Engine Windows
13130344 4519366 FIX: Incorrect results occur with index intersection on partitioned table with a clustered columnstore index in SQL Server 2016 and 2017 SQL performance Windows
13061226 4519668 FIX: Access violation occurs when you enable TF 3924 to clean orphaned DTC transactions in SQL Server 2016 and 2017 SQL Engine Windows
13138944 4519796 FIX: Stack dump occurs when table type has a user-defined constraint in SQL Server 2016 SQL Engine Windows
13086241 4520124 FIX: Unable to mount SQL Server FILESTREAM share from Linux with SMB 3.x protocol SQL Engine Windows
13059436 4520148 FIX: Error 35262 with Severity 17 occurs when database is part of an Availability Group in SQL Server 2017 High Availability All
13043160 4520149 FIX: Assertion occurs when you fail over Read-Scale AlwaysOn Availability Groups in SQL Server 2017 High Availability Windows
13078232 4520438 FIX: Accessibility bugs are fixed in MDS 2019 but not fixed in MDS 2017 Data Quality Services (DQS) Windows
13163565 4521659 FIX: SQL Writer Service fails to back up in non-component backup path in SQL Server 2016 and 2017 SQL Engine Windows
13161357 4521701 FIX: Cardinality property for a table doesn't include rows in the delta store or deleted bitmap if the table has a clustered columnstore index SQL Engine Windows
13159467 4521758 FIX: JDBC XA transaction fails with an error in SQL Server 2017 on Linux SQL Engine All
13165551 4521960 FIX: Access violation occurs when a clone database verification fails in SQL Server 2016 and 2017 SQL Engine Windows
13063787 4522002 FIX: SQL Server 2017 on Linux fails with an Assertion error SQL Engine Linux
13065294 4522404 FIX: Error 8965 occurs when you run DBCC CHECKDB with PHYSICAL_ONLY option on CCI table in SQL Server 2017 SQL Engine Windows
13136089 4522405 FIX: Non-yielding scheduler error occurs when you run batch query with sort operation in SQL Server 2017 SQL Engine All
13088831 4522909 FIX: Error occurs when you refresh data on Power BI after Process FULL of SSAS 2017 Tabular database Analysis Services Windows
13049501 4522911 FIX: Synchronize command copies SSAS 2017 tabular model database role membership even when Skipmembership is used Analysis Services Windows
13288306 4542725 FIX: Core dump may be generated when you restart the SQL Server SQL Engine Linux

Notes for this update

Hybrid environments deployment

When you deploy an update to a hybrid environment (such as AlwaysOn, replication, cluster, and mirroring), we recommend that you refer to the following articles before you deploy the update:

Cumulative update package information


To apply this cumulative update package, you must be running SQL Server 2017.

Restart information

You may have to restart the computer after you apply this cumulative update package.

Registry information

To use one of the hotfixes in this package, you do not have to make any changes to the registry.

More CU package information

Pacemaker notice


All distributions (including RHEL 7.3 and 7.4) that use the latest available Pacemaker package 1.1.18-11.el7 introduce a behavior change for the start-failure-is-fatal cluster setting when its value is false. This change affects the failover workflow. If a primary replica experiences an outage, the cluster is expected to failover to one of the available secondary replicas. Instead, users will notice that the cluster keeps trying to start the failed primary replica. If that primary never comes online (because of a permanent outage), the cluster never fails over to another available secondary replica.

This issue affects all SQL Server versions, regardless of the cumulative update version that they are on.

To mitigate the issue, use either of the following methods.

Method 1

Follow these steps:

  1. Remove the start-failure-is-fatal override from the existing cluster. 
       # RHEL, Ubuntu         pcs property unset start-failure-is-fatal         # or         pcs property set start-failure-is-fatal=true   # SLES         crm configure property start-failure-is-fatal=true
  2. Decrease the cluster-recheck-interval value. 
       # RHEL, Ubuntu         pcs property set cluster-recheck-interval=<Xmin>   # SLES         crm configure property cluster-recheck-interval=<Xmin>
  3. Add the failure-timeout meta property to each AG resource. 
       # RHEL, Ubuntu         pcs resource update ag1 meta failure-timeout=60s   # SLES         crm configure edit ag1      # In the text editor, add `meta failure-timeout=60s` after any `param`s and before any `op`s

    Note In this code, substitute the value for <Xmin> as appropriate. If a replica goes down, the cluster tries to restart the replica at an interval that is bound by the failure-timeout value and the cluster-recheck-interval value. For example, if failure-timeout is set to 60 seconds and cluster-recheck-interval is set to 120 seconds, the restart is tried at an interval that is greater than 60 seconds but less than 120 seconds. We recommend that you set failure-timeout to 60s and cluster-recheck-interval to a value that is greater than 60 seconds. Setting cluster-recheck-interval to a small value is not recommended. For more information, refer to the Pacemaker documentation or consult the system provider.

Method 2

Revert to Pacemaker version 1.1.16.

    Query Store notice


    You must run this script if you use Query Store and you are updating from SQL Server 2017 Cumulative Update 2 (CU2) directly to SQL Server 2017 Cumulative Update 3 (CU3) or any later Cumulative Update. Executing this script is not needed if you have previously installed SQL Server 2017 Cumulative Update 3 (CU3) or any later SQL Server 2017 Cumulative Update.


    SET NOCOUNT ON;DROP TABLE IF EXISTS #tmpUserDBs;SELECT [database_id], 0 AS [IsDone]INTO #tmpUserDBsFROM master.sys.databasesWHERE [database_id] > 4 AND [state] = 0 -- must be ONLINE AND is_read_only = 0 -- cannot be READ_ONLY AND [database_id] NOT IN (SELECT dr.database_id FROM sys.dm_hadr_database_replica_states dr -- Except all local Always On secondary replicas  INNER JOIN sys.dm_hadr_availability_replica_states rs ON dr.group_id = rs.group_id  INNER JOIN sys.databases d ON dr.database_id = d.database_id  WHERE rs.role = 2 -- Is Secondary   AND dr.is_local = 1   AND rs.is_local = 1)DECLARE @userDB sysname;WHILE (SELECT COUNT([database_id]) FROM #tmpUserDBs WHERE [IsDone] = 0) > 0BEGIN SELECT TOP 1 @userDB = DB_NAME([database_id]) FROM #tmpUserDBs WHERE [IsDone] = 0 -- PRINT 'Working on database ' + @userDB EXEC ('USE [' + @userDB + '];DECLARE @clearPlan bigint, @clearQry bigint;IF EXISTS (SELECT [actual_state] FROM sys.database_query_store_options WHERE [actual_state] IN (1,2))BEGIN IF EXISTS (SELECT plan_id FROM sys.query_store_plan WHERE engine_version = ''14.0.3008.27'') BEGIN  DROP TABLE IF EXISTS #tmpclearPlans;  SELECT plan_id, query_id, 0 AS [IsDone]  INTO #tmpclearPlans  FROM sys.query_store_plan WHERE engine_version = ''14.0.3008.27''  WHILE (SELECT COUNT(plan_id) FROM #tmpclearPlans WHERE [IsDone] = 0) > 0  BEGIN   SELECT TOP 1 @clearPlan = plan_id, @clearQry = query_id FROM #tmpclearPlans WHERE [IsDone] = 0   EXECUTE sys.sp_query_store_unforce_plan @clearQry, @clearPlan;   EXECUTE sys.sp_query_store_remove_plan @clearPlan;   UPDATE #tmpclearPlans   SET [IsDone] = 1   WHERE plan_id = @clearPlan AND query_id = @clearQry  END;  PRINT ''- Cleared possibly affected plans in database [' + @userDB + ']'' END ELSE BEGIN  PRINT ''- No affected plans in database [' + @userDB + ']'' ENDENDELSEBEGIN PRINT ''- Query Store not enabled in database [' + @userDB + ']''END')  UPDATE #tmpUserDBs  SET [IsDone] = 1  WHERE [database_id] = DB_ID(@userDB)END