FC2ブログ
SQL2005でレプリケーションをやってみようかなと思う今日この頃
とりあえずメモ。分かったところから追加していく。まずは用語から。

()内は出版業界にたとえた場合

サブスクライバ…データの受け取り側(購読者)
サブスクライブ…パブリケーションを受け取ること(購読する)
パブリッシャ…データの送り手(出版社)
パブリケーション…送り手が送信す物(出版物)
アーティクル…パブリケーションに含まれるオブジェクト。テーブル、ストアド等(記事)
ディストリビュータ…1つ以上のパブリッシャに関連付けられたレプリケーション固有のデータの保存場所(読み取り場所)として機能するデータベースインスタンス(流通業者)
レプリケート…複製
マージ…「合併する」「融合する」という意味。複数のデータやファイルを一つに統合すること

スナップショットフォルダ…パブリケーションを保存する場所(トランザクションログを含む)。ディストリビュータは一つのスナップショットフォルダを持つ


次にレプリケーションの種類

①マージ・レプリケーション
データベースサーバーとクライアント・マシンの間で使用される。メインデータベースに常時接続していないクライアントを使用する必要があるときに便利。サーバーとクライアントのデータ競合を回避する仕組みを備えている。



②トランザクション・レプリケーション

二つ種類があるっぽい。一つはプッシュ型、もうひとつはプル型
プッシュ型は、パブリッシャがサブスクライバに対して定期的にデータを送信する方法
プル型は、サブスクライバがパブリッシャに対してデータを要求する方法(データを要求するのはディストリビュータに対してになるのかな。パブリッシャがディストリビュータに対して更新情報を送信するため)


プル型は、サブスクライバがディストリビュータからパブリケーションを受け取る方式のため、適切なパブリケーションの位置(スナップショット)と、エージェントにがアクセス出来るようにセキュリティを設定する必要がある。また、エージェントはディストリビュータに接続するため、ディストリビュータとパブリケーションの db_owner の権限が必要になる。



③更新可能なサブスクリプションを含むトランザクション・レプリケーション

 サブスクライバがデータを更新し、それをパブリッシャが受け取ることも可能なタイプ
 同じように、プッシュ型、プル型がある

 実験1
  パブリッシャ+ディストリビュータのPCを落とした状態で、サブスクライバがデータ
  を更新しようとすると失敗する。ディストリビュータが胆?
  サブスクライバのPCが落ちた状態でパブリッシャのデータを更新した場合は、サブスクライバが
  復旧した時点でデータの整合性を取る仕組みになっている。
  ディストリビュータが持つトランザクションログの生存日数次第かな?



④ピア・ツー・ピア・レプリケーション

スタンダードエディションでは使えない。エンタープライズエディションからの機能。なので実験してない



⑤双方向レプリケーション

互いのサーバーが、パブリッシャ、ディストリビュータ、サブスクライバになる方式。レプリケーションを構成するDBサーバーは両方同じスキーマ、テーブル、ストアドを保持する必要がある。パブリッシャ1の変更をサブスクライバ2が受けとるが、サブスクライバ2の変更は、サブスクライバ1に行かない。

これを実装するためにツールだけでは設定できないので、下記の手順で行う。

1、レプリケーションを構成するDBサーバーにディストリビュータの設定を行う。もちろん事前に各DBサーバーは、同じスキーマ、テーブル、ストアドを持っていること!超重要です。

2、まず、一台のレプリケーション対象のデータベースのパブリッシャを、トランザクションレプリケーションで作成する

3、作ったパブリッシャのサブスクライバ(プッシュ型でOK)を作成する。この時点でレプリケーション対象のテーブルのストアドがサブスクライバに生成されるので保存する。作られるストアドは下記のような感じ

例 sp_MSdel_dbotbCompany sp_MSins_dbotbCompany sp_MSupd_dbotbCompany
sp_MSdel_スキーマテーブル名 という形で生成される

上記のようなストアドがテーブル数*3個だけ、サブスクライバに生成されている。このストアドの生成スクリプトを保持すること。

4、3で作ったサブスクライバを破棄する。ストアドのスクリプトが欲しい為だけに生成したから!

5、各パブリッシャで、プッシュ型のサブスクライバの作成スクリプトを生成する。生成したスクリプトの関数を下記のように変更して実行する。変更箇所は下記の通り

sp_addsubscription 関数の @sync_type = 'none' と @loopback_detection = 'true' を追加変更する。

※sp_addpushsubscription_agent 関数のサブスクライバへの接続のパスワードがスクリプトの時点で消えてるので注意すること

6、各DBに3で作ったストアドのスクリプトを実行してストアドを作成する。

以上





◆更新可能なサブスクリプションを含むトランザクションレプリケーションをやる場合の事前準備

ネットワーク DTC アクセスを有効化すること。これを有効にすることでリモートのDBサーバーのトランザクションが使用できるようになる。これが設定されていないと下記の処理が実行できない。この処理が実行できないと更新可能なサブスクリプションを含むトランザクションパブリケーションが正しく動作しません。

begin tran
insert openquery( "linksvr", 'select * from tablename where 1=0' ) values ( 'aa' )
rollback tran

※linksvr はSQL Server のリンクサーバーで追加した名称

 ネットワーク DTC アクセスを有効化するまでの手順
 コントロールパネル -> プログラムの追加と削除をクリック
 Windowsコンポーネントの追加と削除をクリック
 アプリケーション サーバーの詳細をクリック
 ネットワーク DTC アクセスの有効化にチェックをいれ。全てOKをクリックしてインストールする
 とりあえずここでPCを再起動する
 次に
 ファイル名を指定して実行から dcomcnfg.exe を実行する(または管理ツールから「コンポーネント サービス」)
 タブの MS DTC をクリックし、トランザクションの構成(セキュリティの構成)をクリック
 セキュリティ設定グループの「ネットワーク DTC アクセス」にチェックを入れる
 「受信を許可する」と「送信を許可する」にチェックを入れる 
 また、「認証を必要としない」に設定する。
 ※ワークグループのメンバであるコンピュータ間でネットワークアクセスが実行される場合に必要になります
 あとはOKボタンをクリックしてPCを再起動する

 この設定を互いのDBが入っているPCで行えば問題なし。
 詳しくはここを参照
 http://support.microsoft.com/kb/329332/ja
 http://support.microsoft.com/kb/899191/
スポンサーサイト
TOP
プロフィール

hssamurai

Author:hssamurai
FC2ブログへようこそ!

最新記事
最新コメント

最新トラックバック

月別アーカイブ
カテゴリ