Dynamics CRM 2013/Fall '13 エンティティテーブルの仕様変更

みなさん、こんにちは。

今回は Microsoft Dynamics CRM 2013 および、Microsoft Dynamics
CRM Online Fall '13 で変更されたエンティティテーブルの仕様に
ついて紹介します。

概要

Microsoft Dynamics CRM 2011 以前のバージョンは、エンティティ
に対して基底のテーブルが Base と Extension の 2 つに分割されて
いました。これは SQL Server 2000 での制限に由来するものですが
Microsoft Dynamics CRM 2013 および、Microsoft Dynamics CRM
Online Fall '13 よりエンティティに対する基底のテーブルは、活動
エンティティのような特殊なものを除いて 1 つになります。

データ抽出時の JOIN が削減されるためパフォーマンスの向上に
つながります。

アップグレード時の動作

Microsoft Dynamics CRM 2011 からアップグレードを行う場合、
既定ではアップグレード中に自動でテーブルの結合が行われます。
但し大規模環境も考慮し、以下の機能を提供します。

- アップグレード時のテーブル結合をスキップ
- アップグレード後に別途ツールでテーブルを結合
- 任意のエンティティに対して順次結合を行える
- 一部のエンティティだけ結合された状態でもサービスを利用可能
※今後提供されるパッチの適用は、全てのエンティティの結合が
完了した時点で初めて行えます。

アップグレード時にテーブルの結合をスキップする方法

以下の手順でアップグレード中のテーブル結合をスキップできます。

1. 以下のレジストリキーを追加します。
場所 : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSCRM
キー名 : MergeBaseAndExtensionTables
キー型 : DWORD (32 ビット)
値 : 1

2. アップグレードプロセスを開始します。

3. アップグレード対象の組織を選択する画面で <なし> を選択します。
※組織を選択した場合、上記レジストリキーが存在してもテーブルの
結合が行われます。

image

4. アップグレードを完了します。

アップグレード後にテーブルを結合する方法

すべての展エンティティを一括結合

展開マネージャーからアップグレードを行うことで全てのエンティティ
を一括で結合できます。

1. 上記で追加したレジストリキーを削除するか、値を 0 に変更します。

2. アップグレード後に展開マネージャーから、任意の組織を右クリック
して組織のアップグレードを選択します。全てのテーブルを結合します。

個別のエンティティの順次結合

CrmMergeBaseAndExtensionTableTool.exe ツールを利用して、個別の
エンティティを順次処理することができます。

1. 上記で追加したレジストリキーを削除するか、値を 0 に変更します。

2. コマンドプロンプトを開き、Microsoft Dynamics CRM インストール
フォルダ¥Tools フォルダに移動します。

3. CrmMergeBaseAndExtensionTableTool を実行して結合を行います。
※利用方法はパラメータなしで実行することで詳細が表示されます。
※バックアップからリストアしたデータベースでテスト実行できます。

未結合のエンティティ一覧を確認

以下の SQL クエリを組織データベースで実行すると、まだ結合が完了
していないエンティティの一覧が確認できます。

SELECT e.Name, e.ExtensionTableName
FROM EntityView e
where e.IsActivity = 0 and e.ExtensionTableName is not null
and e.IsIntersect = 0
and e.IsLogicalEntity = 0
order by e.Name

まとめ

Base と Extension が結合することで大きなパフォーマンス向上が
期待できますが、アップグレードを問題なく成功させるためにも
規模によってどのようにアップグレードを進めるか事前に計画を
行ってください。

またカスタムレポートで直接基底テーブルをクエリするよう開発
されたものがないかも合わせてご確認ください。

- 中村 憲一郎