SQL Server 2000 で双方向レプリケーションを行う方法

SQL Server 2000のレプリケーションがわかりにくかったので、備忘のために記事化。

用語について

レプリケーションを出版に例えた用語が定義されています。ちょっとわかりづらい。
用語の意味するところは、以下の表のとおりです。

用語 意味
サブスクリプション レプリケーション先の定義
パブリケーション レプリケーション元テーブル群
(アーティクルを複数保持します)
アーティクル レプリケーション元テーブル
サブスクライバ レプリケーション先データベースサーバ
(サブスクリプションを複数保持します)
パブリッシャ レプリケーション元データベースサーバ
(パブリケーションを複数保持します)
ディストリビュータ レプリケーション実行データベースサーバ
(パブリッシャまたはサブスクライバと兼用することができます)

レプリケーション設定手順

以下の手順に従ってレプリケーションを設定できます。

  1. レプリケーションにかかわるサーバをサーバグループに登録する
    servers
  2. レプリケーションにかかわるサーバをリモートサーバに登録する
  3. サーバプロパティで認証を混合モードにする(レプリケーションにかかわるサーバ間で相互に認証ができるのであれば、Windows認証でもよい)
  4. distributor_adminアカウントを作成する
    add-distributor_admin
  5. ディストリビュータを用意する
  6. ディストリビュータの設定を行う
    distributor
  7. パブリッシャとサブスクライバを用意する
    publishersubscriber
  8. パブリケーションを作成する
  9. サブスクリプションを作成する

双方向レプリケーション設定手順

双方向レプリケーションはパブリケーションを作成するまでは、レプリケーション設定手順と同じですが、サブスクリプションがGUIからは作成できません。
@loopback_detection = 'true引数を指定して、sp_addsubscriptionを呼び出すことによって作成できます。

GO
EXEC sp_addsubscription
	@publication = N'testdb01_Region', -- パブリケーション名を指定
	@article = N'all',
	@subscriber = 'TEST02', -- サブスクライバ名を指定
	@destination_db = N'testdb02', -- レプリケーション先データベースを指定
	@sync_type = N'none',
	@STATUS = N'active',
	@loopback_detection = 'true' -- レプリケーションのフィードバックループが起きないように監視することを指示
GO

トラブルシュートと参考URL

いろいろ引っかかったので、それらの対処方法を書いておきます。

  • SQL Server サーバーをレプリケーションのディストリビュータとしてセットアップしようとするとエラー メッセージ “エラー 14114:(NULL) はディストリビュータとして構成されていません” が表示される
    エラー 18482: '変なホスト名' はリモートサーバとして定義されていないので、サーバー 'ホスト名' に接続できませんでした。またはエラー 14114:(NULL) はディストリビュータとして構成されていませんというエラーが起きた場合は以下のようなクエリを実行後、SQL Serverサービスを再起動することで回避できます。

    EXEC sp_dropserver 'TEST03','droplogins';
    EXEC sp_addserver 'TEST03', 'local';
  • 'ホスト名' の SQL Server エージェントは現在システム アカウントを使用しています。サーバ用のレプリケーションが実行できません。 以下のダイアログ ボックスで、サービス起動アカウントにドメイン アカウントを指定してください。というエラーが起きても、システムアカウントを利用する設定にして問題はありません。
  • sp_addsubscriptionのマニュアル
    パブリケーションにサブスクリプションを追加し、サブスクライバの状態を設定します。このストアド プロシージャは、パブリッシャ側でパブリケーション データベースについて実行されます。
  • [HOWTO] 双方向のトランザクション レプリケーションを実装する方法
    双方向のトランザクション レプリケーションとは、1 台のサーバーが同じデータのパブリッシャにもサブスクライバにもなることができる構成です。レプリケーションに参加している各サーバーがローカル データベースに加えられた変更を他のサーバーにレプリケートするため、変更が最初に行われたサーバーにその変更が他のサーバーから伝達されることはありません。

パブリケーション作成の備忘

パブリケーションにはスナップショットパブリケーション・トランザクションパブリケーション・マージパブリケーションの3種類があります。
上記の例ではトランザクションパブリケーションを使っています。

  • スナップショットパブリケーションはデータを定期的にレプリケートとします
  • トランザクションパブリケーションはデータ変更時に即座にレプリケートします
  • マージパブリケーションはデータ変更を双方向にレプリケートします
    (マージパブリケーションに対してのみ更新サブスクリプションを作成することができます)

読者からの反応

  1. [...] SQL Server 2000 で双方向レプリケーションを行う方法 « 来栖川電算. [...]

コメントをどうぞ