---
title: "xDBコレクションデータベースシャードの分割またはマージ"
slug: "split-or-merge-xdb-collection-database-shards"
abstract: "xDBコレクションのデータベースシャードを分割または統合する方法。"
---
# xDBコレクションデータベースシャードの分割またはマージ

Sitecore 9.3以降では、Microsoftの分割/マージサービスを使ってシャード間でデータを再分配できます。

## 制限

Sitecore 9.3における分割/マージサービスには以下の制限があります:

-   SQL Azureとしか使えません。
-   Always Encryptedと併用することはできません。分割またはマージ操作を実行する前に、必ずデータを復号化してください。
-   xDBコレクションデータベースのShardKeyフィールドには値が必要です。Sitecore 9.3以前に収集されたデータを更新するには、xDBコレクション更新ツールを使わなければなりません。

## シャードを分割する

分割操作は、指定されたシャードキー範囲を持つレコードをシャードAからシャードBへ移動させます。分割操作:

-   一度に一つのシャードしか分割できません。
    
-   一度に分割できるシャードマップは1つだけです。シャードマップは3つあります:
    
    -   DeviceProfileIdShardMap
    -   ContactIdShardMap
    -   ContactIdentifiersIndexShardMap
    
    > !注すべてのシャードマップを分割する必要はありません。分割するだけContactIdShardMap選択できます。
    

3つのシャード(すべてのシャードマップを含む)を分割するには、12の操作を行う必要があります:3つのシャードを追加し、各シャードを3回分割します。これは各シャードマップごとに1回ずつです。

分割操作を実行するには:

1.  [Azureの分割/統合サービスを展開](https://docs.microsoft.com/en-us/azure/sql-database/sql-database-elastic-scale-configure-deploy-split-and-merge)してください。分割/統合サービスには、2つのウェブアプリ、ストレージアカウント、そしてデータベース(Sitecoreの役割とは無関係)が含まれます。
    
    シャードを分割または統合する際の自己署名証明書作成に関する情報は、[ナレッジベース](https://support.sitecore.com/kb?id=kb_article_view&sysparm_article=KB1003454)を参照してください。
    
2.  データの損失や破損を防ぐためにxConnectを無効にしてください。xConnectを無効にするには:
    
    -   Content DeliveryとContent Managementの役割をCMS専用モードに切り替えましょう。
    -   xConnectに書き込みをするすべてのウェブアプリを停止してください。
    -   xConnect CollectionおよびxConnect Collection Searchサービスのウェブアプリを停止してください。
3.  xConnectのウェブアプリケーションのKuduサービスURLにアクセスしてください。例えば: https://mysite.scm.azurewebsites.net/
    
4.  SQL Sharding Deployment Toolが入っているフォルダに移動してください: <xconnect-root>\\App\_Data\\collectiondeployment
    
    > !注以下のSQLシャーディングデプロイメントツールのスクリプトのいずれかがKuduで動作しない場合は、ローカルでフォルダ全体をダウンロードし、*管理者* 権限でローカルのPowershellからSQLシャーディングデプロイメントツールのスクリプトを実行してください。Azureファイアウォールが、フォルダをダウンロードされたクライアントからAzure SQLインスタンスへのアクセスを許可するように正しく設定されているか、スクリプトを実行する場所から確認してください。
    
5.  SQLユーザーを*SAユーザー* と同等に設定し、すべてのシャーディングデプロイメントツールスクリプトに対して完全な*Administrator*権限を持つSQL。
    
6.  [SQL Sharding Deployment Tool](https://doc.sitecore.com/xp/ja/developers/103/platform-administration-and-architecture/the-sql-sharding-deployment-tool.html "The SQL Sharding Deployment Tool")を使って、空のシャードをシャードクラスタに追加します。例えば:
    
    .\\Sitecore.Xdb.Collection.Database.SqlShardingDeploymentTool.exe /operation “addShard” /connectionstring "user id=sa;password=12345;data source=(server);" /shardMapManagerDatabaseName "Sitecore.Xdb.Collection.Database.Sql.ShardMapManagerDb" /shardConnectionString "user id=sa;password=12345;data source=.\\SQL2017;" /shardnameprefix "Sitecore.Xdb.Collection.Database.Sql" /shardnamesuffix "-db" /dacpac ".\\Sitecore.Xdb.Collection.Database.Sql.dacpac"
    
7.  作成されたシャード内で以下のSQLスクリプトを使って*xcsmmuser*ユーザーとその権限を追加します。
    
    DROP USER IF EXISTS xcsmmuser
    GO
    CREATE USER xcsmmuser WITH PASSWORD = 'PasswordHere';
    GO
    EXEC sp\_addrolemember 'db\_datareader',xcsmmuser;
    EXEC sp\_addrolemember 'db\_datawriter',xcsmmuser;
    GO
    GRANT EXECUTE TO xcsmmuser;
    GO
    
    *xcsmmuser*のパスワードは接続文字列(path:<xconnect-root>\\App\_Config\\ConnectionStrings.config).)で確認できます。
    
8.  分割/マージ操作の性能を向上させるために、各シャードの以下のテーブルのShardKey列に[インデックスを作成する](https://docs.microsoft.com/en-us/sql/relational-databases/indexes/create-nonclustered-indexes?view=sql-server-2017)こともオプションで可能です:
    
    -   Contacts
    -   ContactIdentifiers
    -   ContactFacets
    -   Interactions
    -   InteractionFacets
    -   DeviceProfiles
    -   DeviceProfileFacets
    -   ContactIdentifierIndex
9.  分割するシャードを選び、どこに分割するか決めてください(例えば、シャードキーの範囲を50/50に分割するか75/25に分割するかを選べます)。これを行うには、SQL Sharding DeploymentツールprintMapping操作を使って、すべてのシャードマップのシャードキーレンジを取得します。
    
    .\\Sitecore.Xdb.Collection.Database.SqlShardingDeploymentTool.exe /operation printMapping /connectionstring "user id=sa;password=12345;data source=(server);" /shardMapManagerDatabaseName "Sitecore.Xdb.Collection.Database.Sql.ShardMapManagerDb"
    
    printMappingコマンドはシャードマップとそのキーレンジのリストを生成します:
    
    Current Shard Map ContactIdShardMap state:
     Demo\_Xdb.Collection.Shard0 contains key range 0x:0x80)
     Demo\_Xdb.Collection.Shard1 contains key range 0x80:+inf)
    Current Shard Map DeviceProfileIdShardMap state:
     Demo\_Xdb.Collection.Shard0 contains key range 0x:0x80)
     Demo\_Xdb.Collection.Shard1 contains key range 0x80:+inf)
    Current Shard Map ContactIdentifiersIndexShardMap state:
     Demo\_Xdb.Collection.Shard0 contains key range 0x:0x80)
     Demo\_Xdb.Collection.Shard1 contains key range 0x80:+inf)
    
    > !注+inf 「 0xFF (最高調)」を意味します。
    
    この例では、Demo\_Xdb.Collection.Shard0シャードのContactIdShardMapシャードマップのシャードキーレンジは0x:0x80です。ContactIdShardMapshardを50/50に分割するには、0x40キーでシャードを分割します。シャードを25/75に分割するには、0x20または0x60の範囲で分割します。
    
    > !注50/50分割とは、シャードキーの範囲が50/50であることを意味します。シャード間のデータ分布は完全に均一でない場合があります。
    
10.  分割/統合サービスのウェブページにアクセスし、[分割/統合操作を実行し](https://docs.microsoft.com/en-us/azure/sql-database/sql-database-elastic-scale-configure-deploy-split-and-merge#create-requests)てください。フィールドに正しい値を指定し、シャー **ドキータイプ** を次の画像のようにバイナリとして設定します。
     
     ![The split/merge web page settings for the Split operation](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/103/platform-administration-and-architecture/images/sql-split-merge-web-ui.png)
     
     フォームに記入する際:
     
     -   **Split at Key**はステップ7で選択したキーです。例えばキーレンジが0x:0x80なら、*0x20*を25/75分割します。
         
         > !注シャードはキー範囲で選びますが、名前ではなく。ツールは分割するキー値に基づいてターゲットするシャードを算出します。
         
     -   分割振 **る** 舞いオプションは、どのキーレンジが新しいシャードに移動するかを決定します。例えば、0x20で分割し、「 **ローキー(含む)からスプリットキー(除外)への移動範囲**」を選択すると、新しいシャードの範囲は0x:0x19になります。
         
11.  ツールを実行するには **「提出」** をクリックしてください。
     
12.  分割が完了したら、ステップ6で作成したShardKey列のインデックスを削除してください。
     

> !重要分割操作を行った後にxDBインデックスを再構築してください。

## シャードのマージ

マージ操作を実行するには:

1.  [Azureの分割/統合サービスを展開](https://docs.microsoft.com/en-us/azure/sql-database/sql-database-elastic-scale-configure-deploy-split-and-merge)してください。分割/統合サービスには、2つのウェブアプリ、ストレージアカウント、そしてデータベース(Sitecoreの役割とは無関係)が含まれます。
    
2.  データの損失や破損を防ぐためにxConnectを無効にしてください。xConnectを無効にするには:
    
    -   Content DeliveryとContent Managementの役割をCMS専用モードに切り替えましょう。
    -   xConnectに書き込みをするすべてのウェブアプリを停止してください。
    -   Connect CollectionおよびxConnect Collection Searchサービスのウェブアプリを停止してください。
3.  xConnectのウェブアプリケーションのKuduサービスURLにアクセスしてください。例えば: https://mysite.scm.azurewebsites.net/
    
4.  SQL Sharding Deployment Toolが入っているフォルダに移動してください: <xconnect-root>\\App\_Data\\collectiondeployment
    
    > !注以下のSQLシャーディングデプロイメントツールのスクリプトのいずれかがKuduで動作しない場合は、ローカルでフォルダ全体をダウンロードし、*管理者* 権限でローカルのPowershellからSQLシャーディングデプロイメントツールのスクリプトを実行してください。Azureファイアウォールが、フォルダをダウンロードされたクライアントからAzure SQLインスタンスへのアクセスを許可するように正しく設定されているか、スクリプトを実行する場所から確認してください。
    
5.  SQLユーザーを*SAユーザー* と同等に設定し、すべてのシャーディングデプロイメントツールスクリプトに対して完全な*Administrator*権限を持つSQL。
    
6.  任意の場合、マージ操作の性能を向上させるために、各シャードの以下のテーブルのShardKey列に[インデックスを作成する](https://docs.microsoft.com/en-us/sql/relational-databases/indexes/create-nonclustered-indexes?view=sql-server-2017)ことも可能です。
    
    -   Contacts
    -   ContactIdentifiers
    -   ContactFacets
    -   Interactions
    -   InteractionFacets
    -   DeviceProfiles
    -   DeviceProfileFacets
    -   ContactIdentifierIndex
7.  シャードを選択してマージします。これを行うには、SQLシャーディングデプロイメントツールprintMapping操作を使って、すべてのシャードマップのシャードキー範囲を取得してください。例えば:
    
    .\\Sitecore.Xdb.Collection.Database.SqlShardingDeploymentTool.exe /operation printMapping /connectionstring "user id=sa;password=12345;data source=(server);" /shardMapManagerDatabaseName "Sitecore.Xdb.Collection.Database.Sql.ShardMapManagerDb"
    
    以下の例はprintMapping演算の出力を示しています。
    
    Current Shard Map ContactIdShardMap state:
     Demo\_Xdb.Collection.Shard0 contains key range 0x:0x40)
     Demo\_Xdb.Collection.Shard1 contains key range 0x40:0x80)
     Demo\_Xdb.Collection.Shard2 contains key range 0x80:+inf)
    
    > !注+inf 「 0xFF (最高調)」を意味します。
    
    この例では、シャードキーレンジ0x:0x40(Demo\_Xdb.Collection.Shard0)をシャードキーレンジ0x40:0x80(Demo\_Xdb.Collection.Shard1)に統合したいです。
    
8.  分割/統合サービスのウェブページにアクセスし、[分割/統合操作を実行し](https://docs.microsoft.com/en-us/azure/sql-database/sql-database-elastic-scale-configure-deploy-split-and-merge#create-requests)てください。フィールドに正しい値を指定し、シャー **ドキータイプ** を次の画像のようにバイナリとして設定します:
    
    ![Split/merge service web page showing the settings for the Merge operaton](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/103/platform-administration-and-architecture/images/microsoft-split-merge-ui-web.png)
    
    シャードレンジ0x:0x40をシャードレンジ0x40:0x80に統合したい場合は:
    
    -   **ソースレンジのローキー**は0倍です。
    -   **ソースレンジのハイキー** 0x40または選択**ハイは最大キーです**。ハイマックスキーは*inf*とみなされます。
    -   **ターゲットレンジは控え**めに0x40。
    -   **ターゲットレンジのハイキー**は0x80、ティックハイ**は最大キー**です。ハイは*inf*と見なされます。
    
    マージが完了すると、Demo\_Xdb.Collection.Shard1キーレンジは0x:0x80となります。
    
9.  SQLシャーディング展開ツールを使って空のソースシャードを削除してください。例えば:
    
    .\\Sitecore.Xdb.Collection.Database.SqlShardingDeploymentTool.exe /operation deleteShard /connectionstring "user id=sa;password=12345;data source=.\\SQL2017;" /shardMapManagerDatabaseName "Sitecore.Xdb.Collection.Database.Sql.ShardMapManagerDb" /shardConnectionString "user id=sa;password=12345;data source=.\\SQL2017;" /shardDatabaseName "Sitecore.Xdb.Collection.Database.Sql2\_"
    
10.  ステップ6で作成したShardKey列のインデックスを外してください。
     

> !重要マージ操作を行った後にxDBインデックスを再構築してください。