Sql-server – Failed to update SQL Server 2008 R2 RTM to SP3

service-packsql-server-2008-r2windows-server

I'm trying to update SQL Server 2008 R2 RTM to SP3 by running SQLServer2008R2SP3-KB2979597-x64-ENU.exe, on Windowns Server 2008 R2 SP1.

It failed with the following error in the log,

2015-11-26 10:24:01 SQLEngine: : Version-copying file from 'd:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Install\sqlscriptdowngrade.dll' to 'd:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Binn\sqlscriptdowngrade.dll'.
2015-11-26 10:24:01 SQLEngine: : Failed to version-copy file 'd:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Install\sqlscriptdowngrade.dll' to 'd:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Binn\sqlscriptdowngrade.dll'. Exception data is: System.UnauthorizedAccessException: Access to the path 'd:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Binn\sqlscriptdowngrade.dll' is denied.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.File.InternalCopy(String sourceFileName, String destFileName, Boolean overwrite)
at Microsoft.SqlServer.Configuration.SqlEngine.Globals.VersionCopy(ServiceContainer context, String source, String target).
2015-11-26 10:24:01 Slp: Configuration action failed for feature SQL_Engine_Core_Inst during timing ConfigRC and scenario ConfigRC.
2015-11-26 10:24:01 Slp: Access to the path 'd:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Binn\sqlscriptdowngrade.dll' is denied.
2015-11-26 10:24:01 Slp: The configuration failure category of current exception is ConfigurationFailure
2015-11-26 10:24:01 Slp: Configuration action failed for feature SQL_Engine_Core_Inst during timing ConfigRC and scenario ConfigRC.
2015-11-26 10:24:01 Slp: System.UnauthorizedAccessException: Access to the path 'd:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Binn\sqlscriptdowngrade.dll' is denied.
2015-11-26 10:24:01 Slp:
at Microsoft.SqlServer.Configuration.SqlEngine.Globals.VersionCopy(ServiceContainer context, String source, String target)
2015-11-26 10:24:01 Slp:
at Microsoft.SqlServer.Configuration.SqlEngine.SqlEngineSetupPrivate.Patch_ConfigRC(EffectiveProperties properties)
at Microsoft.SqlServer.Configuration.SqlEngine.SqlEngineSetupPrivate.Patch(ConfigActionTiming timing, Dictionary`2 actionData, PublicConfigurationBase spcb)
at Microsoft.SqlServer.Configuration.SqlConfigBase.SlpConfigAction.ExecuteAction(String actionId)
at Microsoft.SqlServer.Configuration.SqlConfigBase.SlpConfigAction.Execute(String actionId, TextWriter errorStream)
2015-11-26 10:24:01 Slp: Exception: System.UnauthorizedAccessException.
2015-11-26 10:24:01 Slp: Source: Microsoft.SqlServer.Configuration.SqlServer_ConfigExtension.
2015-11-26 10:24:01 Slp: Message: Access to the path 'd:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Binn\sqlscriptdowngrade.dll' is denied..

I get the exact same error every time I run setup and even after rebooting.

I checked the path d:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Binn\ it's owned by SYSTEM, and regardless of whether I ran the setup as admin, in TaskManager it's still showing that setup100.exe is running under by account. I tried and can't rename the file, unless if I take over the ownership of the folder, though I worried that doing so will break SQL Server.

Any idea what went wrong?

EDIT: I've compared the same folder on another DB server with the same installation (not scheduled to update SP3 yet), I can rename the sqlscriptdowngrade.dll file after an admin prompt. The permission for the folder is the same for both machine.

Best Answer

I saw a SQL update in Windows Update pulled from our WSUS server, Security update for SQL Server 2008 R2 Service Pack 3 and not realizing that it's an cumulative update, it managed to update the SQL server to 10.50.6220 (SP3 = 10.50.6000) without any error. I'm guessing probably some issue with the original SP3 setup. I'll update here again if I face any issue when we schedule to update the other SQL server.