こんにちは、Sitecore開発担当の池崎です。

Sitecoreではパッケージと呼ばれる機能を使用して管理しているコンテンツを別の環境に移すことが可能になっています。
ページや画像を構成するデータをzipファイルにしてエクスポート/インポートすることでコンテンツを移す機能です。
何故別の環境に移す必要があるかというと以下のようなケースが考えられます。

  • 本番環境と検証環境のコンテンツを同期したい
  • Sitecoreのバージョンアップを行う際に古い環境のコンテンツを一括で移行したい

ですがこのパッケージ機能にはサイズ制限があり一度に移行できるzipファイルは2GBまでとなっています。
そのため大量のコンテンツを移行する場合いくつもパッケージのエクスポート/インポートしなければならなくなり、実施に手間と時間がかかります。  

この記事ではパッケージ以外の方法で環境間の大量のデータの移行を実現するため、
コンテンツを管理しているデータベースを丸ごと移植する手順について紹介します。
この方法を取ることで、一度に全てのコンテンツの同期をとることが可能になります。  

前提となる知識

Sitecoreは大きく3つのデータベースが存在しています。  

  • 基幹データを管理するCoreデータベース
  • 編集コンテンツを管理するMasterデータベース
  • 公開コンテンツを管理するWebデータベース

この内移植するのはMasterデータベースのみです。
Webデータベースの公開コンテンツはMasterデータベースの編集コンテンツから作られるので、
Masterデータベースを移植することでWebデータベースの移植は不要です。
Coreデータベースはコンテンツには直接影響を及ぼさないため移植しません。  


想定する環境

これから記述する手順を実施するSitecoreの環境は、移行元も移行先もAzure上にPaaS構成で構築されていることを想定しています。
開発用にローカルマシン上に構築した環境でも実施することができます。
ただし大枠の手順は一緒でも細かい部分が多少異なります。
Sitecore XM Cloud環境においては環境構成を変更できないためこの方法は使用できません。

作業概要

この記事で紹介するデータベースの移植は大きく以下の5つの手順で行います。  

  1. データベースのバックアップの復元
  2. 復元したデータベースのSQLサーバー移動  
  3. 新しいDB接続ユーザーを作成  
  4. 接続設定の切り替え  
  5. パブリッシュおよびインデックス再構築

このあと各作業について細かく説明していきます。  


1. データベースのバックアップ復元

最初の作業は移行元の環境のデータベースの複製を生成します。  
Azure SQL Databaseのバックアップの復元機能を使用して複製を作ります。  
実際に実施する手順は以下となります。  

  1. Azure Portal で移行元となる環境サブスクリプションおよびリソースグループにアクセスします。  
  2. 移行元の環境のMasterデータベース(Azure SQL Database) を選択し、「復元」をクリックします。  
  3. 復元先は元のサブスクリプションおよびリソースグループと同じにしてください。  
  4. 日時とスケール(性能)を指定して復元を開始します。基本的には現在の同じ時刻とスケールで問題ありません。  
  5. 復元を開始します。所要時間はおよそ10〜30分程度です。

2. 復元したデータベースのSQLサーバー移動  

次に復元したデータベースを、移植先の環境のSQLサーバーに移動します。
移動にはSQL Server Management Studio(SSMS)を使います。  

  1. SSMSで移行元となる環境のSQL Serverにログインします。  
  2. SSMSのオブジェクトエクスプローラーで、復元したデータベースを選択して右クリックします。  
  3. 「タスク」→「Microsoft Azure SQL データベースへのデータベースの配置」を選択します。  
  4. 移行先となるSQL Serverを指定して移動を実行します。

ネットワークの状態やデータベースのサイズ次第になりますがこの処理はとても時間がかかります。
数時間~数十時間かかる場合があります。
移動が完了したら、復元で作られた移動元のデータベースは削除して構いません。  


3. 新しいDB接続ユーザーを作成  

SSMSで移行先の環境のSQLサーバーに接続しデータベースアクセス用の新しいユーザーを作成します。  

  1. 以下のSQLクエリを実行してユーザーを作成します。  
-- (移行元のmasteruserと同じパスワードを設定)
CREATE USER masteruser2 WITH PASSWORD = 'your-password-here'
  1. 以下のクエリを実行して接続する権限を付与します。
EXEC sp_addrolemember 'db_owner', 'masteruser2'

補足

  • ユーザー名とパスワードは任意ですが、後に設定する接続文字列と整合性を持たせてください。  
  • masteruser は移行先の環境に既に存在しており別ユーザー扱いになるため、認証が通りません。別のユーザー名を使用する必要があります。  

4. 接続設定の切り替え

移行先の環境の接続文字列ファイルを書き換え、Masterデータベースの参照先を元々のデータベースから移行したデータベースに切り替えます。  

  1. 移行先の環境のCMサーバーのkudu(https://<サイト名>.scm.azurewebsites.net)にアクセスし、次のファイルをダウンロードします。
    • C:\home\site\wwwroot\App_Config\ConnectionStrings.config
  1. ダウンロードした ConnectionStrings.config をテキストエディタで開き、以下の内容を編集します。
    • Initial Catalog → 移行したDB名
    • User Id → 作成したユーザー名(例:`masteruser2`)  
    • Password → そのユーザーのパスワード  

    注意: Data Source(接続先サーバー名)は変更しないでください。  

  2. 編集後、再度CMサーバーのKuduを使って元のファイルを上書きアップロードします。  

    注意: Sitecore XPである場合、xConnectサーバー側の ConnectionStrings.config も同様に修正が必要です。  

  3. CMサーバーを再起動します。再起動後ログインしてSitecoreの管理画面が表示できれば移植できていることになります。  

    注意: 設定漏れがあると、アプリケーションが正常に動作しない可能性がありますので注意してください。

  4. コンテンツエディタを開き、コンテンツツリーでコンテンツが移行できていることを確認します。  

5. パブリッシュとインデックス再構築

ここまでの作業でコンテンツの移行は完了しています。
しかし公開データベースや検索エンジンのインデックスの更新はまだ行われていません。
最後の手順として、移行したコンテンツをSitecore全体に適用します。

  1. Sitecore管理画面から、サイト全体のリパブリッシュを行います。これにより公開データベースを更新します。  
  2. コントロールパネルからインデックスの再構築を実施します。基本的にはmasterのみで問題ありませんが、必要に応じてwebも再構築してください。

以上でデータベースの移植によるコンテンツの移行を行う作業工程は終了となります。  


まとめ

本記事では、Sitecore環境においてデータベースの移植によるコンテンツの移行を行う手順を紹介しました。
移行に際しては十分なテストを行い、誤操作によるデータ損失を防ぐためにも事前バックアップを忘れずに取得してください。


関連リンク