既存のパブリケーションでのアーティクルの追加および削除

適用対象:SQL ServerAzure SQL Managed Instance

パブリケーションを作成したら、アーティクルを追加および削除できます。 アーティクルはいつでも追加できますが、アーティクルを削除するために必要な操作は、レプリケーションの種類と、アーティクルを削除するタイミングによって異なります。

アーティクルの追加

アーティクルを追加するには、アーティクルへのパブリケーションの追加、パブリケーションの新しいスナップショットの作成、サブスクリプションの同期による新しいアーティクルのスキーマとデータの適用を行います。

注意

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

  1. 次のいずれかの方法を使用して、1 つ以上のアーティクルを追加します。

  2. パブリケーションにアーティクルを追加したら、パブリケーションの新しいスナップショット (およびパラメーター化されたフィルターを使用したマージ パブリケーションの場合は、すべてのパーティション) を作成する必要があります。 その後、ディストリビューション エージェントまたはマージ エージェントによって、新しいアーティクルのスキーマおよびデータがサブスクライバーにコピーされます (パブリケーション全体が再初期化されるわけではありません)。

  3. スナップショットを作成したら、サブスクリプションを同期し、新しいアーティクルのスキーマおよびデータをコピーします。

    • プッシュ サブスクリプションを同期するには、「Synchronize a Push Subscription」 (プッシュ サブスクリプションの同期) を参照してください。

    • プル サブスクリプションを同期するには、「Synchronize a Pull Subscription」 (プル サブスクリプションの同期) を参照してください。

アーティクルのドロップ

アーティクルはパブリケーションからいつでも削除できます。ただし、次の動作について考慮する必要があります。

  • パブリケーションからアーティクルを削除しても、パブリケーション データベースからオブジェクトが削除されたり、サブスクリプション データベースから対応するオブジェクトが削除されるわけではありません。 DROP <オブジェクト> を使用して、必要に応じてこれらのオブジェクトを削除します。 外部キー制約を使用して他の発行済みアーティクルに関連するアーティクルを削除する場合は、テーブルをサブスクライバーで手動で削除するか、オンデマンド スクリプト実行を使用して削除することをお勧めします。適切な DROP <Object> ステートメントを含むスクリプトを指定します。 詳細については、「 同期中にスクリプトを実行する (レプリケーション Transact-SQL プログラミング)」を参照してください。

  • 互換性レベル 90RTM 以上のマージ パブリケーションの場合、アーティクルはいつでも削除できますが、新しいスナップショットが必要です。 追加として:

    • アーティクルが結合フィルター リレーションシップまたは論理レコード リレーションシップの親アーティクルの場合、最初にリレーションシップの削除が必要ですが、これには再初期化が必要になります。

    • アーティクルにパブリケーションの最後のパラメーター化されたフィルターが含まれる場合、サブスクリプションを再初期化する必要があります。

  • 互換性レベルが 90RTM 未満のマージ パブリケーションの場合、アーティクルは特別な注意をせずに、サブスクリプションの初期同期の前に削除できます。 1 つ以上のサブスクリプションが同期された後にアーティクルが削除された場合、サブスクリプションの削除、再作成、および同期が必要です。

  • スナップショット パブリケーションまたはトランザクション パブリケーションの場合、アーティクルはサブスクリプションを作成する前に、特別な事項を考慮せずに削除できます。 1 つ以上のサブスクリプションが作成された後にアーティクルが削除された場合、サブスクリプションの削除、再作成、および同期が必要です。 サブスクリプションの削除の詳細については、「パブリケーションとsp_dropsubscription のサブスクライブ(Transact-SQL)」を参照してください。 sp_dropsubscription を使用すると、サブスクリプション全体ではなく、サブスクリプションの 1 つのアーティクルを削除できます。

  1. パブリケーションからアーティクルを削除するには、アーティクルを削除し、パブリケーションの新しいスナップショットを作成します。 アーティクルを削除すると、現在のスナップショットは無効になります。したがって新しいスナップショットを作成する必要があります。

  2. パブリケーションからアーティクルを削除したら、パブリケーションの新しいスナップショット (およびパラメーター化されたフィルターを使用したマージ パブリケーションの場合は、すべてのパーティション) を作成する必要があります。

前述のように、場合によっては、アーティクルを削除するために、サブスクリプションの削除、再作成、および同期が必要になる場合があります。 詳細については、「パブリケーションのサブスクライブ」と「データの同期」を参照してください。

注意

SQL Server 2014 (12.x) Service Pack 2 以降、および SQL Server 2016 (13.x) Service Pack 1 以降では、トランザクション レプリケーションに参加しているアーティクルに DROP TABLE DDL コマンドを使用する、テーブルの削除をサポートします。 DROP TABLE DDL がパブリケーションでサポートされる場合、DROP TABLE 操作ではパブリケーションとデータベースからテーブルが削除されます。 ログ リーダー エージェントでは、削除されたテーブルのディストリビューション データベースのクリーンアップ コマンドをポストし、パブリッシャーのメタデータのクリーンアップを実行します。 ログ リーダーで削除されたテーブルを参照しているすべてのログ レコードを処理していない場合、削除されたテーブルに関連付けられている新しいコマンドは無視されます。 既に処理されているレコードは、ディストリビューション データベースに配信されます。 ログ リーダーが廃止 (削除) されたアーティクルをクリーンアップする前に、ディストリビューション エージェントがレコードを処理する場合、これらのレコードはサブスクライバー データベースに適用される可能性があります。 すべてのトランザクション レプリケーション パブリケーションに対する既定の設定では、DROP TABLE DDL をサポートしません。 KB 3170123 には、この改善機能に関する詳細が含まれます。

参照

データとデータベース オブジェクトのパブリッシュ
サブスクリプションの再初期化
パブリケーション データベースでのスキーマの変更