次の方法で共有


sp_mergecleanupmetadata (Transact-SQL)

適用対象: SQL Server

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

Transact-SQL 構文表記規則

構文

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

引数

[ @publication = ] N'publication'

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

[ @reinitialize_subscriber = ] N'reinitialize_subscriber'

サブスクライバーを再初期化するかどうかを指定します。 @reinitialize_subscribernvarchar(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 以降のみを含むトポロジでは、保持ベースのメタデータの自動クリーンアップを使用する必要があります。 このストアド プロシージャを実行する場合は、実行するコンピューター上で、きわめて大きいログファイルが必要であり、作成される可能性があることに注意してください。

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

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

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

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

@reinitialize_subscriber = N'true' でsp_mergecleanupmetadataを実行する

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

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

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

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

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

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

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

@reinitialize_subscriber = N'false' でsp_mergecleanupmetadataを実行する

  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 のいずれかを実行している必要があります。