Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

SQL Server 2025 レプリケーションで参照用 DB を構築する

0
Posted at

はじめに

SQL Server 2025 レプリケーション機能で参照用 DB を構築する備忘録です。

改訂履歴

  • 2026/07/25 : 初版公開。

本文

1. 環境

  • SQL Server 2025 Enterprise Developer Edition
  • SQL Server Management Studio (SSMS) 22
  • Windows Server 2025 Datacenter Evaluation

補足
レプリケーションは SQL Server エージェントのジョブとして実行されるため、エージェントサービスの起動が必要です。サービスから「スタートアップの種類」を「自動」、状態を「実行中」にしておきましょう。

またレプリケーション機能のインストールも必要です。ない場合は SQL Server インストールセンターから既存のインストールに機能を追加しておきましょう。

2. 構成

構成は以下です。データの集計や分析など、重い処理は参照用 DB を使用します。

補足
レプリケーションを構成する SQL Server 間では、サーバー名による名前解決が必要なため IP アドレスではなく、ホスト名や FQDN を使用します。同じネットワーク内で NetBIOS や DNS などによる名前解決ができる場合は、基本的には大丈夫かと思います。しかし異なるネットワークセグメント間など、名前解決できない場合は hosts ファイルや DNS などを使用して SQL Server 名を解決できるようにしておく必要があります。

3. 手順

以下、レプリケーションの手順です。

補足
今回使用している SQL Server ユーザー user には、事前に管理者権限 (sysadmin) を付与しています。本番環境で構築する場合、専用のユーザーを作って最小権限の原則を守った方が良いです。

3-1. ディストリビューターの設定

SSMS で 参照用 DB に接続します。レプリケーションの右クリックメニューから、ディストリビューションの構成を選択します。

次へ進みます。

今回はこの参照用 DB をディストリビューターにするため、画像の設定で次へ進みます。

このスナップショットフォルダーのパス C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\repldata を覚えておき、次へ進みます。

次へ進みます。

パブリッシャーに自動登録されている参照用 DB を無効化して、追加をクリックし、SQL Server パブリッシャーの追加を選択します。

パブリッシャーとなる更新用 DB に接続します。

更新用 DB が追加されたことを確認して、次へ進みます。

管理用リンクパスワードを設定します。今回は P@ssw0rd としました。

補足
管理用リンクパスワードとは、ディストリビューターとパブリッシャーの間で使用される専用のパスワードです。Windows アカウントや SQL Server のパスワードとは関係がありません。

次へ進みます。

完了をクリックします。

少し待ちます。

完了したら、閉じます。

最後に参照用 DB のスナップショットフォルダー (C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\repldata) に移動し、プロパティからアクセス権限を変更しておきます。今回は Everyone でガバガバ設定にしています。

3-2. パブリッシャーの設定

SSMS で 更新用 DB に接続します。ローカルパブリケーションの右クリックメニューから、新しいパブリケーションを選択します。

次へ進みます。

参照用 DB にディストリビューターを構築しているため、更新用 DB では「以下のサーバーをディストリビューターとして使用する」を選択します。そして追加をクリックし、SQL Server パブリッシャーの追加を選択します。

参照用 DB に接続します。

参照用 DB が追加されたことを確認して、次へ進みます。

ディストリビューターの構成時に設定した管理用リンクパスワード P@ssw0rd を入力します。さらに暗号化設定は「必須」で、「サーバー証明書を信頼する」にチェックを入れて、次へ進みます。

今回は testdb を配布します。次へ進みます。

トランザクションパブリケーションを選択します。正直ベース、レプリケーションを使う時は、だいたいこれだと思います。

アーティクル(配布する対象物)を選択します。今回は m_user テーブルを丸々配布します。次へ進みます。

今回、フィルターは使いません。次へ進みます。

「スナップショットをすぐに作成し、サブスクリプションを初期化できるようにそのスナップショットを保持する」を選択します。次へ進みます。

補足
ここややこしいですが、今回の設定では最初にスナップショットレプリケーションで、更新用 DB から参照用 DB にガバッとデータを配布します。その後はトランザクションレプリケーションで、更新用 DB に更新が発生する度、参照用 DB にデータが配布されます。

セキュリティ設定をクリックします。

推奨されない旨の記載がありますが「SQL Server エージェントサービスのアカウントで実行する」を選択します。パブリッシャーへの接続には SQL Server ログインを使用します。

補足
パブリッシャーへの接続に SQL Server ログインを使用しているのは、スナップショットエージェントがディストリビューター上、つまり今回だと参照用 DB 側で実行されるためです。

次へ進みます。

次へ進みます。

パブリケーション名は test_publication にしました。完了をクリックします。

少し待ちます。

完了したら、閉じます。

ローカルパブリケーションを見ると test_publication が生成されています。

3-3. サブスクライバー の設定

SSMS で 参照用 DB に接続します。ローカルサブスクリプションの右クリックメニューから、新しいサブスクリプションを選択します。

次へ進みます。

SQL Server パブリッシャーの検索を選択します。

更新用 DB に接続します。

test_publication を選択して、次へ進みます。

プルサブスクリプションを選択して、次へ進みます。

今回は参照用 DB にも、事前に testdb のガワだけ(レコードは無し)を作っていたため、それを選択しています。次へ進みます。

補足
基本的には更新用 DB のバックアップから、参照用 DB にデータベースを事前に作っておくのが楽かなと思います。

右端の ... をクリックします。

これも推奨されない旨の記載がありますが「SQL Server エージェントサービスのアカウントで実行する」を選択します。ディストリビューターやサブスクライバーへの接続は、プロセスのアカウントを借用します。

次へ進みます。

連続実行を選んで、次へ進みます。

今すぐ初期化する設定にして、次へ進みます。

次へ進みます。

完了をクリックします。

少し待ちます。

完了したら、閉じます。

ローカルサブスクリプションを見ると test_publication との、サブスクリプションが生成されています。

4. 動作確認

参照用 DB の m_user テーブルを見ると、スナップショットエージェントで働きで、更新用 DB にあった既存データの配布ができていることが確認できます。

試しに更新用 DB の「田中」を「田井中」に変更します。

そして、参照用 DB を見ると「田井中」に変わっていることが確認できます。

おわりに

やはりレプリケーションの構築はそれなりに大変ですね。

0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?