sp_mergeクリーンupmetadata (Transact-SQL)

適用対象:SQL Server

SQL Server 2000 (8.x) Service Pack 1 より前のバージョンの SQL Server を実行しているサーバーを含むレプリケーション トポロジでのみ使用する必要があります。 sp_mergecleanupmetadataを使用すると、管理者は、メタデータを 、およびMSmerge_tombstoneシステム テーブルにMSmerge_genhistoryMSmerge_contentsクリーンできます。 このストアド プロシージャは、パブリッシャー側のパブリケーション データベースで実行されます。

Transact-SQL 構文表記規則

構文

sp_mergecleanupmetadata
    [ [ @publication = ] N'publication' ]
    [ , [ @reinitialize_subscriber = ] N'reinitialize_subscriber' ]
[ ; ]

引数

[ @publication = ] N'publication'

出版物の名前。 @publicationは sysname で、既定値は %、すべてのパブリケーションのメタデータをクリーンします。 明示的に指定されている場合は、パブリケーションが既に存在している必要があります。

[ @reinitialize_subscriber = ] N'reinitialize_subscriber'

サブスクライバーを再初期化するかどうかを指定します。 @reinitialize_subscriberは nvarchar(5) で、既定値は true.

  • の場合 true、サブスクリプションは再初期化のマークが付けられます。
  • この場合 false、サブスクリプションは再初期化のマークが付けられません。

リターン コードの値

0 (成功) または 1 (失敗)。

解説

sp_mergecleanupmetadata は、SQL Server 2000 (8.x) Service Pack 1 より前のバージョンの SQL Server を実行しているサーバーを含むレプリケーション トポロジでのみ使用する必要があります。 SQL Server 2000 (8.x) Service Pack 1 以降のみを含むトポロジでは、自動保持ベースのメタデータ クリーンup を使用する必要があります。 このストアド プロシージャを実行する場合は、実行するコンピューター上で、きわめて大きいログファイルが必要であり、作成される可能性があることに注意してください。

実行後sp_mergecleanupmetadata、既定では、メタデータが格納されMSmerge_genhistoryMSmerge_contentsMSmerge_tombstone、再初期化のマークが付けられたパブリケーションのサブスクライバーのすべてのサブスクリプションが失われ、サブスクライバーでの保留中の変更が失われ、現在のスナップショットは古い形式でマークされます。

1 つのデータベースに複数のパブリケーションがあり、それらのパブリケーションのいずれかが無限のパブリケーション保有期間 (@retention) を使用している場合、実行sp_mergecleanupmetadataしても、データベースのマージ レプリケーション変更追跡メタデータは0クリーンされません。 このため、無期限のパブリケーション保有期間は注意して使用してください。

このストアド プロシージャを実行する場合は、@reinitialize_subscriber パラメーターを (既定値) に設定するか、または false.true sp_mergecleanupmetadata@reinitialize_subscriber パラメーターをtrue設定して実行すると、サブスクリプションが最初のスナップショットなしで作成された場合 (たとえば、スナップショットデータとスキーマが手動で適用されていたり、サブスクライバーに既に存在していた場合など)、スナップショットがサブスクライバーで再適用されます。 パブリケーションが再初期化されていない場合は、パブリッシャーとサブスクライバーのデータが確実に同期されるようにする必要があるため、パラメーター false を慎重に使用する必要があります。

@reinitialize_subscriber値に関係なく、sp_mergecleanupmetadataストアド プロシージャの呼び出し時にパブリッシャーまたは再発行サブスクライバーに変更をアップロードしようとしているマージ プロセスが進行中の場合は失敗します。

=N'true' sp_mergeクリーンupmetadata を@reinitialize_subscriber実行する

  1. パブリケーション データベースとサブスクリプション データベースに対するすべての更新を停止することをお勧めしますが、必須ではありません。 更新が続行されると、パブリケーションの再初期化時に最後のマージ以降にサブスクライバーで行われた更新はすべて失われますが、データの収束メイン保持されます。

  2. マージ エージェントを実行してマージを実行します。 マージ エージェントを実行するときは、各サブスクライバーで -Validate agent コマンド ライン オプションを使用することをお勧めします。 連続モードのマージを実行している場合は、このセクションで後述する「連続モードマージに関する特別な考慮事項」を参照してください

  3. すべてのマージが完了したら、次を実行 sp_mergecleanupmetadataします。

  4. 名前付きプル サブスクリプションまたは匿名プル サブスクリプションを使用してすべてのサブスクライバーで実行 sp_reinitmergepullsubscription し、データの収束を確保します。

  5. 連続モードのマージを実行している場合は、このセクションで後述する「連続モードマージに関する特別な考慮事項」を参照してください

  6. すべてのレベルで関係するすべてのマージ パブリケーションに対して、スナップショット ファイルを再生成します。 最初にスナップショットを再生成せずにマージしようとすると、スナップショットを再生成するように要求されます。

  7. パブリケーション データベースをバックアップします。 これを行わないと、パブリケーション データベースの復元後にマージ エラーが発生する可能性があります。

=N'false' で sp_mergeクリーンupmetadata @reinitialize_subscriber を実行する

  1. パブリケーション データベースとサブスクリプション データベースに対するすべての更新を停止します。

  2. マージ エージェントを実行してマージを実行します。 マージ エージェントを-Validate実行するときは、各サブスクライバーでエージェント コマンド ライン オプションを使用することをお勧めします。 連続モードのマージを実行している場合は、この記事で後述する連続モードのマージに関する特別な考慮事項を参照してください

  3. すべてのマージが完了したら、次を実行 sp_mergecleanupmetadataします。

  4. 連続モードのマージを実行している場合は、このセクションで後述する「連続モードマージに関する特別な考慮事項」を参照してください

  5. すべてのレベルで関係するすべてのマージ パブリケーションに対して、スナップショット ファイルを再生成します。 最初にスナップショットを再生成せずにマージしようとすると、スナップショットを再生成するように要求されます。

  6. パブリケーション データベースをバックアップします。 これを行わないと、パブリケーション データベースの復元後にマージ エラーが発生する可能性があります。

連続モードのマージに関する特別な考慮事項

連続モードのマージを実行している場合は、次のいずれかを行う必要があります。

  • マージ エージェントを停止し、パラメーターを指定せずに別のマージを-Continuous実行します。

  • パブリケーションを非アクティブ化して、パブリケーション sp_changemergepublication の状態をポーリングしている連続モードのマージが失敗することを確認します。

    EXEC central..sp_changemergepublication @publication = 'dynpart_pubn', @property = 'status', @value = 'inactive';
    

実行 sp_mergecleanupmetadataの手順 3 を完了したら、それらを停止した方法に基づいて連続モードのマージを再開します。 次のいずれか:

  • マージ エージェントの -Continuous パラメーターを再度追加します。

  • でパブリケーション sp_changemergepublicationを再アクティブ化します。

    EXEC central..sp_changemergepublication @publication = 'dynpart_pubn', @property = 'status', @value = 'active'
    

アクセス許可

sysadmin 固定サーバー ロールまたは固定データベース ロールdb_ownerメンバーのみが実行sp_mergecleanupmetadataできます。

このストアド プロシージャを使用するには、パブリッシャーが SQL Server 2000 (8.x) を実行している必要があります。 サブスクライバーは、SQL Server 2000 (8.x) または SQL Server 7.0 Service Pack 2 のいずれかを実行している必要があります。