レプリケーションの制限事項

Microsoft SQL Server 2005 Compact Edition (SQL Server Compact Edition) サブスクライバでマージ レプリケーションを使用する場合、パブリケーションに関する複数の制限事項があります。このセクションでは、これらの制限について説明します。

サブスクライバでのスキーマの変更に関する制限

サブスクライバでは一部のスキーマの変更を実行できますが、すべてではありません。次の表に、サブスクライバで実行できるスキーマの変更と、実行できないスキーマの変更を示します。

操作 レプリケートされたテーブルでの実行

テーブルの削除

×

テーブル名の変更

×

列の追加、削除、または移動

×

ID 列のシード値または増分値の変更

既定値の追加または削除

主キーの追加または削除

×

外部キーの追加または削除

×

インデックスの追加または削除

注意 :
ユーザー テーブルのレプリケーション列のインデックスは、追加および削除しないことをお勧めします。レプリケーション列はシステム列として扱われるので、同期エラーが発生する原因になります。

インデックス名の変更

重要 :
システム テーブルではスキーマを変更できません。

追加要件

SQL Server Compact Edition サブスクライバには、次のルールが適用されます。

  • メモリ消費
    再初期化が要求された後で、同期中に SQL Server Compact Edition データベースが一時的に実際のデータベースの 2 倍のサイズに拡張される場合がありますが、同期が完了すると (自動圧縮ポリシーに基づいて) 圧縮されます。
  • サブスクリプション フィルタの検証
    フィルタ検証により、データを同期させる前に、パブリッシャがサブスクライバのフィルタ値を確認できるようになります。サブスクライバのフィルタ値が変更されている場合、パブリッシャはサブスクライバでの再初期化を要求します。SQL Server 2005 でデータを同期させる際に、SQL Server Compact Edition ではフィルタ検証を使用できます。
    メモ :
    HostName プロパティでは、サブスクリプションの動的フィルタ値を指定します。新しい HostName プロパティを指定することでサブスクライバの動的フィルタ値を変更する場合、同期する前に Reinitialize メソッドを呼び出す必要があります。
  • 大文字と小文字の区別
    SQL Server Compact Edition データベースでは、大文字と小文字が区別されません。SQL Server Compact Edition データベースでは、オブジェクトおよびデータの取り扱いが SQL Server データベースの場合と異なります。たとえば、SQL Server データベースでは大文字と小文字が区別されるので、MYTABLE というテーブルと mytable というテーブルが、異なるオブジェクトとして扱われます。SQL Server Compact Edition データベース内に同じテーブル名があると、名前付けの競合が生じます。同様に、SQL Server Compact Edition では MYVALUE という値と myvalue という値が同じ値として扱われ、主キー違反の原因になります。SQL Server データベースでは大文字と小文字が区別されるので、違反にはなりません。
  • テーブル内の列数
    SQL Server Compact Edition では、7 個のシステム列が監視用に割り当てられます。ただし、これらのシステム テーブルは列数の制限を計算する際に無視されます。
  • NOT FOR REPLICATION 制約
    SQL Server Compact Edition では、NOT FOR REPLICATION オプションがサポートされていません。このオプションを使用した制約は作成しないでください。データベース内の制約に NOT FOR REPLICATION オプションがある場合は、その制約をいったん削除してから、再作成します。SQL Server Compact Edition サブスクライバでは、NOT FOR REPLICATION オプションを指定した場合も制約は作成されますが、NOT FOR REPLICATION 構文は含められません。
  • 接続タイムアウト
    SQL Server Compact Edition サブスクリプションでは、通信障害が発生した場合、(ユーザーが構成する) タイムアウトの期限内に接続が復元されると、最後に正常に転送されたデータ ブロックから再開することで通信障害から復旧します。これにより、基になっている転送接続の信頼性が低い場合や転送接続が一時的に使用できない場合も、同期が可能になります。
  • スナップショット
    SQL Server Compact Edition では、スナップショットの場所オプションに、既定および代替の場所を指定できます。スナップショットの代替場所を指定するには、sp_addmergepublication ストアド プロシージャを使用するか、SQL Server Management Studio を使用して既存パブリケーションのプロパティを変更することによって、このオプションを設定します。
    • sp_addmergepublication ストアド プロシージャを使用するには
      @snapshot\_in\_defaultfolder オプションを FALSE に設定し、@alt_snapshot_folder= <スナップショットの代替フォルダの場所> に設定します。
    • 既存パブリケーションの [パブリケーションのプロパティ] の設定を変更するには
      [パブリケーションのプロパティ] ダイアログ ボックスの [スナップショット] セクションで、[ファイルを既定のフォルダに保存する] チェック ボックスをオフにします。次に、[ファイルを次のフォルダに保存する] チェック ボックスをオンにして、新しい場所を指定します。
    メモ :
    SQL Server Compact Edition では、圧縮スナップショット オプションがサポートされていません。

スナップショットの詳細については、「スナップショット フォルダの構成」を参照してください。

SQL Server Compact Edition サブスクライバに反映されない情報

以下の項目は、SQL Server パブリケーションに含めることができますが、SQL Server Compact Edition サブスクライバには反映されません。

  • CHECK 制約
  • 拡張プロパティ
  • ストアド プロシージャ
  • ビュー
  • ユーザー定義関数
  • トリガ

SQL Server Compact Edition レプリケーションではこれらの項目を反映できないので、SQL Server Compact Edition ベースのアプリケーションに同等のロジックを実装する必要があります。これにより、SQL Server Compact Edition データベースと SQL Server データベースの間で一貫性を保つことができます。たとえば、SQL Server データベースに CHECK 制約が含まれる場合は、SQL Server Compact Edition ベースのアプリケーションで、対応するチェックをアプリケーション コードに実装する必要があります。

ローカルの SQL Server Compact Edition データベースでのインデックスの作成

ローカルの SQL Server Compact Edition データベースがパブリケーションに対するサブスクライバである場合も、このデータベースに一意なインデックスを作成できます。この機能は便利ですが、列に一意制約を持たないパブリッシャからサブスクライバに一意でないデータが送信される場合、この機能が原因で問題が発生することがあります。たとえば、C1 列と C2 列を含む T テーブルがあり、C1 に主キーが存在するとします。

C1

C2

A

1

B

2

C

3

初期同期は、SQL Server Compact Edition データベースで行われます。この同期の後、サブスクリプション データベースの C2 に一意なインデックスが追加されます。パブリケーション データベースは変更されません。

次の同期中に、SQL Server により以下の行が挿入されます。

D

3

E

3

この場合、パブリッシャが C2 に一意でない値を挿入するので、同期が失敗します。サブスクリプション データベースから一意制約が削除されない限り、同期は失敗し続けます。

参照

ヘルプおよび情報

SQL Server Compact Edition のサポートについて