sp_mergecleanupmetadata (Transact-SQL)

SQL Server 2000 Service Pack 1 より前のバージョンの Microsoft SQL Server を実行しているサーバーが含まれるレプリケーション トポロジでのみ使用します。 sp_mergecleanupmetadata によって、管理者は MSmerge_genhistoryMSmerge_contentsMSmerge_tombstone の各システム テーブルでメタデータをクリーンアップできます。 このストアド プロシージャは、パブリッシャー側でパブリケーション データベースについて実行されます。

トピック リンク アイコン Transact-SQL 構文表記規則

構文

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

引数

  • [ @publication = ] 'publication'
    パブリケーションの名前です。 publication のデータ型は sysname で、既定値は % です。これは、すべてのパブリケーションのメタデータをクリーンアップすることを表します。 パブリケーションを明示的に指定する場合は、これが既に存在している必要があります。

  • [ @reinitialize_subscriber = ] 'subscriber'
    サブスクライバーを再初期化するかどうかを指定します。 subscriber のデータ型は nvarchar(5) で、TRUE または FALSE を指定できます。既定値は TRUE です。 TRUE の場合、サブスクリプションには再初期化のマークが付けられます。 FALSE の場合、サブスクリプションには再初期化のマークが付けられません。

戻り値

成功した場合は 0 を、失敗した場合は 1 をそれぞれ返します。

説明

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

注記注意

sp_mergecleanupmetadata の実行後、既定では次の処理を実行します。MSmerge_genhistoryMSmerge_contents、および MSmerge_tombstone にメタデータを持つパブリケーションのサブスクライバー上で、すべてのサブスクリプションに再初期化のマークが付けられ、サブスクライバーでの保留中の変更を消去した後、現在のスナップショットには期限切れとマークされます。

注意

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

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

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

@reinitialize_subscriber = TRUE を指定した sp_mergecleanupmetadata の実行

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

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

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

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

  5. 連続モードのマージを実行する場合は、後の「連続モードのマージに関する注意事項」を参照してください。

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

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

@reinitialize_subscriber = 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'
    

権限

sp_mergecleanupmetadata を実行できるのは、固定サーバー ロール sysadmin または固定データベース ロール db_owner のメンバーだけです。

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

関連項目

参照

MSmerge_genhistory (Transact-SQL)

MSmerge_contents (Transact-SQL)

MSmerge_tombstone (Transact-SQL)