KB4484710 - Cumulative Update 14 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 14 (CU14) 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 Build version File version
SQL Server 14.0.3076.1  2017.140.3076.1
Analysis Services 2017.140.245.1


This article also provides important information about the following situations:

Cumulative update

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 https://packages.microsoft.com/.


  • 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.


After installing this Cumulative Update for Linux you may notice the following message in SQL Server errorlog file:

DateTime Server Failed to verify the Authenticode signature of 'C:\binn\secforwarder.dll'. Signature verification of SQL Server DLLs will be skipped. Genuine copies of SQL Server are signed.

Failure to verify the Authenticode signature might indicate that this is not an authentic release of SQL Server. Install a genuine copy of SQL Server or contact customer support.

This message results from a change in how sedforwarder.dll is being built and packaged for Linux. The signature checking logic was not updated appropriately. The message can safely be ignored and the signature checking logic will be updated in future cumulative updates to address this issue.

Additional hotfixes that are included in this cumulative update package

VSTS bug number KB article number Description Fix area Platform
12245672 4338761 FIX: SQL Server may generate EXCEPTION_ACCESS_VIOLATION dump file when you merge two partitions of system-versioned temporal tables in SQL Server 2016 or 2017 SQL Engine Windows
12546124 4469268 FIX: I/O error on a BPE file causes buffer time-out in SQL Server SQL Engine Windows
12578034 4475322 FIX: "Non-yielding" error occurs when there is a heavy use of prepared statements in SQL Server 2014, 2016 and 2017 SQL Engine Windows
12671869 4480641 FIX: Columnstore Index build request may time out after 25 seconds though the memory grant time-out is configured in SQL Server 2016 or 2017 SQL performance All
12564137 4480647 Update adds improvements and fixes issues when you use an Oracle RAC environment in SQL Server Integration Services Windows
12671876 4480650 FIX: sys.fn_hadr_backup_is_preferred_replica returns TRUE for more than one secondary replica even if the priority values are identical in SQL Server 2016 and 2017 High Availability Windows
12671897 4483427 FIX: Access violation occurs and server stops unexpectedly when you use XEvent session with sqlos.wait_info event in SQL Server 2016 and 2017 SQL Engine Windows
12450172 4483571 FIX: Possible assertion failure when a cross-database transaction involving an Availability Group database is committed from a SQL Server trigger SQL Engine Windows
12552012 4483593 Snapshot Isolation and Savepoint support added for Availability Group databases on the same instance with DTC enabled in SQL Server SQL Engine Windows
12594078 4486931 FIX: Upgrade to SQL Server 2016 SP2 CU3 or CU4 fails with an error when sysadmin account "sa" is renamed in SQL Server 2016 and 2017 SQL Engine Windows
12671863 4486932 FIX: Users are incorrectly permitted to create incremental statistics on nonclustered indexes which are not aligned to the base table in SQL Server 2016 and 2017 SQL performance Windows
12671899 4486935 FIX: Query results are not as expected when you run a particular query from Excel in SQL 2014 SP2 CU14 or later version (2016, 2017 or 2019) Analysis services Windows
12571730 4486937 FIX: Publishing MDS data from Excel fails when you save the changes to workbook, close and reopen it in SQL Server 2016 and 2017 Data Quality Services (DQS) Windows
12588637 4486940 FIX: Assertion failure occurs when you try to back up database in limited disk space in SQL Server 2016 and 2017 SQL Engine Windows
12631714 4487751 FIX: An unexpected exception error occurs when you run a TREATAS function DAX query from Power BI desktop in SSAS 2017 Analysis services Windows
12635600 4487975 FIX: Reporting Action feature does not appear in the menu when you view the related measure in Excel or use MDSCHEMA_ACTIONS in SSAS 2017 Analysis services Windows
12580378 4488026 FIX: Access violation occurs when automatic statistics update happen on tables with incremental statistics in SQL Server 2017 SQL performance Windows
12656687 4488036 FIX: Repl_Schema_Access wait issues when there are multiple publisher databases on the same instance of SQL Server 2017 SQL Engine All
12562317 4488400 FIX: Access violation occurs and data movement is suspended for databases in Availability Group in SQL Server 2017 Data Quality Services (DQS) Windows
12656908 4488809 FIX: Assertion occurs when a parallel query deletes from a Filestream table in SQL Server 2014, 2016 and 2017 SQL Engine Windows
12657080 4488817 FIX: FILESTREAM for file I/O access feature can't be enabled when you use Cluster Shared Volumes (CSV) in SQL Server 2016 and 2017 Failover Cluster Instances SQL Engine Windows
12639890 4488856 FIX: Error 2812 and 20028 occur when you drop publisher or enable database for publication after you upgrade your SQL Server 2016 and 2017 SQL Engine Windows
12654421 4488949 FIX: Assertion occurs when linked server which points to itself is used in a cross-database transaction in SQL Server 2016 and 2017 SQL Engine Windows
12654305 4488971 FIX: MDS database upgrade fails with error in SQL Server 2016 and 2017 Data Quality Services (DQS) Windows
12629554 4490134 Improvement: Add a new extended event query_post_execution_plan_profile in SQL Server 2017 SQL performance All
12576806 4490135 FIX: SQL Server 2017 may crash when local process uses global key event handle SQL Engine Linux
12674843 4490137 FIX: TCP Timeout or login time-out error occurs when you connect to SQL Server 2017 using Integrated Authentication SQL Engine All
12677802 4490138 FIX: Filtered NCI over a CCI may not be maintained when the table is updated in a way that none of the key or included columns of the NCI are changed in SQL Server 2016 and 2017 SQL performance All
12673173 4490140 FIX: Stack Dump occurs in the change tracking cleanup process in SQL Server 2016 and 2017 SQL Engine Windows
12672571 4490142 FIX: Truncation error when TF 460 is enabled and you use INSERT INTO table variable in ELSE block in SQL Server 2017 SQL Engine All
12700549 4490144 Improvement: New XEvent sqlserver.security_authentication_perf_interrogate_login is added in SQL Server 2017 SQL security Linux
12700550 4490145 Improvement: New mssql-conf option network.enablekdcfromkrb5 is added in SQL Server 2017 SQL security Linux
12695517 4490379 FIX: TCP Timeout or login time-out error occurs when you connect to SQL Server 2017 by using Integrated Authentication SQL security Linux
12651915 4490799 FIX: DBCC STACKDUMP doesn't generate dump file for SQL Server 2017 on Linux starting from SQL Server 2017 CU9 to CU13 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

    ERROR: at System.Diagnostics.Process.Kill() at Microsoft.Support.SEOInfrastructureService.PhantomJS.PhantomJSRunner.WaitForExit(Process process, Int32 waitTime, StringBuilder dataBuilder, Boolean isTotalProcessTimeout)New URL: about:blank