You are trying to run a repair on an SMP server that had an issue while trying to upgrade to a recent version of ITMS.
While trying to repair the previous ITMS installation, the following error occurred while trying to configure PluggableProtocols.config:
Failed to install the product from the file: F:\PluggableProtocols\Config\PluggableProtocols.config
View or function 'String' is not updatable because the modification affects multiple base tables.
Failed to install the product from the file: F:\PluggableProtocols\Config\PluggableProtocols.config
View or function 'String' is not updatable because the modification affects multiple base tables.
[System.Data.SqlClient.SqlException @ .Net SqlClient Data Provider]
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at Altiris.NS.DataAccessLayer.Implementation.Altiris_PluggableProtocols_DataAccessLayerConnectionProfileDataAccessLayer.spRemoveExtraStrings()
at Altiris.PluggableProtocols.PluggableProtocolsInstallation.OnInstallProductPostDatabase(XmlNode installationNode)
at Altiris.NS.StandardItems.Product.ProductInstallation.InstallProduct_Database(XmlNode installationNode)
at Altiris.NS.StandardItems.Product.ProductInstallation.OnInstallProduct(XmlNode installationNode)
at Altiris.PluggableProtocols.PluggableProtocolsInstallation.OnInstallProduct(XmlNode installationNode)
at Altiris.NS.StandardItems.Product.ProductInstallation.InstallProduct()
at Altiris.NS.Installation.ProductConfigurationWorker.ConfigureProductInternal(String configFile, Boolean ownsProgressContext, SerializationMode serializationMode)
SQL Exception details: code=4405, line=3, procedure=spRemoveExtraStrings
Exception logged from:
at Altiris.NS.Installation.ProductConfigurationWorker.ConfigureProductInternal(String, Boolean, Altiris.NS.Serialization.SerializationMode)
at Altiris.NS.Installation.ProductConfigurationWorker.ConfigureProductBatchInternal()
at Altiris.NS.Installation.ProductConfigurationWorker.ConfigureProductBatch()
at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, Object, Boolean)
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, Object, Boolean)
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, Object)
at System.Threading.ThreadHelper.ThreadStart()
-----------------------------------------------------------------------------------------------------
Date: 26/12/2019 2:05:00 p. m., Tick Count: 185412734 (2.03:30:12.7340000), Size: 3,77 KB
Process: AeXSvc (6092), Thread ID: 54, Module: Altiris.NS.dll
Priority: 1, Source: Altiris.NS.Installation.ProductConfigurationWorker.ConfigureProductInternal
Similar behavior may happen with:
Failed to install product.
View or function 'dbo.TaskOutputPropertyValue' is not updatable because the modification affects multiple base tables.
[System.Data.SqlClient.SqlException @ .Net SqlClient Data Provider]
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at Altiris.NS.DataAccessLayer.DatabaseAbilities.ExecuteNonQuery(String sql)
at Altiris.NS.ContextManagement.AdminDatabaseContext.<>c__DisplayClass9`1.<PerformTransactedDeadlockRetry>b__8(IDatabaseContext ctx)
at Altiris.Database.DatabaseContext`1.RetryAction(Int32 retries, Boolean transacted, Getter`1 getContext, Action`1 action, Action`1 retry, DeadlockRetryArgs& re, Exception& exception, Boolean inTransaction)
at Altiris.Database.DatabaseContext`1.PerformWithDeadlockRetryHelper(Int32 retries, Boolean inTransaction, Getter`1 getContext, Action`1 action, Action`1 retry, Boolean transacted)
at Altiris.Database.DatabaseContext`1.PerformTransactedDeadlockRetry(Int32 retries, Getter`1 getContext, Action`1 action, Action`1 retry)
at Altiris.NS.ItemManagement.ItemHelper.ImportSqlNodes(XmlNodeList nodes, Boolean installing, Boolean resetConnection)
at Altiris.NS.Installation.Bulk.Installers.Core.CoreInstaller.InstallSqlNodes(XmlNodeList nodes, Boolean useBulkInstaller)
at Altiris.NS.Installation.Bulk.Installers.Core.CoreInstaller.InstallSqlNodes(XmlNodeList sqlNodes)
at Altiris.NS.StandardItems.Product.ProductInstallation.Execute(String taskKey, String description, XmlNode node, String xPath, Action`1 actus)
at Altiris.NS.StandardItems.Product.ProductInstallation.InstallProduct_Database(XmlNode installationNode)
at Altiris.NS.StandardItems.Product.ProductInstallation.OnInstallProduct(XmlNode installationNode)
at Altiris.TaskManagement.TaskManagementInstallation.OnInstallProduct(XmlNode installationNode)
at Altiris.NS.StandardItems.Product.ProductInstallation.InstallProduct()
SQL Exception details: code=4405, line=13, procedure=CtsInsertOutputProperty
ITMS 8.x
In this particular instance, due to the original upgrade failure to a newer ITMS version, the "String" table got updated to be a "View".
This caused "spRemoveExtraStrings" called during the PluggableProtocols configuration process to fail. This "pRemoveExtraStrings" calls:
Since this is an edge case due to a faulty upgrade, you are better off restoring your database to a point right before the upgrade attempt (you may need to restore your SMP as well to the same version as the database).
In case you can't restore, one approach to address this issue is to adjust "String" from a View to a Table type:
Drop this view:
drop view String
Note:
If you wish, make a copy of this "String" view as "String2" in case it is needed later on:
CREATE VIEW [dbo].[String2]
AS
SELECT CAST( 0x0 AS uniqueidentifier ) AS [Guid],
sd.[BaseGuid],
sd.[StringRef],
cc.[Culture],
sd.[String],
CAST ( '2011-11-11' AS datetime ) AS [CreatedDate],
CAST ( '2012-12-12' AS datetime ) AS [ModifiedDate]
FROM (
SELECT ItemGuid AS [BaseGuid], CultureId, String, StringRef
FROM (
SELECT *
FROM (
SELECT ItemGuid, CultureId, CAST(s.[ItemName] AS nvarchar(1000)) AS [item.name], s.[ItemDesc] AS [item.description]
FROM dbo.ItemString s
) AS aa
) AS p
UNPIVOT
(
String FOR StringRef IN ( [item.name], [item.description] )
) AS pvt
) sd
JOIN dbo.CultureChain cc ON cc.CultureId = sd.CultureId AND cc.Culture = cc.BaseCulture
UNION ALL
SELECT CAST( 0x0 AS uniqueidentifier ) AS [Guid],
sd.[BaseGuid],
sr.StrRef AS [StringRef],
cc.[Culture],
sd.[String],
CAST ( '2011-11-11' AS datetime ) AS [CreatedDate],
CAST ( '2012-12-12' AS datetime ) AS [ModifiedDate]
FROM dbo.StringData sd
JOIN dbo.StringRef sr ON sr.StrRefId = sd.StringRefId
JOIN dbo.CultureChain cc ON cc.CultureId = sd.CultureId AND cc.Culture = cc.BaseCulture
GO