Can’t create a software update package or application after moving the site database

Cet article fournit une solution au problème de non-création d’un groupe de mises à jour logicielles, d’un package de mise à jour logicielle ou d’une application après avoir SQL Server base de données de site.

Version du produit d’origine :   Microsoft System Center Configuration Manager 2012
Numéro de la ko d’origine :   2709082

Symptômes

Après avoir fait passer la base de données de site Configuration Manager SQL Server sur un autre lecteur, puis essayé de créer un groupe de mises à jour logicielles, un package de mise à jour logicielle ou une application, l’opération échoue et ces entrées de journal sont enregistrées dans le fichier SMSProv.log :

*** *** Erreur SQL inconnue ! Fournisseur SMS 14-03-2012 07:56:47 2016 (0x07E0)
*~*~*** Erreur SQL inconnue ! ThreadID : 2016 , DbError: 50000 , Sev: 16~ * ~ * SMS Provider 14-03-2012 07:56:47 2016 (0x07E0)
[24000][0][Microsoft][SQL Server Native Client 10.0]Invalid cursor state SMS Provider 14-03-2012 07:56:48 2016 (0x07E0)
*~*~[24000][0][Microsoft][SQL Server Native Client 10.0]Invalid cursor state * ** Unknown SQL Error! ThreadID : 2016 , DbError: 0 , Sev: 0~ * ~ * SMS Provider 14-03-2012 07:56:48 2016 (0x07E0)

SQL Server Profiler fournit les informations supplémentaires suivantes :

Une erreur s’est produite dans le .NET Framework Microsoft lors de la tentative de chargement de l’ID d’assembly 65539. Il se peut que le serveur manque de ressources ou que l’assembly ne soit pas approuvé avec PERMISSION_SET = EXTERNAL_ACCESS ou UNSAFE. Exécutez à nouveau la requête ou consultez la documentation pour voir comment résoudre les problèmes d’confiance de l’assembly. Pour plus d’informations sur cette erreur :
System.IO.FileLoadException: Could not load file or assembly 'cryptoutility, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. Une erreur relative à la sécurité s’est produite. (Exception de HRESULT : 0x8013150A)
System.IO.FileLoadException :
at System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
at System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
at System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
at System.Reflection.Assembly.Load(String assemblyString)

Cause

Ce problème peut se produire si les fichiers MDF SQL Server base de données de sites et LDF sont déplacés vers un autre lecteur. Par exemple, ce problème peut se produire si la base de données de site Configuration Manager est créée sur , puis que les fichiers MDF et LDF sont déplacés pour économiser de C:\Program files\MSSQL server\data D:\CM2012DB l’espace.

Notes

Il s’agit d’une opération SQL Server prise en charge. Pour plus d’informations, voir Move a Database Using Detach and Attach (Transact-SQL).

Ce problème se produit car la propriété de base de données TRUSTWORTHY de la base de données de site qui est définie sur ON par défaut est réinitialisée sur OFF lorsque vous détachez et rattachez la base de données. Lorsque la base de données n’est pas configurée pour que la propriété soit définie sur ON, \bin\x64\CryptoUtility.dll ne parvient pas à se charger dans SQL Server et vous recevez le message d’erreur d’état du curseur non valide mentionné dans la <ConfigMgr_Install> section Symptômes.

Résolution

Pour résoudre ce problème, suivez les étapes suivantes :

  1. Réinitialisez manuellement la propriété sur ON en exécutant cette commande sur votre base de données Configuration Manager :

     ALTER DATABASE <ConfigMgr DB>
     SET TRUSTWORTHY ON
    
  2. Assurez-vous que la base de données qui a été déplacée appartient au compte SA.

  3. Assurez-vous que la valeur Niveau d’isolation est définie sur READ_COMMITTED_SNAPSHOT. Pour vérifier cette valeur, exécutez la commande ci-après :

     DBCC USEROPTIONS
    
  4. Si la valeur du niveau d’isolation est définie sur autre chose que READ COMMITTED SNAPSHOT, exécutez les commandes suivantes dans l’ordre donné :

    ALTER DATABASE <ConfigMgr DB>
    SET ALLOW_SNAPSHOT_ISOLATION ON
    
    ALTER DATABASE <ConfigMgr DB>
    SET READ_COMMITTED_SNAPSHOT ON
    

Notes

Avant d’exécuter les commandes à l’étape 4, vous de SQL Server la base de données d’utilisateurs en mode utilisateur unique. Pour plus d’informations sur la façon de détacher et d’attacher une base de données dans SQL Server, voir Database Detach and Attach (SQL Server).

Plus d’informations

Un suivi iDNA (Time Travel) du processus SQL Server montre l’exception suivante :

Nombre d’exceptions de ce type : 3
Exception MethodTable: 000007fef2524e30
Objet Exception : 0000000201027798
Type d’exception : System.IO.FileLoadException
Message : Le fichier ou l’assembly « cryptoutility, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 » ou l’une de ses dépendances n’a pas pu être chargé. Une erreur relative à la sécurité s’est produite. (Exception de HRESULT : 0x8013150A)
InnerException : <none>
StackTrace (généré) :
SP IP Function
00000000204F8DC0 0000000000000001
System.Reflection.Assembly._nLoad(System.Reflection.AssemblyName, System.String,
System.Security.Policy.Evidence, System.Reflection.Assembly, System.Threading.StackCrawlMark ByRef, Boolean, Boolean)
00000000204F8DC0 000007FEF23DBF61
System.Reflection.Assembly.InternalLoad(System.Reflection.AssemblyName, System.Security.Policy.Evidence, System.Threading.StackCrawlMark ByRef, Boolean)
00000000204F8E50 000007FEF23DC127 System.Reflection.Assembly.InternalLoad(System.String, System.Security.Policy.Evidence, System.Threading.StackCrawlMark ByRef, Boolean)
00000000204F8EB0 000007FEF2443A54 System.Reflection.Assembly.Load(System.String)
00000000204F8EF0 000007FF002D9FF7
System.Data.SqlServer.Internal.SqlAppDomain.LoadRawAssembly(Char*, Int32, IntPtr ByRef,
System.Data.SqlServer.Internal.EClrReturnCode ByRef