none
MSDE2000とSQLSeverCEを同期させたい。 RRS feed

  • 質問

  • はじめまして。

    MSDE2000とSQLServerCEを同期させたいと考えております。

    環境は、SQLServerCE側はPocketPC2003SEでクレードルによるMSDE2000とは別のパソコンAと接続しています。このパソコンAとMSDE2000はLANで接続されております。

    PDAでSQLSeverCEにデータを追加、パソコンAでMSDE2000へデータを追加します。MSDE2000、SQLSeverCEともに同じデータを共有したく同期出来ればと思います。

    MSDNやインターネットで色々と調べてみたのですが、適切な方法が分かりませんでした。

    良い方法をお教え頂ければと思います。VB.NETを使用しております。

     

    2006年4月10日 1:11

すべての返信

  • > VB.NETを使用しております。

    DataTable は,
    Current と Original の二層構造になっているんだけど,
    2.0 から,各層に別々にデータを流し込めるようになりました。

    その仕組みを応用すれば,やれなくはない気がします。

    ただ,
    主キーの競合解決や未定にしておく等のために,
    別途GUID型(uniqueidentifier)の列が必要だったり,
    行バージョンの管理や競合の解決の仕組みが必要など,
    ちゃんとやろうすると,死ぬほど大変かもしれません。

    # SQL Express は,レプリケーションのサブスクライバにはなれるので,
    # 一番いいのは,MSDE2000側は,
    # 2005のパブリッシャになれる製品版にアプグレードすることなんですけど...(汗)

    2006年4月10日 5:35
  • >死ぬほど大変かもしれません。

    両方を都合良く、同期させるのはとても大変という事ですね。勉強になりました。

    SQL Server CE側はあまりデータを追加しない予定ですので、別の方法でデータをMSDE2000へ追加する事にします。

    MSDE2000のデータをSQL Server CEへ同期させるには、レプリケーションとかRDAとかを使用するのでしょうか?

    どちらも利用できるのであれば、どちらが扱いが簡単でしょうか?過去に経験が無いため、お教え頂ければと思います。

    よろしくお願い致します。 

    2006年4月11日 0:44
  • MSDE 2000 ですが,マージ・レプリケーションは,
    パブリッシャにもなれるんですが,
    MSDE 2000 は,GUI管理ツールがそもそもないので,
    やっぱりなんらかのプログラム的処理が必要なわけで,
    その部分は自分でやらないといけないでしょうね。たぶん。
    (レプリケーション用のシステムストアドで実装するか,
    SQL-DMOを使用して実装するかでしょう
    やっぱり面倒なことには変わりは無いです
    むしろ,利用する技術の知識も必要なので,逆に大変なこともありえます)

    MSDE 2000 の後継の SQL Server 2005 Express だと,
    SP1 からGUI管理ツール(SQL Server Management Studio Express)が付くけど,
    2005は,パブリッシャにはなれなくなってしまっているんですよね...


    SQL Server CE 側で,
    行追加や(物理的な)行削除とかが起きないんだったら,
    最終更新者カラムの更新と,
    整数型の行バージョンカラムで +1 していくものを組み合わせて,
    ADO.NET 2.0 の二層構造を使った比較による単純なもので済ませるとか,
    そっちの方が,自力で作るんだったら,まだ楽でしょう。

    行追加を可能にしたい場合,
    主キーの値をどう生成するか? にもよるんですが,
    主キーのカラムがGUID値でない場合は,
    なんらかの対策が必要です。

    MS PRESS から出ている
    PROGRAMMING MICROSOFT ADO.NET 2.0 APPLICATIONS
    Advanced Topics
    という本では,主キーカラムにGUID値を採用するように推薦しているけど,
    そのままクラスタ・インデックスにしてしまった場合,
    入力時期が近い行でも位置がばらばらになるのがどうかなぁ...
    という気がするので,
    本来の主キーカラムの方をクラスタインデックスにして,
    GUID値(uniqueidentifier)の主キーカラムは,
    ふつうの(ユニーク)インデックスにする...という形にするんでしょう。たぶん。

    なので,
    元テーブルの主キーやインデックスをいじってもいいかどうかにもよります。
    いじれない場合は,Ce側で行追加可能にするには,
    主キー値の生成に関して,なんらかのカラクリが必要です。

     

    # 独自にプログラムを作成する人件費の費用で,
    # SQL Server 2005 Workgroup Edition が,
    CAL付きで購入できてしまっては元も子もないので,
    # やるんなら,本格的に作りこまずに,簡単に済ませることでしょう。

    2006年4月12日 0:57
  • > MSDE2000とSQLServerCEを同期

    同期と言っても,
    全体を初回だけスナップショットで行って,

    MSDE 2000 ---> スナップショット ---> SQL Server CE
                         <--- マージ-----------------
                         ----- マージ---------------->
                         <--- マージ-----------------
                         ----- マージ---------------->
                         <--- マージ-----------------
                         ----- マージ---------------->
                         <--- マージ-----------------

    のように双方向に同期させるのでなく,
    以下のように,毎回,部分的にセレクトすることによって,

    MSDE 2000 ---> 部分的セレクト ---> SQL Server CE
                         <--- マージ-----------------
    MSDE 2000 ---> 部分的セレクト ---> SQL Server CE
                         <--- マージ-----------------
    MSDE 2000 ---> 部分的セレクト ---> SQL Server CE
                         <--- マージ-----------------

    の繰り返しでやれば,ADO.NET 2.0 の実装は楽になります。

    2006年4月12日 1:13
  • 稍丼

     とても参考になりました。

     いろいろと試してみます。有難う御座います。

    2006年4月12日 23:43
  • 開発者のブログを読んでいたら,
    次のモバイル用? SQL Server は,SQL Server Everywhere といって,
    尚且つ,それは無償でライセンスが手に入って,
    尚且つ,ADO.NETベースのマージコンポーネント
    次期VSでは提供されるようなことが書いてありました。

    # といっても,まだ少なくとも一年は先だと思うのであれですが...。
    # 近いうちに誰かが作りそうな気もしますが...

    2006年4月14日 0:44