SQLserver2000のレプリケーションについて

このQ&Aのポイント
  • SQLServer2000のレプリケーションにはトランザクションとマージの2つの方法があります。
  • トランザクションはデータの変更を逐次的に転送するため、DBの差分を転送するのに向いています。
  • 一方、マージはデータの変更を一度にまとめて転送するため、更新処理のタイミングに制約がない場合に適しています。
回答を見る
  • ベストアンサー

SQLserver2000のレプリケーションについて

トランザクションとマージの違いが 知りたいです。 今、AとBの2台同じ機器構成のサーバが あってSQLServer2000 SP3a が入っていて、 AとBは同じDB状態でスタート。 Aだけが日中DBが変更され、 夜間にAの差分DBをBに適用する必要があります。 単純に考えてトランザクションパブリケーション というものを使えばよいのかなと 考えていたのですが、リアルに更新する必要は ないため、マージ?なんとかでも よいというような記述をみかけました。 初心者なものでうまく伝えれませんが、 この場合、トランザクションとマージは どちらが適しているのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.1

同期の実行は 連続して実行の場合これは通常トランザクションレプリケーションの場合です。 要求時に実行の場合これは通常マージレプリケーションの場合です。 トランザクションレプリケーションの同期はディストリビューションエージェントが更新・挿入・削除などの変更をディストリビューションデータベースからサブスクライバに転送することでマージレプリケーションの同期はマージエージェントがサブスクライバからパブリッシャに変更をアップロードしパブリッシャからサブスクライバに変更をダウンロードすることでデータは集約されて最終的にパブリッシャとすべてのサブスクライバでデータ値が同じになります。 この辺が違うところです。 >どちらが適しているのでしょうか レプリケーションのパブリッシングにローカルディストリビュータを使用するのかリモートディストリビュータを使用してパブリッシングを構成するのかを考えれば良いかと思うのですが・・。 リモートディストリビュータはマージレプリケーションよりトランザクションレプリケーションでよく使用されると思います。 トランザクションではレプリケートされたすべてのトランザクションの書き込みと読み取りがディストリビューションデータベースに対して行われるのでディストリビュータが果たす役割が大きくなりマージでは普通プルサブスクリプションが使用されるのでディストリビュータですべてのエージェントが実行されるのではなくて各サブスクライバでエージェントが実行されます。 この二つの観点から判断しても良いと思いますが。

SEAMOON
質問者

お礼

回答ありがとうございます。 大変参考になります!

関連するQ&A

  • マージレプリケーション

    マージレプリケーションについて質問があります。 現在Windows2000 SQLServer2000で、 サーバーAにB,C2台のサーバーがぶら下がっている状態の運用を行っております。 サーバーAとB,Cはマージレプリケーションで同期を取っており、B,Cそれぞれで更新されたデータはAで統合されるようになっております。 パブリッシャーは複数あり含まれるテーブル数はまちまちです。 おききしたい点 ある1つのパブリッシャーで、サブスクリプションが同期を取る際に、 「テーブルがほかのパブリケーションで使用中なので、 プロセスは1つ以上のテーブルを削除できませんでした。」 というメッセージが出てきて、うまく同期が取れなくなってしまいました。 現在、アーティクルに同じテーブルを参照しているパブリケーションは存在しませんので、エラーの出てくるパブリケーションを削除、追加を何度か繰り返したため、B,Cのテーブルに情報が残ってしまったのでは ないかと思われます。 パブリケーションを削除したのですが、B,Cのレプリケーションのサブスクリプションに削除したはずのサブスクリプションが「同期中です」で残っており、これを削除することができません。 正常にパブリケーションを作成しなおしたいのですが、どのようにすればよろしいでしょうか? 当方、初心者でまわりに聞ける人がいないので困っています。申し訳ありませんが、よろしくお願いします。

  • 一定時間で自動に2つのSQLServerでデータのやりとりを行なうには?

    WindowsServer2003のインストールされている2台 があって、どちらもSQLServer2000が入っています。 同じデータベース名で1つだけDBがあります。 サーバAのデータをある特定時間(例えば夜間)に サーバBにコピーして更新(コミット)させる ことは可能でしょうか? 可能の場合どのようにしたらできますでしょうか。 実現に際し、条件などあればそれも併せて教えて 下さいませんでしょうか・・・。 できればAのDBの内容全てではなく、 例えば同じ状態のDBが2つあって、Aだけ 1日動作させて、夜間にBにデータを送る時には 差分だけを更新させたいです。 どなたか助けて下さい。 SQLserverのみの機能でできますでしょうか。。

  • レプリケーションの主従関係切替について

    トランザクションレプリケーションまたはマージレプリケーションでの構成を検討しておりますが、パプリッシャーとサブスクライバーの関係を逆転させるためには、再構成する必要がありますでしょうか? 意図としては、パプリッシャー側が障害時にサブスクライバーをメインで利用しますが、パプリッシャーが復旧後に元のパプリッシャーはサブスクライバーに、元のサブスクライバーはパプリッシャーに用途を変更して稼働し続けるようなことをイメージしております。 やはり、その都度、元のレプリケーション設定を解除し、再構成後にスナップショットレプリケーションから始める必要があるのでしょうか?

  • SQLServer2000 SP3適用について

    現在稼動中のNEC製クラスタプロ LE Ver7.0にSQLServer2000 SP3aが方系にのみ適用済みの状態であることが判明し、もう方系にもインストールする必要が発生しております。 この際にインストールを行うための手順について、注意点などがありますでしょうか。 環境 OS:WindowsServer 2003 SP1 DB:SQLServer2000(方系のみSP3a) システムDBは両方が個別に保持して、ユーザDBのみ共有している状態です。 小生知識が不足しているために、ご指導いただくための情報が不足しているとは思いますが、ご指導の程よろしくお願い致します。

  • SQLServerへodbc接続トランザクション

    PHP 5.6.3 SQLServer 2014 IIS 8.5 Web上からPHPへPOSTし、SQLServerへODBC関数(http://php.net/manual/ja/ref.uodbc.php)を使用して接続しています。 その際「odbc_autocommit」を使用しトランザクションをかけているのですが、 同時にDBへ登録(Insert、Delete)をしたときに競合してしまいました。 そもそも「odbc_autocommit」の挙動として、 (1)A端末からDBへ接続 (2)A端末から「odbc_autocommit」を使用しトランザクション (3)B端末からDBへ接続 (4)B端末から「odbc_autocommit」を使用しトランザクション (5)A端末からTEST_TABLEへInsert (6)B端末からTEST_TABLEへInsert 上記手順の(4)の動作の際に、A端末の操作が終わるまでBは待たされるorエラーでかえると想定していたのですが・・・ ----------------------------------------------------------- $serverCon = odbc_connect($serverName,$userName,$password); if($serverCon === false){ $strMsg = ERRMSG_DBCONNECT; writeLog($strMsg, DEBUG_LOG); jumpSystemErrPage(); exit(); } $boCon = true; // 自動コミットをさせないようにする $a = odbc_autocommit($serverCon,false); if($a === false){ $strMsg = ERRMSG_DBCONNECT; writeLog($strMsg, DEBUG_LOG); $aaaa = odbc_errormsg($serverCon); writeLog($aaaa, DEBUG_LOG); jumpSystemErrPage(); exit(); } ----------------------------------------------------------- 確認方法として A端末にてデバッグ状態から上記ソース上の if($a === false){ の行でブレイクしてる最中に B端末から普通に実行した際に $aがfalseのルートに通らずそのまま次の処理へ行ってしまいました。 PHPのODBC接続で更新中にトランザクション(ロック)をかけるのはできないのでしょうか? それとも自分のやり方が間違っているのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • SQLServer2005での復元の自動化について悩んでいます。

    SQLServer2005での復元の自動化について悩んでいます。 下記の構成でシステムを運用しています。 サーバー1(本番) OS:WindowsSvr2003R2 DB:SQLServer2005 サーバー2(障害用サブ) OS:WindowsSvr2003R2 DB:SQLServer2005 通常は本番用を使用してシステムの運用を行っているのですが、 H/Wの障害などが発生した際には、サーバー2で運用します。 ですので、システムが休止している際にサーバー1のDBをサーバー2 に移行する必要があります。 バッチやSPで自動的に行いたいのですが、何か良い方法はないでしょうか。 アドバイスをお願いします。

  • バックアップと別サーバーへのリストアについて

    サーバーAにてバックアップしたものをサーバーBへとリストアしようとしています。 (Aがメインで、毎日Bを同じ状態に保っていたい) DBのサイズがかなり大きくなってしまっている為、週一で完全&通常は差分のみと考えています。 完全についてはREPLACEオプションにてリストアできるのですが、差分がリストアできなくて困っております。 リストアする方法でなくても、AとBを同じ状態に保つ方法があれば教えてください。 OS:WIN2003Server DB:SQLServer2005

  • テーブルレイアウトの比較について

    よろしくお願いします。 SQLServer2005についての質問です。 サーバA(DBサーバ)、サーバB(DBサーバ)が存在しています。 サーバAとサーバBのテーブルレイアウトを効率よく正確に 比較する方法を教えてください。 (差分を把握したい) どうぞよろしくお願い致します。

  • SQLServerの二重化

    お世話になります クライアント:Win2K又はXPProとVB6 サーバー:(Win2KServer+SQLServer2K)×2 上記構成で、サーバー名を仮に、A、Bとします。 やりたい事 (1)クライアントからAに更新したら、Bにも同様の更新が即時適用される (2)Aがダウンしたら、BがAの代わりになる。 ※ライセンスは心配ご無用です(^^) 自分では、 (1)はストアドでどうにかすればいけるのかな?(具体的にはわかってませんが) (2)はPG起動時にAがあればAに、応答なしならBにコネクションを張るようにすればPGは変更しなくてもOK? という程度の考えしかないのですが、まったく自信がありません。一般的にはどのように対応されているのでしょうか。 レプリケーション関係のヘルプを見てもいまいちピンと来ません。もう少し頑張って読みます。しかし、読解力のない私でもわかるような、やさしい説明またはサイトのご照会をいただけると助かります。 よろしくお願いします。

  • SQLServer2008のインストール

    はじめまして。 SQLServer2008をインストールする際に、分からないところがありましたので質問させていただきます。 SQLServer2008のインストール時に、「サーバの構成」という画面で「サービスアカウント」というものを設定しなければならないのですが、各サービスに対してどういうアカウントを設定すれば良いのか分かりません。 (デフォルトで設定できそうなのが、「NT AUTHORITY\NETWORK SERVICE」と「NT AUTHORITY\LOCAL SERVICE」というものがあるのですが、これらのアカウントの意味するところが、いまいち分からないです。MSDNとやらも見てみたのですが、難しくて理解できないというのが現状です。) ちなみに、Aというパソコンから、Bというサーバに存在しているSQLServerのデータベースに、Webサービスを利用して接続する、というようなことをやりたいので、そのために必要なアカウントの設定というものがあるのでしたら、ご教授していただきたいです。 申し訳ありませんが、よろしくお願いいたします。 OS:WindowsServer2008 RDBMS:SQLServer2008 Enterprise 試用版