Dynamics 365 Finance + Operations セルフサービス環境へのアップグレードのトラブルシューティング

Note

コミュニティの関心グループが Yammer から Microsoft Viva Engage に移行されました。 Viva Engage コミュニティに参加し、最新のディスカッションに参加するには、「 Finance and Operations Viva Engage Community へのアクセスを要求する 」フォームに入力し、参加するコミュニティを選択します。

この記事では、Microsoft Dynamics AX 2012 から Dynamics 365 Finance + Operations (オンプレミス) セルフサービス環境へのアップグレードに関するトラブルシューティング ガイダンスを提供します。

シナリオ 1: 移行アプリで、Project-Id 値と Environment-Id 値の入力を求めるメッセージが表示される

ソリューション

アップグレードするユーザーはプロジェクトに参加し、ProjectOwnerEnvironmentAdmin、または OperationsAdmin のいずれかのロールを割り当てられる必要があります。

シナリオ 2: 移行元データベース サーバーまたはターゲット データベース サーバーの移行アプリ データベース接続に失敗しました

ソリューション

移行アプリで、データ更新の準備: 環境の設定活動 手順の手順 1 を完了します。

シナリオ 3: いずれかのパブリケーションのスナップショットが失敗し、レプリケーション モニターでエラーを追跡できます

ソリューション

SQL Server レプリケーション モニターのエージェント タブで、失敗したパブリケーションを選択します。 スナップショット エージェントを選択したまま (または右クリックして)、エージェントの開始を選択して、スナップショットを生成します。

シナリオ 4: 移行アプリでいずれかの手順が失敗し、その手順を再実行する必要がある

移行アプリでいずれかの手順が失敗し、その手順を再実行する必要がある場合は、次の手順に従います。

  1. 移行アプリを閉じます。

  2. 移行アプリ フォルダーで、データ フォルダーを探します。

  3. データ フォルダーで、ReplicationMenu.json ファイルを開きます。

  4. ReplicationMenu.json ファイルで、同じ ID シーケンスを持つすべてのメニュー オプションを表示します。 再実行するステップを見つけ、それからステータスの値を 0 に更新します。

    Important

    ReplicationMenu.json ファイルで何も変更しないでください。 さらに、ファイルを更新するときに移行アプリが実行されていないことを確認します。

  5. 移行アプリを開き、手順を再実行します。

シナリオ 5: パブリケーションを作成すると、レプリケーション ジョブが失敗し、例外が発生します。

パブリケーションを作成すると、レプリケーション ジョブは失敗し、次の例外が発生します。

例外 1:

プリンシパル "dbo" が存在しない、この種類のプリンシパルを偽装できない、またはアクセス許可がないため、データベース プリンシパルとして実行できません。 (ソース: MSSQLServer、エラー番号: 15517)
ヘルプの取得: http://help/15517

例外 2:

プロセスが 'replicationsrv\MSSQLSERVER2016' で 'sp_replcmds' を実行できませんでした。 (ソース: MSSQL_REPL、エラー番号: MSSQL_REPL20011)
ヘルプの取得: http://help/MSSQL_REPL20011

プリンシパル "dbo" が存在しない、この種類のプリンシパルを偽装できない、またはアクセス許可がないため、データベース プリンシパルとして実行できません。 (ソース: MSSQLServer、エラー番号: 15517)
ヘルプの取得: http://help/15517

ソリューション

SQL Server Management Studio (SSMS) で、クエリ ウィンドウを開き、ソース データベースに接続して、次の SQL コマンドを実行します。

EXEC sp_changedbowner 'sa'

シナリオ 6: Microsoft Dynamics Lifecycle Services の状態は "失敗" ですが、移行アプリではデータ アップグレード トリガーが成功します。

ソリューション

移行アプリで 'ds' オプションを実行します。 このオプションは、Microsoft Dynamics ライフサイクル サービス環境の状態と、すべてのステップとサブステップのデータ アップグレードの状態を読み取ります。

Note

データ アップグレードの状態とライフサイクル サービス環境の状態の両方が 失敗した場合は、「 データ レプリケーションの完了」の 手順 10 の状態が 再開に更新されます。 その後、アップグレード プロセスが失敗した時点から操作を再開できます。

シナリオ 7: 手動で実行した失敗したステップをスキップし、他の手順に進みます。

失敗した手動実行手順をスキップし、他の手順に進むには、次の手順に従います。

  1. 移行アプリを閉じます。

  2. 移行アプリ フォルダーで、データ フォルダーを探します。

  3. データ フォルダーで、ReplicationMenu.json ファイルを開きます。

  4. ReplicationMenu.json ファイルで、同じ ID シーケンスを持つすべてのメニュー オプションを表示します。 再実行するステップを見つけ、ステータスの値を 1 に更新します。 この方法で、ステップを完了としてマークします。

    Important

    ReplicationMenu.json ファイルで何も変更しないでください。 さらに、ファイルを更新するときに移行アプリが実行されていないことを確認します。

シナリオ 8: コンソール アプリの古いバージョンから新しいバージョンに移行したいとします。

古いバージョンのコンソール アプリから新しいバージョンに移行するには、次の手順に従います。

  1. コンソール アプリの最新バージョンを Lifecycle Services からダウンロードします。
  2. コンソール アプリの古いバージョンから paramsdata.txt および /Data/ReplicationMenu.json ファイルを取得し、新しいバージョンのコンソール アプリで同じパスに設定します。
  3. アプリを再実行します。

シナリオ 9: いずれかのパブリケーションのレプリケーションの状態に、2 時間以上の "スナップショットの完了を待機しています" と表示されます。

ソリューション

レプリケーション モニターで、パブリケーションを長押し (または右クリック) し、[ サブスクリプションの再初期化] を選択します。

シナリオ 10: データ アップグレードを再開する必要があります。

ソリューション

コンソール アプリがデータアップグレードの状態を更新していない可能性があります。

データのアップグレードを再開するには、次の手順に従います。

  1. コンソール アプリの状態を確認するには、[ ヘルプ ] オプションを使用します。 このオプションには、すべてのメニュー オプションが一覧表示され、現在の状態が表示されます。
  2. データ レプリケーションおよびアップグレードの実施 のステップ 10 のステータスが成功の場合、移行アプリで 'ds' オプションを実行します。 このオプションにより、データ アップグレード ステータスが更新されます。

"ds" オプションを実行すると、ライフサイクル サービス環境の状態とデータアップグレードの状態という 2 種類の状態が表示されます。

  • ケース 1: Lifecycle Services 環境の状態が失敗で、データ アップグレードの最後のステップが失敗の場合、ステップ 10 に再開オプションが表示されます。
  • ケース 2: Lifecycle Services 環境の状態が失敗で、データ アップグレードの最後のステップが完了の場合、ステップ 10 に再開オプションが表示されます。
  • ケース 3: Lifecycle Services 環境の状態が配置済みで、データ アップグレードの最後のステップが完了の場合、ステップ 10 には成功と表示されます。
  • ケース 4: Lifecycle Services 環境ステータスが配置済で、データ アップグレードの最後のステップが処理中の場合、データ アップグレード ジョブはバックグラウンドで実行されるので、ステップ 10 は成功と表示されます。

シナリオ 11: パブリケーションを作成した後、スナップショットの作成がエラーで失敗する

パブリケーションを作成すると、スナップショットの作成が失敗し、次のエラーがスローされます。

エラー メッセージ:
ソース: Microsoft.SqlServer.Smo
ターゲット サイト: Void PrefetchObjectsImpl(System.Type, Microsoft.SqlServer.Management.Smo.ScriptingPreferences)
メッセージ: データベース 'AxDB_ASIA' のプリフェッチ オブジェクトに失敗しました。
Stack: at Microsoft.SqlServer.Management.Smo.Database.PrefetchObjectsImpl(Type objectType, ScriptingPreferences scriptingPreferences)
at Microsoft.SqlServer.Replication.Snapshot.SmoScriptingManager.ObjectPrefetchControl.DoPrefetch(Database database)
at Microsoft.SqlServer.Replication.Snapshot.SmoScriptingManager.PrefetchObjects(ObjectPrefetchControl[] objectPrefetchControls)
at Microsoft.SqlServer.Replication.Snapshot.SmoScriptingManager.DoPrefetchWithRetry()
at Microsoft.SqlServer.Replication.Snapshot.SmoScriptingManager.DoScripting()
at Microsoft.SqlServer.Replication.Snapshot.SqlServerSnapshotProvider.DoScripting()
at Microsoft.SqlServer.Replication.Snapshot.SqlServerSnapshotProvider.GenerateSnapshot()
at Microsoft.SqlServer.Replication.SnapshotGenerationAgent.InternalRun()
at Microsoft.SqlServer.Replication.AgentCore.Run() (Source: Microsoft.SqlServer.Smo, Error number: 0)

ソリューション

レプリケーション モニターで、失敗したパブリケーションを長押し (または右クリック) し、[ スナップショットの生成] を選択します。

シナリオ 12: データ アップグレードの PreSync プロセスと PostSync プロセスには時間がかかり、どのプロセスまたはジョブに時間がかかるかを判断する必要があります。

ソリューション

ReleaseUpgradeDB フレームワークでは、各スクリプトの実行が ReleaseUpdateScriptsLog テーブルにログされます。 データ アップグレード プロセスのパフォーマンスを調整するときは、実行するスクリプトの期間を監視します。 このテーブルで、最も長く実行されるプロセスまたはジョブを簡単に識別できます。 ターゲット AxDB で次のクエリの一部を使用して、進行状況などを確認します。

実行中のプロセスの確認

AxDB で実行されているプロセスを確認するには、次のクエリを使用します。

SELECT   SPID       = er.session_id
 ,STATUS         = ses.STATUS
 ,[Login]        = ses.login_name
 ,Host           = ses.host_name
 ,BlkBy          = er.blocking_session_id
 ,DBName         = DB_Name(er.database_id)
 ,CommandType    = er.command
 ,ObjectName     = OBJECT_NAME(st.objectid)
 ,CPUTime        = er.cpu_time
 ,StartTime      = er.start_time
 ,TimeElapsed    = CAST(GETDATE() - er.start_time AS TIME)
 ,SQLStatement   = st.text
FROM    sys.dm_exec_requests er
    OUTER APPLY sys.dm_exec_sql_text(er.sql_handle) st
    LEFT JOIN sys.dm_exec_sessions ses
    ON ses.session_id = er.session_id
WHERE   st.text IS NOT NULL

dbupgrade 状態の確認

データ アップグレード サービスのステータスを確認するには、次のクエリを使用します。

SELECT StartTime,EndTime,Steps,SubSteps,STATUS FROM [DBUPGRADE].[DATAUPGRADESTATUS]
ORDER BY EndTime DESC

バッチ ジョブ関連の詳細の確認

バッチ ジョブ関連の詳細を確認するには、次のクエリを使用します。

select RECID, CAPTION, * from batchjob where STATUS=2
select * from batch where BATCHJOBID = _jobid_ and status=2
select serverid, status, caption, datediff(mi, startdatetime, ENDDATETIME), startdatetime, ENDDATETIME ,* from batchhistory where Batchjobid = _jobid_
select serverid, status, caption, Classnumber, datediff(mi, startdatetime, ENDDATETIME), _timetakeninmin, startdatetime, ENDDATETIME ,* from batch where batchjobid = _jobid_
select * from CLASSIDTABLE where ID in (select distinct classnumber from batch where batchjobid= _jobid_ )

シナリオ13: スナップショットがプッシュされた後、レプリケーションが失敗し、レプリケートされる LOB データの長さが、構成された最大値 65536 を超えています。

パブリケーションを作成してスナップショットをプッシュすると、ログ リーダーは一部の特定のテーブルに対して例外を報告します。

例外

次の例は、エラーを示しています。

[Microsoft][SQL Server Native Client 11.0][SQL Server]Length of LOB data (101958) to be replicated exceeds configured maximum 65536.
Use the stored procedure sp_configure to increase the configured maximum value for max text repl size option, which defaults to 65536.
A configured value of -1 indicates no limit, other that the limit imposed by the data type.
The SQL statement was: "UPDATE SYSLASTVALUE SET VALUE=?,RECVERSION=? WHERE ((((((((PARTITION=?) AND (USERID=?)) AND (RECORDTYPE=?)) AND (ELEMENTNAME=?)) AND (DESIGNNAME=?)) AND (ISKERNEL=?)) AND (COMPANY=?)) AND (RECVERSION=?))""

ソリューション

エラー メッセージに示されているように、sp_configure コマンドを実行して値を変更します。

USE master;
GO

EXECUTE sp_configure 'show advanced options', 1;
RECONFIGURE;
GO

EXECUTE sp_configure 'max text repl size', -1;
GO

RECONFIGURE;
GO

EXECUTE sp_configure 'show advanced options', 0;
GO

RECONFIGURE;
GO

ログ リーダー エージェントとディストリビューション エージェントを再起動します (即時更新を使用していない場合)。

  • これは、SQL Server エージェント またはレプリケーション モニターを使用して実行できます。
  • または、T-SQL (プッシュ サブスクリプションの場合など) を使用します。
--Edit job name below as needed
exec sp_restart_job @job_name = 'AX_PUB_PkTable_x';

詳細については、「 サーバーの構成: テキストの最大サイズ」を参照してください。