たちまち。

即席で役に立つこと。

Dynamics365 8.2から9へのアップグレードでFileNotFoundExceptionエラー

とあるDynamics365の8.2のDBを9.0へアップグレードしようとした(具体的には8.2の組織DBダンプを9.0用のSQLServerに入れ、展開マネージャーで組織のインポートをした)ところ、以下のようなエラーが発生。

14:10:34|  Error| ID=fc04d08f-5b1e-e711-80c4-000c29026f03 の組織のアップグレードが次の例外で失敗しました:
System.Exception: Error.ActionFailed Microsoft.Crm.Tools.Admin.UpgradeDatabaseAction ---> Microsoft.Crm.CrmException: Error in Action: Bin\Microsoft.Crm.DataUpgrade.dll:TrackCustomDatabaseObjects on attempt 3. System.Reflection.TargetInvocationException: 呼び出しのターゲットが例外をスローしました。 ---> System.IO.FileNotFoundException: ファイルまたはアセンブリ 'Microsoft.SqlServer.ConnectionInfo, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91'、またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。
   場所 Microsoft.Crm.DataUpgrade.DatabaseObjectChangeTracker.GenerateScriptForIndex(String tableName, String indexName, ISqlExecutionContext sqlContext)
   場所 Microsoft.Crm.DataUpgrade.DatabaseObjectChangeTracker.InsertObjectTrackerTableInput(List`1 inputData, String tableName, ISqlExecutionContext sqlContext)
   場所 Microsoft.Crm.DataUpgrade.DatabaseChangeTracker.TrackCustomDatabaseObjects()
   --- 内部例外スタック トレースの終わり ---
   場所 System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
   場所 System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
   場所 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   場所 System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
   場所 Microsoft.Crm.Setup.Database.DllMethodAction.Execute(Guid organizationId, Nullable`1 operationType)
   場所 Microsoft.Crm.Setup.Database.DllMethodAction.Execute(Guid organizationId)
   場所 Microsoft.Crm.Setup.Database.DatabaseInstaller.<>c__DisplayClass85_1.<ExecuteReleases>b__0()
   場所 Microsoft.Crm.Setup.Database.DatabaseInstaller.<>c__DisplayClass85_1.<ExecuteReleases>b__0()
   場所 Microsoft.PowerApps.CoreFramework.ActivityLoggerExtensions.Execute(ILogger logger, EventId eventId, ActivityType activityType, Action action)
   場所 Microsoft.Xrm.Telemetry.XrmTelemetryExtensions.Execute(ILogger logger, XrmTelemetryActivityType activityType, Action action)
   場所 Microsoft.Crm.Setup.Database.DatabaseInstaller.ExecuteReleases(ReleaseInfo releaseInfo, Boolean isInstall)
   場所 Microsoft.Crm.Setup.Database.DatabaseInstaller.installInternal(Boolean isInstall, Int32 languageCode)
   場所 Microsoft.Crm.Setup.Database.DatabaseInstaller.<>c__DisplayClass92_0.<Install>b__0()
   場所 Microsoft.PowerApps.CoreFramework.ActivityLoggerExtensions.Execute(ILogger logger, EventId eventId, ActivityType activityType, Action action)
   場所 Microsoft.Xrm.Telemetry.XrmTelemetryExtensions.Execute(ILogger logger, XrmTelemetryActivityType activityType, Action action)
   場所 Microsoft.Crm.Setup.Database.DatabaseInstaller.<>c__DisplayClass93_0.<Install>b__0()
   場所 Microsoft.PowerApps.CoreFramework.ActivityLoggerExtensions.Execute(ILogger logger, EventId eventId, ActivityType activityType, Action action)
   場所 Microsoft.Xrm.Telemetry.XrmTelemetryExtensions.Execute(ILogger logger, XrmTelemetryActivityType activityType, Action action)
   場所 Microsoft.Crm.Tools.Admin.InstallDatabaseAction.Do(IDictionary parameters)
   場所 Microsoft.Crm.Setup.Shared.CrmAction.ExecuteActionHelper(CrmAction action, IDictionary parameters, Boolean undo)
   --- 内部例外スタック トレースの終わり ---
   場所 Microsoft.Crm.Setup.Shared.CrmAction.ExecuteActionHelper(CrmAction action, IDictionary parameters, Boolean undo)
   場所 Microsoft.PowerApps.CoreFramework.ActivityLoggerExtensions.Execute(ILogger logger, EventId eventId, ActivityType activityType, Action action)
   場所 Microsoft.Xrm.Telemetry.XrmTelemetryExtensions.Execute(ILogger logger, XrmTelemetryActivityType activityType, Action action)
   場所 Microsoft.PowerApps.CoreFramework.ActivityLoggerExtensions.Execute(ILogger logger, EventId eventId, ActivityType activityType, Action action)
   場所 Microsoft.Xrm.Telemetry.XrmTelemetryExtensions.Execute(ILogger logger, XrmTelemetryActivityType activityType, Action action)
   場所 Microsoft.Crm.Setup.Shared.Installer.<>c__DisplayClass83_0.<DoAction>b__0()
   場所 Microsoft.PowerApps.CoreFramework.ActivityLoggerExtensions.Execute(ILogger logger, EventId eventId, ActivityType activityType, Action action)
   場所 Microsoft.Xrm.Telemetry.XrmTelemetryExtensions.Execute(ILogger logger, XrmTelemetryActivityType activityType, Action action)
   場所 Microsoft.Crm.Setup.Shared.Installer.<>c__DisplayClass67_0.<Install>b__0()
   場所 Microsoft.PowerApps.CoreFramework.ActivityLoggerExtensions.Execute(ILogger logger, EventId eventId, ActivityType activityType, Action action)
   場所 Microsoft.Xrm.Telemetry.XrmTelemetryExtensions.Execute(ILogger logger, XrmTelemetryActivityType activityType, Action action)
   場所 Microsoft.Crm.Tools.Admin.OrganizationOperation.Install(IDictionary stateSaver)
   場所 Microsoft.Crm.Tools.Admin.OrganizationUpgrader.Install(IDictionary stateSaver)
   場所 Microsoft.Crm.Tools.Admin.OrganizationOperation.Execute()
   場所 Microsoft.Crm.Tools.Admin.OrganizationUpgrader.Execute()
   場所 Microsoft.Crm.Tools.Admin.ImportOrganizationInstaller.ImportAndUpgrade(OrganizationInfo organizationInfo)

原因は以下の一文にある。

ファイルまたはアセンブリ 'Microsoft.SqlServer.ConnectionInfo, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91'、またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。

これは、SQL システムの CLR 型(SQLSystemClrTypes)およびSQL Server 管理オブジェクト(SharedManagementObjects)が入っていないことが要因となっている。

解決方法

これら2つのモジュールはDynamics365の初回セットアップ時に必須となるので入れている筈なのだが、ログに記載されているのはバージョンが異なる。11.0.0.0、つまりSQLServer2012用のものが必要であることが肝。

当該バージョンのモジュールは以下からダウンロード可能である。

・SystemClrTypes

32bit http://go.microsoft.com/fwlink/?LinkID=239643&clcid=0x409

64bit http://go.microsoft.com/fwlink/?LinkID=239644&clcid=0x409

・SharedManagementObject

32bit http://go.microsoft.com/fwlink/?LinkID=239658&clcid=0x409

64bit http://go.microsoft.com/fwlink/?LinkID=239659&clcid=0x409

これらをインストールした後、再起動して再度実行したところ、エラーが解消された。

参考にした英語フォーラム:

https://community.dynamics.com/crm/f/microsoft-dynamics-crm-forum/300597/upgrade-on-premise-8-2-to-9-0-errors