サイト データベースの移動後にソフトウェア更新プログラム パッケージまたはアプリケーションを作成できない

この記事では、Configuration Manager SQL Server サイト データベースを移動した後にソフトウェア更新プログラム グループ、ソフトウェア更新プログラム パッケージ、またはアプリケーションを作成できない問題の解決策について説明します。

元の製品バージョン:Microsoft System Center 2012 Configuration Manager
元の KB 番号: 2709082

現象

Configuration Manager SQL Server サイト データベースを別のドライブに移動した後、ソフトウェア更新プログラム グループ、ソフトウェア更新プログラム パッケージ、またはアプリケーションを作成しようとすると、操作が失敗し、これらのログ エントリがSMSProv.log ファイルに記録されます。

*** 不明な SQL エラー! SMS プロバイダー 14-03-2012 07:56:47 2016 (0x07E0)
*~*~*** 不明な SQL エラー! ThreadID : 2016 、 DbError: 50000 、Sev: 16~*~* SMS プロバイダー 14-03-2012 07:56:47 2016 (0x07E0)
[24000][0][Microsoft][SQL Server Native Client 10.0]カーソル状態が無効な SMS プロバイダー 14-03-2012 07:56:48 2016 (0x07E0)
*~*~[24000][0][Microsoft][SQL Server Native Client 10.0]カーソルの状態が無効 *** 不明な SQL エラー! ThreadID: 2016 、DbError: 0、Sev: 0~*~* SMS プロバイダー 14-03-2012 07:56:48 2016 (0x07E0)

SQL Server Profilerでは、次の追加の詳細が提供されます。

アセンブリ ID 65539 の読み込み中に、Microsoft .NET Frameworkでエラーが発生しました。 サーバーがリソース不足であるか、アセンブリが PERMISSION_SET = EXTERNAL_ACCESS または UNSAFE で信頼されていない可能性があります。 クエリをもう一度実行するか、ドキュメントチェックして、アセンブリ信頼の問題を解決する方法を確認します。 このエラーの詳細については、次を参照してください。
System.IO.FileLoadException: ファイルまたはアセンブリ 'cryptoutility, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' またはその依存関係の 1 つを読み込めませんでした。 セキュリティに関連するエラーが発生しました。 (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)

原因

この問題は、SQL Server サイト データベース MDF ファイルと LDF ファイルが別のドライブに移動された場合に発生する可能性があります。 たとえば、この問題は、Configuration Manager サイト データベースが で作成された後、C:\Program files\MSSQL server\dataMDF ファイルと LDF ファイルが移動して領域を節約する場合にD:\CM2012DB発生する可能性があります。

注:

これは、サポートされているSQL Server操作です。 詳細については、「 デタッチとアタッチを使用してデータベースを移動する (Transact-SQL)」を参照してください。

この問題は、データベースをデタッチして再アタッチするときに、既定で ON に設定されているサイト データベースの信頼できるデータベース プロパティが OFF にリセットされるために発生します。 プロパティを ON に設定するようにデータベースが構成されていない場合、<\bin\x64\CryptoUtility.dll ConfigMgr_Install> SQL Serverへの読み込みに失敗し、「現象」セクションに記載されている無効なカーソル状態エラー メッセージが表示されます。

解決方法

この問題を解決するには、次の手順を実行します。

  1. Configuration Manager データベースに対して次のコマンドを実行して、プロパティを ON に手動でリセットします。

     ALTER DATABASE <ConfigMgr DB>
     SET TRUSTWORTHY ON
    
  2. 移動されたデータベースが SA アカウントによって所有されていることを確認します。

  3. [分離レベル] の値が [READ_COMMITTED_SNAPSHOT] に設定されていることを確認します。 この値をチェックするには、次のコマンドを実行します。

     DBCC USEROPTIONS
    
  4. [分離レベル] の値が READ COMMITTED SNAPSHOT 以外の値に設定されている場合は、指定した順序で次のコマンドを実行します。

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

注:

手順 4 でコマンドを実行する前に、SQL Server データベースをシングル ユーザー モードに変更する必要がある場合があります。 SQL Serverでデータベースをデタッチしてアタッチする方法の詳細については、「データベースのデタッチとアタッチ (SQL Server)」を参照してください。

詳細

SQL Server プロセスの iDNA (Time Travel) トレースは、次の例外を示しています。

この種類の例外の数: 3
Exception MethodTable: 000007fef2524e30
例外オブジェクト: 0000000201027798
例外の種類: System.IO.FileLoadException
メッセージ: ファイルまたはアセンブリ 'cryptoutility, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' またはその依存関係の 1 つを読み込めませんでした。 セキュリティに関連するエラーが発生しました。 (HRESULT からの例外: 0x8013150A)
InnerException: <none>
StackTrace (生成):
SP IP 関数
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)
000000000204F8EB0 000007FEF2443A54 System.Reflection.Assembly.Load(System.String)
000000000204F8EF0 000007FF002D9FF7
System.Data.SqlServer.Internal.SqlAppDomain.LoadRawAssembly(Char*, Int32, IntPtr ByRef,
System.Data.SqlServer.Internal.EClrReturnCode ByRef