Nach dem Verschieben der Standortdatenbank kann kein Softwareupdatepaket oder keine Anwendung erstellt werden.

Dieser Artikel bietet eine Lösung für das Problem, dass Sie keine Softwareupdategruppe, ein Softwareupdatepaket oder eine Anwendung erstellen können, nachdem Sie die Configuration Manager SQL Server Standortdatenbank verschoben haben.

Ursprüngliche Produktversion: Microsoft System Center 2012 Configuration Manager
Ursprüngliche KB-Nummer: 2709082

Symptome

Nachdem Sie die Configuration Manager SQL Server Standortdatenbank auf ein anderes Laufwerk verschoben haben und dann versuchen, eine Softwareupdategruppe, ein Softwareupdatepaket oder eine Anwendung zu erstellen, schlägt der Vorgang fehl, und diese Protokolleinträge werden in der SMSProv.log-Datei protokolliert:

*** Unbekannter SQL-Fehler! SMS-Anbieter 14-03-2012 07:56:47 2016 (0x07E0)
*~*~*** Unbekannter SQL-Fehler! ThreadID: 2016 , DbError: 50000 , Sev: 16~*~* SMS-Anbieter 14-03-2012 07:56:47 2016 (0x07E0)
[24000][0][Microsoft][SQL Server Native Client 10.0]Ungültiger Cursorzustand SMS-Anbieter 14-03-2012 07:56:48 2016 (0x07E0)
*~*~[24000][0][Microsoft][SQL Server Native Client 10.0]Ungültiger Cursorzustand *** Unbekannter SQL-Fehler! ThreadID: 2016 , DbError: 0 , Sev: 0~*~* SMS-Anbieter 14-03-2012 07:56:48 2016 (0x07E0)

SQL Server Profiler enthält die folgenden zusätzlichen Details:

Fehler im Microsoft-.NET Framework beim Versuch, die Assembly-ID 65539 zu laden. Auf dem Server sind möglicherweise keine Ressourcen vorhanden, oder die Assembly ist nicht mit PERMISSION_SET = EXTERNAL_ACCESS oder UNSAFE vertraut. Führen Sie die Abfrage erneut aus, oder lesen Sie die Dokumentation, um zu erfahren, wie Die Probleme mit der Assemblyvertrauensstellung gelöst werden. Weitere Informationen zu diesem Fehler:
System.IO.FileLoadException: Datei oder Assembly "cryptoutility, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" oder eine ihrer Abhängigkeiten konnte nicht geladen werden. Ein Fehler im Zusammenhang mit der Sicherheit ist aufgetreten. (Ausnahme von 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)
bei System.Reflection.Assembly.Load(String assemblyString)

Ursache

Dieses Problem kann auftreten, wenn die SQL Server MDF- und LDF-Dateien der Standortdatenbank auf ein anderes Laufwerk verschoben werden. Dieses Problem kann beispielsweise auftreten, wenn die Configuration Manager Standortdatenbank unter C:\Program files\MSSQL server\dataerstellt wird und dann die MDF- und LDF-Dateien in verschoben werden, um D:\CM2012DB Speicherplatz zu sparen.

Hinweis

Dies ist ein unterstützter SQL Server Vorgang. Weitere Informationen finden Sie unter Verschieben einer Datenbank mithilfe von Trennen und Anfügen (Transact-SQL).

Dieses Problem tritt auf, weil die TRUSTWORTHY-Datenbankeigenschaft der Standortdatenbank, die standardmäßig auf ON festgelegt ist, beim Trennen und Erneuten Anfügen der Datenbank auf OFF zurückgesetzt wird. Wenn die Datenbank nicht so konfiguriert ist, dass die -Eigenschaft auf ON festgelegt ist, <kann ConfigMgr_Install>\bin\x64\CryptoUtility.dll nicht in SQL Server geladen werden, und Sie erhalten die Fehlermeldung "Ungültiger Cursorzustand", die im Abschnitt Symptome erwähnt wird.

Lösung

Gehen Sie wie folgt vor, um das Problem zu beheben:

  1. Setzen Sie die Eigenschaft manuell auf EIN zurück, indem Sie den folgenden Befehl für Ihre Configuration Manager-Datenbank ausführen:

     ALTER DATABASE <ConfigMgr DB>
     SET TRUSTWORTHY ON
    
  2. Stellen Sie sicher, dass die verschobene Datenbank im Besitz des SA-Kontos ist.

  3. Stellen Sie sicher, dass der Wert Isolationsstufe auf READ_COMMITTED_SNAPSHOT festgelegt ist. Führen Sie den folgenden Befehl aus, um diesen Wert zu überprüfen:

     DBCC USEROPTIONS
    
  4. Wenn der Wert isolation level auf einen anderen Wert als READ COMMITTED SNAPSHOT festgelegt ist, führen Sie die folgenden Befehle in der angegebenen Reihenfolge aus:

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

Hinweis

Möglicherweise müssen Sie die SQL Server Datenbank in den Einzelbenutzermodus ändern, bevor Sie die Befehle in Schritt 4 ausführen. Weitere Informationen zum Trennen und Anfügen einer Datenbank in SQL Server finden Sie unter Database Detach and Attach (SQL Server).

Weitere Informationen

Eine iDNA-Ablaufverfolgung (Time Travel) des SQL Server Prozesses zeigt die folgende Ausnahme:

Anzahl der Ausnahmen dieses Typs: 3
Exception MethodTable: 000007fef2524e30
Ausnahmeobjekt: 0000000201027798
Ausnahmetyp: System.IO.FileLoadException
Meldung: Die Datei oder Assembly "cryptoutility, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" oder eine ihrer Abhängigkeiten konnte nicht geladen werden. Ein Fehler im Zusammenhang mit der Sicherheit ist aufgetreten. (Ausnahme von HRESULT: 0x8013150A)
InnerException: <keine>
StackTrace (generiert):
SP-IP-Funktion
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