標準ユーザー承認テスト (UAT) データベースのコピーのエクスポート

データベース移動操作は、データ アプリケーション ライフ サイクル管理 (DataALM) の一部として使用できる一連のセルフ サービスのアクションです。 このチュートリアルでは、サンドボックス標準ユーザー受け入れテスト (UAT) からすべてのデータおよびトランザクションをエクスポートする方法を示します。

このチュートリアルでは、次の方法について説明します。

  • UAT 環境を更新します。
  • Microsoft Dynamics Lifecycle Services (LCS) の資産ライブラリへのエクスポートを実行します。
  • データベース バックアップをダウンロードします。
  • データベースをインポートし、開発者環境で使用できるようにそれを準備します。

このシナリオの例として、既に稼働している顧客が、生産トランザクションの最新のコピーを開発環境に読み込もうとしていることがあります。 これにより、顧客は特定のトランザクションをデバッグしたり、または実際的なデータセットを使用して新しい機能とレポートを開発できます。

重要

ビルド環境へのデータベースのコピーはサポートされていません。 詳細については、 ビルドの環境 を確認してください

既知の制限

Microsoft Azure SQL Database プラットフォームによる最近の制限のため、Microsoft は 200 ギガバイト (GB) を超えるデータベースのエクスポートを推奨していません。 より大きなデータベースをエクスポートする必要がある場合は、SQL Database がより大きなエクスポートをサポートするまで、従来のドキュメントを使用することをお勧めします。 この推奨事項は、更新操作ではなくエクスポート操作に適用されることに注意してください。 更新操作は、サイズが最大 4 TB のデータベースをサポートできます。

必要条件

更新操作を行うには、運用環境を配置している必要があります。または標準的な UAT 環境を 2 つ以上持つ必要があります。 このチュートリアルを完了するには、開発者環境が配置されている必要があります。

UAT 環境を更新

この更新操作は、運用データベースの最新のコピーで UAT 環境を上書きします。 この手順を完了するには、トレーニング目的での更新の手順に従います。

資産ライブラリへのバックアップ

サンドボックス 環境詳細 ページで、 管理 メニューをクリックし、 データベースの移動を選択します。

データベース メニューを移動します。

エクスポート データベース アクションが使用できるページでスライダー ウィンドウが開きます。

データベース メニューをエクスポートします。

サンドボックスの更新やパッケージの展開などの他のサービス操作は、この間実行できません。 ソース環境は Dynamics ユーザーの観点から使用可能になります。

エクスポートが正常に完了した後に、環境の詳細ページのサービス操作からサインアウトします。 データベースのバックアップ セクションの 資産ライブラリ で資産を確認できます。

資産ライブラリのバックアップ ファイル。

.bacpac ファイルはここに格納され、インポート用 Tier 1 開発者環境に手動でダウンロードすることができます。 今後、Microsoft は、エクスポート アクションをトリガーし、資産ライブラリで使用可能なバックアップ ファイルを一覧表示するための API を提供します。 これには、バックアップ資産ファイルを自動でダウンロードするための、または Microsoft Azure Storage SDK を使用して、セキュリティで保護された BLOB ストレージに直接コピーするための、セキュリティで保護された URL が含まれます。

データベースのインポート

データベース バックアップ (.bacpac) ファイルをダウンロードした後、レベル 1 環境の手動インポート操作を開始することができます。 マイクロソフトでは、データベースをインポートする際に、これらのガイドラインに従うことを推奨しています:

  • 必要な場合は、後で戻すことができるように、既存の AxDB データベースのコピーを保持します。
  • AxDB_fromProd などの新しい名前の下に新しいデータベースをインポートします。

最良のパフォーマンスを確保するためには、 *.bacpac ファイルをインポート元のコンピューターにコピーします。 sqlpackage .NET Core for Windows を Get sqlpackage .NET Core for Windows からダウンロードします。 コマンド プロンプト ウィンドウを開き、sqlpackage .NET Core フォルダーから次のコマンドを実行します。

SqlPackage.exe /a:import /sf:D:\Exportedbacpac\my.bacpac /tsn:localhost /tdn:<target database name> /p:CommandTimeout=1200 /TargetUser:"axdbadmin" /TargetPassword:"AOSWebSite@123" /TargetTrustServerCertificate:True

パラメータの説明を以下に示します。

  • tsn (ターゲット サーバー名) – インポートする Microsoft SQL Server インスタンスの名前。
  • tdn(ターゲット データベース名) – インポートするデータベースの名前。 データベースが既に存在していてはいけません
  • sf(ソース ファイル) – インポートするファイルのパスと名前。

重要

インポートされたデータがメタデータと互換性を確保するには、Visual Studio から完全なデータベース同期をトリガーする必要があります。

インポート中に、ユーザー名およびパスワードは必要ありません。 既定では、SQL Server は、現在サインインしているユーザーに対して Microsoft Windows 認証を使用します。

データベースの更新

インポートされたデータベースに対して、次の SQL スクリプトを実行します。 このスクリプトは、ソース データベースから削除したユーザーを追加し、この SQL Server インスタンスの SQL のログインに正しくリンクします。 スクリプトはまた、変更の追跡を元に戻します。 必ず、データベースの名前を使用できるように、最後の ALTER DATABASE ステートメントを編集してください。

CREATE USER axdeployuser FROM LOGIN axdeployuser
EXEC sp_addrolemember 'db_owner', 'axdeployuser'

CREATE USER axdbadmin FROM LOGIN axdbadmin
EXEC sp_addrolemember 'db_owner', 'axdbadmin'

CREATE USER axmrruntimeuser FROM LOGIN axmrruntimeuser
EXEC sp_addrolemember 'db_datareader', 'axmrruntimeuser'
EXEC sp_addrolemember 'db_datawriter', 'axmrruntimeuser'

CREATE USER axretaildatasyncuser FROM LOGIN axretaildatasyncuser

CREATE USER axretailruntimeuser FROM LOGIN axretailruntimeuser

CREATE USER axdeployextuser FROM LOGIN axdeployextuser

CREATE USER [NT AUTHORITY\NETWORK SERVICE] FROM LOGIN [NT AUTHORITY\NETWORK SERVICE]
EXEC sp_addrolemember 'db_owner', 'NT AUTHORITY\NETWORK SERVICE'

UPDATE T1
SET T1.storageproviderid = 0
    , T1.accessinformation = ''
    , T1.modifiedby = 'Admin'
    , T1.modifieddatetime = getdate()
FROM docuvalue T1
WHERE T1.storageproviderid = 1 --Azure storage

DROP PROCEDURE IF EXISTS SP_ConfigureTablesForChangeTracking
DROP PROCEDURE IF EXISTS SP_ConfigureTablesForChangeTracking_V2
GO
-- Begin Refresh Retail FullText Catalogs
DECLARE @RFTXNAME NVARCHAR(MAX);
DECLARE @RFTXSQL NVARCHAR(MAX);
DECLARE retail_ftx CURSOR FOR
SELECT OBJECT_SCHEMA_NAME(object_id) + '.' + OBJECT_NAME(object_id) fullname FROM SYS.FULLTEXT_INDEXES
    WHERE FULLTEXT_CATALOG_ID = (SELECT TOP 1 FULLTEXT_CATALOG_ID FROM SYS.FULLTEXT_CATALOGS WHERE NAME = 'COMMERCEFULLTEXTCATALOG');
OPEN retail_ftx;
FETCH NEXT FROM retail_ftx INTO @RFTXNAME;

BEGIN TRY
    WHILE @@FETCH_STATUS = 0 
    BEGIN 
        PRINT 'Refreshing Full Text Index ' + @RFTXNAME;
        EXEC SP_FULLTEXT_TABLE @RFTXNAME, 'activate';
        SET @RFTXSQL = 'ALTER FULLTEXT INDEX ON ' + @RFTXNAME + ' START FULL POPULATION';
        EXEC SP_EXECUTESQL @RFTXSQL;
        FETCH NEXT FROM retail_ftx INTO @RFTXNAME;
    END
END TRY
BEGIN CATCH
    PRINT error_message()
END CATCH

CLOSE retail_ftx; 
DEALLOCATE retail_ftx; 
-- End Refresh Retail FullText Catalogs

--Begin create retail channel database record--
declare @ExpectedDatabaseName nvarchar(64) = 'Default';
declare @DefaultDataGroupRecId BIGINT;
declare @ExpectedDatabaseRecId BIGINT; 
IF NOT EXISTS (select 1 from RETAILCONNDATABASEPROFILE where NAME = @ExpectedDatabaseName)
BEGIN 
	select @DefaultDataGroupRecId = RECID from RETAILCDXDATAGROUP where NAME = 'Default'; 
	insert into RETAILCONNDATABASEPROFILE (DATAGROUP, NAME, CONNECTIONSTRING, DATASTORETYPE)
	values (@DefaultDataGroupRecId, @ExpectedDatabaseName, NULL, 0); 
	select @ExpectedDatabaseRecId = RECID from RETAILCONNDATABASEPROFILE where NAME = @ExpectedDatabaseName; 
	insert into RETAILCDXDATASTORECHANNEL (CHANNEL, DATABASEPROFILE)
	select RCT.RECID, @ExpectedDatabaseRecId from RETAILCHANNELTABLE RCT
	inner join RETAILCHANNELTABLEEXT RCTEX on RCTEX.CHANNEL = RCT.RECID
        update RETAILCHANNELTABLEEXT set LIVECHANNELDATABASE = @ExpectedDatabaseRecId where LIVECHANNELDATABASE = 0
END; 
--End create retail channel database record

変更追跡を有効にする

ソース データベースで変更追跡が有効になっている場合は、ターゲット環境の新たなプロビジョニング データベースで有効にしてください。 変更追跡を有効にするには、ALTER DATABASE コマンドを使用します。

ALTER DATABASE [your database name] SET CHANGE_TRACKING = ON (CHANGE_RETENTION = 6 DAYS, AUTO_CLEANUP = ON);

新しいデータベースで店舗の業務手順の現在のバージョン (変更追跡に関連する) が使用されていることを保証するには、データ管理のデータ エンティティの変更追跡をオンまたはオフにする必要があります。 任意のエンティティを選択します。 ストアド プロシージャの更新を起動するには、この手順が必要です。

新しいデータベースの使用を開始します。

環境を切り替えて新しいデータベースを使用するには、最初に次のサービスを停止します。

  • World Wide Web 公開サービス
  • Microsoft Dynamics 365 Unified Operations: バッチ管理サービス
  • Management Reporter 2012 処理サービス

これらのサービスが停止した後、AxDB データベースの名前を AxDB_orig に変更し、新しくインポートしたデータベースの名前を AxDB に変更して、3 つのサービスを再起動します。

元のデータベースに戻すには、このプロセスを逆にします。 つまり、サービスを停止し、データベースの名前を変更してから、サービスを再起動します。

Commerce 環境でその後に行う手順

Commerce チャネルを使用している場合、元々セルフサービスのサンドボックスからエクスポートしたデータベースを開発者環境にインポートする場合、以下の追加手順をインストール先の開発者環境で実行する必要があります。 これらの手順を完了しないと、コマース チャンネルは機能しません。

  1. Commerce チャネル機能を復元するには、最新の Microsoft サービス更新または品質更新プログラムを適用します。これにより、チャネル データベースが作成されます。
  2. 以前に展開したチャネル データベース拡張機能を復元するには、対応する Retail セルフサービス配置可能パッケージを再度適用します。

注記

Commerce Version 10.0.38 から、部数化されたチャンネル データベースまたはレガシー チャンネル データベースは更新またはサポートされなくなりました。 コマース チャネルの機能を復元するには、開発環境にコマース スケール ユニットをインストールする の手順に従って、シールされた Commerce Scale Unit をセットアップする必要があります

対象の環境を再プロビジョニング

重要

Commerce headquarters データベース (以前の AOS データベース) を移行する際、関連付けられている Commerce Scale Units (CSUs) は移動されません。 場合によっては、使用する機能に応じて、CSU の再配置が必要になる場合があります。 次に、データを CSU に完全に同期して、再配置を行う必要があります。 データの不一致が残っている場合は、最終的なアクションとして CSU を削除し、新しい CSU を置き換え、新しい CSU に対するデータの完全同期を実行することです。

環境固有のレコードの中には、自動的なデータベース移動操作に含められないものがあり、その手順を追加する必要があります。 次のような役割があります。

  • コマース セルフサービス インストーラー参照。
  • Commerce Scale Unit チャネル データベースのコンフィギュレーション レコード。

環境間でデータベースをコピーすると、次の追加の手順を実行しない限り、移行先環境の Commerce の機能は完全には機能しません。

Commerce Scale Unit の初期化

データベースをサンドボックスのユーザー受け入れテスト (UAT) または運用環境に移動する場合は、データベースの移動操作が完了した後に、Commerce Scale Unit を初期化する必要があります。 ソース環境からの Commerce Scale Unit の関連付けは、移行先の環境にコピーされません。

Commerce のセルフサービス インストーラーの同期

本部内の Commerce セルフサービス インストーラーにアクセスできるようにするには、データベースの移動操作が完了した後にセルフサービス インストーラーを同期する必要があります。

重要

環境の再プロビジョニング手順は、データベース移動操作の一部として完全に自動化されており、これ以上手動で実行する必要はありません。 環境再ビジョニング ツールは引き続きアセット・ライブラリで利用可能ですが、Commerce バージョン 10.0.37 以前を実行している開発環境にデータベースを復元する場合にのみ必要です。 Commerce Version 10.0.38 以降を実行している開発環境では、シールされた CSUを 使用する環境なので、環境の再プロビジョニング ツールは適用されません。

移行先の環境で環境の再プロビジョニング ツールを実行するには、次の手順を実行します。

  1. ソフトウェア配置可能パッケージ セクションにある自身のプロジェクトの アセット ライブラリ で、 インポートを選択します。
  2. 共用資産の一覧から、 環境再プロビジョニング ツールを選択します。
  3. 移行先環境の 環境の詳細 ページで、 管理>更新プログラムを適用を順に選択します。
  4. 先ほどアップロードした 環境再プロビジョニング ツールを選択し、 適用 を選択してパッケージを適用します。
  5. パッケージの配置の進捗を監視します。

配置可能なパッケージの適用方法についての詳細は、 配置可能なパッケージを作成するを参照してください。 配置可能パッケージを手動で適用する方法の詳細については、 配置可能 な パッケージ を コマンド ライン から インストール するを参照してください。

POS デバイスの再アクティブ化

販売時点管理 (POS) デバイスを使用する場合は、データベースをインポートした後、POS デバイスを再度アクティブ化する必要があります。 移行先環境で以前にアクティブ化されたデバイスは、機能しなくなります。 詳細については、販売時点管理 (POS) デバイスのライセンス認証 を参照してください。

財務報告データベースのリセット

財務報告を使用する場合は、データベースを復元した後の財務報告のデータ マートのリセットの手順に従って、 財務報告データベースをリセットする 必要があります。 (財務報告は以前は Management Reporter という名前でした)

ターゲット データベースの暗号化された環境固有のフィールドからデータを再入力

クライアントでは、暗号化された環境固有のフィールドに記録した値を入力します。 次のフィールドが影響されます。 フィールド名は Table.Field 形式で指定されます。

フィールド名 値を設定する場所
CreditCardAccountSetup.SecureMerchantProperties 売掛金勘定>支払設定>支払サービスを選択します。
ExchangeRateProviderConfigurationDetails.Value 総勘定元帳>通貨>為替レート プロバイダーを構成するを選択します。
FiscalEstablishment_BR.ConsumerEFDocCsc 組織管理>会計施設>会計施設の順に選択します。
FiscalEstablishmentStaging.CSC このフィールドは、データ インポート/エクスポート フレームワーク (DIXF) によって使用されます。
HcmPersonIdentificationNumber.PersonIdentificationNumber 人事管理>作業者>作業者の順に選択します。 ワーカータブの、個人情報グループで、ID 番号を選択します。
HcmWorkerActionHire.PersonIdentificationNumber このフィールドは、Microsoft Dynamics AX 7.0 以降 (2016 年 2 月) は廃止されました。 これは以前、すべての作業者アクション フォーム (人事管理>作業者>アクション>すべての作業者アクション) にありました。
SysEmailSMTPPassword.Password システム管理>電子メール>電子メール パラメーターの順に選択します。
SysOAuthUserTokens.EncryptedAccessToken このフィールドは、アプリケーション オブジェクト サーバー (AOS) により内部で使用されています。 これは無視できます。
SysOAuthUserTokens.EncryptedRefreshToken このフィールドは、AOS で内部的に使用されます。 これは無視できます。

コミュニティ ツール

開発者環境にバックアップ ファイルをインポートするための他のツールをお探しですか。 他の情報源を次に示します。

既知の問題

エクスポート データベースが「準備に失敗しました」状態

LCS からのオートメーションがタイムアウトした場合、エクスポート データベースの状態が 準備に失敗しました に変わります。 アセット ライブラリにエクスポートするエクスポート操作は、引き続き SQL データベースで実行されています。 この問題を解決するには、再開 を使用してプロセスと SQL データベースを再接続できます。 その後、プロセスが正常に完了します。

エクスポート データベースには時間を要します

Azure SQL チームは、サイズが 200 GB を超えるデータベースの場合、LCS が使用するインポート/エクスポート アプリケーション プログラミング インターフェイス (API) の実行時間が変化すると発表しました。 この問題が発生した場合、UAT データベースに直接 DevTest 環境を接続するか、レガシー ドキュメントに従うことができます。 ご利用の環境では、ポイントインタイム リストア機能が使用可能となっているため、マイクロソフトはバックアップ目的でのデータベースのエクスポートを推奨しません。

Lifecycle Services チームは、インポート/エクスポート API のパフォーマンスを改善するために Azure SQL チームと直接協力しており、LCS の将来のリリースで修正する予定です。

Management Studio インストール ファイルをダウンロードできません

Microsoft SQL Server Management Studio インストーラーをダウンロードしようとすると、次のエラー メッセージが表示される場合があります。

現在のセキュリティ設定では、このファイルをダウンロードすることはできません。

この問題を回避するには、次の手順を実行してファイルのダウンロードを有効にします。

  1. Web ブラウザーでインターネット オプションを開きます。
  2. セキュリティタブで、インターネットゾーンを選択し、レベルのカスタマイズを選択します。
  3. ダウンロード までスクロールし、ファイルのダウンロード有効にする オプションを選択します。

データベース同期の失敗

データベースを Microsoft Visual Studio から新しくインポートされたデータベースと同期させると、その同期は失敗することがあり、次のエラー メッセージが表示される場合があります。

コード 1 で終了した SQL connection syncengine.exe のオープンに失敗しました。

この場合、次のメッセージも Windows アプリケーション ログのイベント ID 140 で記録されます。

オブジェクト サーバー データベース シンクロナイザー: データベースに格納されている内部システム テーブル バージョン番号が、カーネル (141/138) でサポートされているバージョンよりも大きくなっています。 新しい Microsoft Dynamics カーネルを使用するか、-REPAIR コマンドライン パラメーターを使用して Microsoft Dynamics を起動し、同期を強制します。

この問題は、現在の環境のプラットフォーム ビルド番号がソース環境のプラットフォーム ビルド番号よりも低い場合に発生する可能性があります。 問題を解決するには、状況に応じて、次のいずれかのステップを実行します。

  • LCS で環境ページの 更新 タイルを使用し、ソース環境のプラットフォームに一致するように現在の環境のプラットフォームをアップグレードします。

  • データベースで必要なバージョンを調整する次のクエリを実行します。

    UPDATE SQLSYSTEMVARIABLES
    
    SET VALUE = 138
    
    WHERE PARM = 'SYSTABVERSION'
    

    メモ

    このクエリの値 138 は、この特定の環境でバージョン 138 が予想されるイベント ログ メッセージから取得されます。

パフォーマンス

次のガイドラインは、最適なパフォーマンスを達成するのに役立ちます。

  • .bacpac ファイルは常に、SQL Server インスタンスを実行するコンピューターにローカルにインポートする必要があります。 Management Studio からリモート マシンにインポートしないでください。
  • Azure でホストされているワンボックス環境にインポートする場合は、.bacpac ファイルを D ドライブに置きます。 (ワンボックス環境はレベル 1 環境とも呼ばれます。) Azure 仮想マシン (VM) 上でのテンポラリー ドライブに関する詳細については、Windows Azure 仮想マシンのテンポラリー ドライブを理解する を参照してください。
  • SQL Server Windows サービス インスタンス ファイルの初期化 を実行するアカウントに権限を付与します。 この方法で、インポート処理の速度および *.bak ファイルからの復元の速度を向上させることができます。 開発者環境では、axlocaladmin アカウントとして実行する SQL Server を設定することにより、SQL Server サービスを実行するアカウントがこれらの権限を持っていることを簡単に確認することができます。