Jean-Sébastien DUCHENE Blog's

Actualité, Tips, Articles sur l'ensemble des Technologies Microsoft (Microsoft Intune, ConfigMgr, Microsoft Defender, Microsoft Purview, Microsoft Azure, Windows...)

L’équipe ConfigMgr a publié un billet concernant des erreurs de réplication survenant dans System Center 2012 R2 Configuration Manager. Le problème survient après avoir mis à jour le CAS à partir de ConfigMgr 2012 SP1 CU2 ou CU3.

Sur les sites enfants, le fichier RcmCtrl.log affiche les erreurs suivantes :

ERROR: Exception message: [A .NET Framework error occurred during execution of user-defined routine or aggregate "spModifyGlobalTable": ~~System.Data.SqlClient.SqlException: ALTER TABLE only allows columns to be added that can contain nulls, or have a DEFAULT definition specified, or the column being added is an identity or timestamp column, or alternatively if none of the previous conditions are satisfied the table must be empty to allow addition of this column. Column 'MessageTime' cannot be added to non-empty table 'PullDPResponse' because it does not satisfy these conditions.~~System.Data.SqlClient.SqlException: ~~   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)~~   at System.Data.SqlClient.SqlDataReaderSmi.InternalNextResult(Boolean ignoreNonFatalMessages)~~   at System.Data.SqlClient.SqlDataReaderSmi.NextResult()~~   at System.Data.SqlClient.SqlCommand.RunExecuteReaderSmi(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream)~~   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)~~   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)~~   at System.Data.SqlClient.SqlCommand.ExecuteScalar()~~   at Microsoft.ConfigurationManager.DataReplicationService.DatabaseOperation.ExecuteScalar(String commandText, List`1 commandParameters)~~   at Microsoft.ConfigurationManager.DataReplicationService.GlobalSchemaChanges.ApplyChangesToTable(DrsLogging drsLogging, String tableName, String tableOwner, List`1 columns, DatabaseOperation databaseOperation, String procedureName)~~   at Microsoft.ConfigurationManager.DataReplicationService.GlobalSchemaChanges.CreateOrUpdateGlobalTable(DrsLogging drsLogging, String tableName, List`1 columns, List`1 triggers, Int32 replicationId, DatabaseOperation databaseOperation, String procedureName)~~   at Microsoft.ConfigurationManager.DataRe...]                SMS_REPLICATION_CONFIGURATION_MONITOR

Ce problème survient à cause de l’introduction de la table PullDPResponse dans le CU2/CU3. Cette dernière ne contient pas la colonne MessageTime introduite dans ConfigMgr 2012 R2. Elle n’autorise pas les valeurs NULL et la réplication échoue si des données étaient présente avant la mise à jour.

L’autre problème c’est que lorsque vous essayez de mettre à jour les sites enfants, le vérificateur de prérequis échoue car la réplication entre le CAS et le site n’est pas active.

Le problème a été résolu pour tous les nouveaux téléchargement des sources de mise à jour ConfigMgr fait après le 14 novembre 2013 avec l'installeur.

Pour les clients qui sont déjà impactés par ce problème, vous pouvez exécutez le script SQL suivant sur toutes les bases de données des sites enfants :

IF NOT EXISTS(select * from sys.columns where [name] = N''MessageTime'' and [object_id] = OBJECT_ID(N''PullDPResponse''))

    BEGIN

        ALTER TABLE PullDPResponse ADD MessageTime datetime NOT NULL

        CONSTRAINT PullDPResponse_MessageTime DEFAULT (GetUTCDate())

    END

IF NOT EXISTS (SELECT * FROM sys.default_constraints where name = ''PullDPResponse_MessageTime'')

    BEGIN

        ALTER TABLE PullDPResponse ADD CONSTRAINT PullDPResponse_MessageTime DEFAULT (GetUTCDate()) FOR MessageTime

    END

Source : http://blogs.technet.com/b/configmgrteam/archive/2013/11/26/replication-errors-in-system-center-2012-r2-configuration-manager.aspx

Facebook Like