次の方法で共有


データ オブジェクトとデータベース オブジェクトをパブリッシュする

パブリケーションを作成するときは、パブリッシュするテーブルとその他のデータベース オブジェクトを選択します。 レプリケーションを使用して、次のデータベース オブジェクトを発行できます。

データベース オブジェクト スナップショット レプリケーションとトランザクション レプリケーション マージ レプリケーション
X X
パーティション テーブル X X
ストアド プロシージャ - 定義 (Transact-SQL および CLR) X X
ストアド プロシージャ - 実行 (Transact-SQL および CLR) X いいえ
見解 X X
インデックス付きビュー X X
テーブルとしてのインデックス付きビュー X いいえ
User-Defined データ型 (CLR) X X
User-Defined 関数 (Transact-SQL および CLR) X X
別名データ型 X X
フルテキスト インデックス X X
スキーマ オブジェクト (制約、インデックス、ユーザー DML トリガー、拡張プロパティ、照合順序) X X

パブリケーションの作成

パブリケーションを作成するには、次の情報を指定します。

  • ディストリビューター。

  • スナップショット ファイルの場所。

  • パブリケーション データベース。

  • 作成するパブリケーションの種類 (スナップショット、トランザクション、更新可能なサブスクリプションを含むトランザクション、またはマージ)。

  • パブリケーションに含めるデータ オブジェクトとデータベース オブジェクト (アーティクル)。

  • すべての種類の出版物に対応する静的な行フィルターと列フィルター、およびマージ出版物のためのパラメータ化された行フィルターと結合フィルター。

  • スナップショット エージェントのスケジュール。

  • 次のエージェントが実行されるアカウント: すべてのパブリケーションのスナップショット エージェント。すべてのトランザクション パブリケーションのログ リーダー エージェント。サブスクリプションの更新を許可するトランザクション パブリケーションのキュー リーダー エージェント。

  • パブリケーションの名前と説明。

パブリケーションの操作方法については、次のトピックを参照してください。

アーティクルまたはパブリケーションを削除しても、サブスクライバーからオブジェクトは削除されません。

テーブルの発行

最も一般的にパブリッシュされるオブジェクトはテーブルです。 次のリンクは、パブリッシュ テーブルに関連する領域に関する追加情報を提供します。

レプリケーション用のテーブルをパブリッシュするときに、参照整合性の宣言 (主キー制約、参照制約、一意制約)、インデックス、ユーザー DML トリガー (DDL トリガーをレプリケートできない)、拡張プロパティ、照合順序など、サブスクライバーにコピーするスキーマ オブジェクトを指定できます。 拡張プロパティは、パブリッシャーとサブスクライバー間の初期同期でのみレプリケートされます。 初期同期後に拡張プロパティを追加または変更した場合、変更はレプリケートされません。

スキーマ オプションを指定するには、「 スキーマ オプションの指定」 または「 SchemaOption」を参照してください。

パーティション テーブルとパーティション インデックス

レプリケーションでは、パーティション テーブルとパーティション インデックスの発行がサポートされます。 サポートのレベルは、使用するレプリケーションの種類と、パブリケーションとパーティション テーブルに関連付けられているアーティクルに指定するオプションによって異なります。 詳細については、「 パーティション テーブルとパーティション インデックスのレプリケート」を参照してください。

ストアド プロシージャの発行

すべての種類のレプリケーションを使用すると、ストアド プロシージャ定義をレプリケートできます。CREATE PROCEDURE は各サブスクライバーにコピーされます。 共通言語ランタイム (CLR) ストアド プロシージャの場合、関連付けられているアセンブリもコピーされます。 プロシージャの変更はサブスクライバーにレプリケートされます。関連付けられているアセンブリに対する変更はありません。

トランザクション レプリケーションでは、ストアド プロシージャの定義をレプリケートするだけでなく、ストアド プロシージャの実行をレプリケートできます。 これは、大量のデータに影響するメンテナンス指向ストアド プロシージャの結果をレプリケートする場合に便利です。 詳細については、「 トランザクション レプリケーションでのストアド プロシージャの実行の公開」を参照してください。

ビュー公開

すべての種類のレプリケーションを使用すると、ビューをレプリケートできます。 ビュー (およびインデックス付きビューの場合は、それに付随するインデックス) をサブスクライバーにコピーできますが、ベース テーブルもレプリケートする必要があります。

インデックス付きビューの場合、トランザクション レプリケーションを使用すると、インデックス付きビューをビューではなくテーブルとしてレプリケートできるため、ベース テーブルもレプリケートする必要がなくなります。 これを行うには、sp_addarticle (Transact-SQL)@typeパラメーターに対して"インデックス付きビューログベース" オプションのいずれかを指定します。 sp_addarticleの使用方法の詳細については、「アーティクルの定義」を参照してください。

User-Defined 関数の公開

CLR 関数と Transact-SQL 関数の CREATE FUNCTION ステートメントは、各サブスクライバーにコピーされます。 CLR 関数の場合、関連付けられているアセンブリもコピーされます。 関数の変更はサブスクライバーにレプリケートされます。関連付けられているアセンブリに対する変更はありません。

User-Defined 型とエイリアス型データ型の公開

ユーザー定義型または別名データ型を使用する列は、他の列と同様にサブスクライバーにレプリケートされます。 レプリケートされた各種類の CREATE TYPEstatement は、テーブルが作成される前にサブスクライバーで実行されます。 ユーザー定義型の場合、関連付けられているアセンブリも各サブスクライバーにコピーされます。 ユーザー定義型と別名データ型への変更はサブスクライバーにレプリケートされません。

型がデータベースで定義されているが、パブリケーションの作成時に列で参照されない場合、その型はサブスクライバーにコピーされません。 その後、データベースでその型の列を作成し、それをレプリケートする場合は、まず、各サブスクライバーに型 (およびユーザー定義型に関連付けられているアセンブリ) を手動でコピーする必要があります。

フルテキスト インデックスの発行

CREATE FULLTEXT INDEX ステートメントが各サブスクライバーにコピーされ、フルテキスト インデックスがサブスクライバーに作成されます。 ALTER FULLTEXT INDEX を使用してフルテキスト インデックスに加えられた変更はレプリケートされません。

パブリッシュされたオブジェクトにスキーマ変更を加える

レプリケーションでは、パブリッシュされたオブジェクトに対するさまざまなスキーマ変更がサポートされます。 SQL Server パブリッシャーで適切なパブリッシュされたオブジェクトに対して次のいずれかのスキーマ変更を行うと、その変更は既定ですべての SQL Server サブスクライバーに反映されます。

  • テーブルを変更

  • ALTER VIEW

  • ALTER PROCEDURE

  • ALTER FUNCTION

  • ALTER TRIGGER

詳細については、「パブリケーション データベースでのスキーマの変更」を参照してください。

発行に関する考慮事項

データベース オブジェクトをパブリッシュするときは、次の問題に注意してください。

  • データベースは、パブリケーションの作成時と初期スナップショットの作成時にユーザーがアクセスできますが、パブリッシャーでのアクティビティが低下した場合にパブリケーションを作成することをお勧めします。

  • パブリケーションが作成された後は、データベースの名前を変更できません。 名前を変更するには、まずデータベースからレプリケーションを削除する必要があります。

  • 他の 1 つ以上のデータベース オブジェクトに依存するデータベース オブジェクトをパブリッシュする場合は、参照されているすべてのオブジェクトをパブリッシュする必要があります。 たとえば、テーブルに依存するビューを発行する場合は、テーブルもパブリッシュする必要があります。

    マージ パブリケーションにアーティクルを追加し、既存のアーティクルが新しいアーティクルに依存している場合は、sp_addmergearticlesp_changemergearticle の @processing_order パラメーターを使用して、両方のアーティクルの処理順序を指定する必要があります。 次のシナリオを考えてみましょう。テーブルを発行しても、テーブルが参照する関数は発行しません。 関数を発行しない場合は、サブスクライバーでテーブルを作成できません。 パブリケーションに関数を追加する場合: sp_addmergearticle@processing_orderパラメーターに値 1 を指定します。sp_changemergearticleの@processing_orderパラメーターに値 2 を指定し、パラメーター @articleのテーブル名を指定します。 この処理順序により、サブスクライバー側で、それに依存するテーブルの前に関数を作成できます。 関数の数値がテーブルの数値より小さい限り、アーティクルごとに異なる数値を使用できます。

  • パブリケーション名に次の文字を含めることはできません: % * [ ] |: " ? \ / <>。

オブジェクトのパブリッシュに関する制限事項

  • パブリッシュできるアーティクルと列の最大数は、パブリケーションの種類によって異なります。 詳細については、「 SQL Server の最大容量仕様」の「レプリケーション オブジェクト」セクションを参照してください。

  • WITH ENCRYPTION として定義されているストアド プロシージャ、ビュー、トリガー、およびユーザー定義関数は、SQL Server レプリケーションの一部として発行できません。

  • XML スキーマ コレクションはレプリケートできますが、変更は初期スナップショットの後にレプリケートされません。

  • トランザクション レプリケーション用にパブリッシュされるテーブルには、主キーが必要です。 テーブルがトランザクション レプリケーション パブリケーション内にある場合、主キー列に関連付けられているインデックスを無効にすることはできません。 これらのインデックスは、レプリケーションに必要です。 インデックスを無効にするには、最初にパブリケーションからテーブルを削除する必要があります。

  • sp_bindefault (Transact-SQL) で作成されたバインドされた既定値はレプリケートされません (バインドされた既定値は非推奨となり、ALTER TABLE または CREATE TABLE の DEFAULT キーワードを使用して作成された既定値を優先します)。

  • インデックス付きビューの NOEXPAND ヒントを含む関数は、ディストリビューション エージェントがそれらを配信する順序のため、参照先のテーブルおよびインデックス付きビューと同じパブリケーションでパブリッシュできません。 この問題を回避するには、テーブルとインデックス付きビューの作成を最初のパブリケーションに配置し、インデックス付きビューの NOEXPAND ヒントを含む関数を、最初のパブリケーションの完了後にパブリッシュする 2 つ目のパブリケーションに追加します。 または、これらの関数のスクリプトを作成し、sp_addpublicationの @post_snapshot_script パラメーターを使用してスクリプトを配信します。

スキーマとオブジェクトの所有権

レプリケーションには、スキーマとオブジェクトの所有権に関して、パブリケーションの新規作成ウィザードで次の既定の動作があります。

  • 互換性レベルが 90 以上のマージ パブリケーション、スナップショット パブリケーション、およびトランザクション パブリケーションのアーティクルの場合:既定では、サブスクライバーのオブジェクト所有者はパブリッシャーの対応するオブジェクトの所有者と同じです。 オブジェクトを所有するスキーマがサブスクライバーに存在しない場合は、自動的に作成されます。

  • 互換性レベルが 90 未満のマージ パブリケーション内のアーティクルの場合:既定では、所有者は空白のままにされ、サブスクライバーでのオブジェクトの作成時に dbo として指定されます。

  • Oracle パブリケーションのアーティクルの場合: 既定では、所有者は dbo として指定されます。

  • 文字モード のスナップショット (SQL Server 以外のサブスクライバーおよび SQL Server Compact サブスクライバーに使用される) を使用するパブリケーションのアーティクルの場合、既定では所有者は空白のままです。 所有者は、ディストリビューション エージェントまたはマージ エージェントがサブスクライバーに接続するために使用するアカウントに関連付けられている所有者に既定で設定されます。

オブジェクトの所有者は 、[アーティクルのプロパティ - <Article> ] ダイアログ ボックスと、次のストアド プロシージャを使用して変更できます: sp_addarticlesp_addmergearticlesp_changearticleおよびsp_changemergearticle。 詳細については、「 パブリケーションプロパティの表示と変更」、 アーティクルの定義、アーティクルの プロパティの表示と変更を参照してください。

以前のバージョンの SQL Server を実行しているサブスクライバーにデータを発行する

  • 以前のバージョンの SQL Server を実行しているサブスクライバーに発行する場合、レプリケーション固有の機能と製品全体の機能の両方で、そのバージョンの機能に制限されます。

  • マージ パブリケーションでは互換性レベルが使用されます。これにより、パブリケーションで使用できる機能が決まります。これにより、以前のバージョンの SQL Server を実行するサブスクライバーをサポートできます。

複数のパブリケーションでのテーブルの発行

レプリケーションでは、次の制限がある複数のパブリケーション (データの再発行を含む) でのアーティクルの発行がサポートされています。

  • アーティクルがトランザクション パブリケーションとマージ パブリケーションでパブリッシュされる場合は、マージ アーティクルの @published_in_tran_pub プロパティが TRUE に設定されていることを確認します。 プロパティの設定の詳細については、「パブリケーションのプロパティ の表示と変更」および「アーティクルのプロパティ表示と変更」を参照してください。

    アーティクルがトランザクション サブスクリプションの一部であり、マージ パブリケーションに含まれている場合は、 @published_in_tran_pub プロパティも設定する必要があります。 この場合、既定では、トランザクション レプリケーションではサブスクライバーのテーブルが読み取り専用として扱われることが想定されることに注意してください。マージ レプリケーションがトランザクション サブスクリプション内のテーブルにデータ変更を加えると、データの非収束が発生する可能性があります。 この可能性を回避するには、マージ パブリケーションでこのようなテーブルをダウンロード専用として指定することをお勧めします。 これにより、マージ サブスクライバーがテーブルにデータ変更をアップロードできなくなります。 詳細については、「ダウンロード専用アーティクルを使用したマージ レプリケーションのパフォーマンス最適化」を参照してください。

  • マージ パブリケーションと、キュー更新サブスクリプションを含むトランザクション パブリケーションの両方でアーティクルをパブリッシュすることはできません。

  • サブスクリプションの更新をサポートするトランザクション パブリケーションに含まれるアーティクルは再発行できません。

  • キュー更新サブスクリプションをサポートする複数のトランザクション パブリケーションでアーティクルが発行される場合、次のプロパティはすべてのパブリケーションでアーティクルに対して同じ値を持つ必要があります。

    プロパティ sp_addarticleのパラメーター
    ID 範囲の管理 @auto_identity_range (非推奨) と @identityrangemangementoption
    パブリッシャー ID の範囲 @pub_identity_range
    ID 範囲 @identity_range
    IDの範囲しきい値 @threshold

    これらのパラメーターの詳細については、「 sp_addarticle (Transact-SQL)」を参照してください。

  • アーティクルが複数のマージ パブリケーションで発行される場合、次のプロパティは、すべてのパブリケーションでアーティクルに対して同じ値を持つ必要があります。

    プロパティ sp_addmergearticleのパラメーター
    列の追跡 @column_tracking
    スキーマ オプション @schema_option
    列フィルタリング @vertical_partition
    サブスクライバーのアップロード オプション @加入者アップロードオプション
    条件付き削除の追跡 @delete_tracking
    エラー補正 @compensate_for_errors
    ID 範囲の管理 @auto_identity_range (非推奨) と @identityrangemangementoption
    パブリッシャー ID の範囲 @pub_identity_range
    識別範囲 @identity_range
    ID範囲の閾値 @threshold
    パーティション オプション @partition_options
    BLOB 列ストリーミング @stream_blob_columns
    フィルターの種類 @filter_type ( sp_addmergefilter のパラメーター)

    これらのパラメーターの詳細については、 sp_addmergearticle (Transact-SQL) および sp_addmergefilter (Transact-SQL) を参照してください。

  • トランザクション レプリケーションとフィルター処理されていないマージ レプリケーションでは、複数のパブリケーションでテーブルをパブリッシュしてから、サブスクリプション データベース内の 1 つのテーブル内でサブスクライブできます (一般的にロールアップ シナリオと呼ばれます)。 ロールアップは、多くの場合、中央サブスクライバーの 1 つのテーブル内の複数の場所からデータのサブセットを集計するために使用されます。 フィルター付きマージパブリケーションは、サーバー集中型サブスクライバーシナリオをサポートしていません。 マージ レプリケーションの場合、ロール アップは通常、パラメーター化された行フィルターを含む単一のパブリケーションを介して実装されます。 詳細については、「 パラメーター化された行フィルター」を参照してください。

こちらもご覧ください

既存のパブリケーションへのアーティクルの追加と削除
[ディストリビューションの構成]
サブスクリプションを初期化する
スクリプト レプリケーション
パブリッシャーのセキュリティ保護
パブリケーションを購読する