sp_mergecleanupmetadata (Transact-SQL)
SQL Server 2000 Service Pack 1 より前のバージョンの Microsoft SQL Server を実行しているサーバーを含んでいるレプリケーション トポロジでのみ使用します。sp_mergecleanupmetadata によって、管理者は MSmerge_genhistory、MSmerge_contents、MSmerge_tombstone の各システム テーブルでメタデータをクリーンアップできます。このストアド プロシージャは、パブリッシャ側でパブリケーション データベースについて実行されます。
構文
sp_mergecleanupmetadata [ [ @publication = ] 'publication' ]
[ , [ @reinitialize_subscriber = ] 'reinitialize_subscriber' ]
引数
- [ @publication = ] 'publication'
パブリケーションの名前を指定します。publication のデータ型は sysname で、既定値は % です。これは、すべてのパブリケーションのメタデータをクリーンアップすることを表します。パブリケーションを明示的に指定する場合は、これが既に存在している必要があります。
- [ @reinitialize_subscriber = ] 'subscriber'
サブスクライバを再初期化するかどうかを指定します。subscriber のデータ型は nvarchar(5) で、TRUE または FALSE のいずれかを指定できます。既定値は TRUE です。TRUE の場合、サブスクリプションには再初期化のマークが付けられます。FALSE の場合、サブスクリプションには再初期化のマークが付けられません。
解説
sp_mergecleanupmetadata は、レプリケーション トポロジ内に、SQL Server 2000 Service Pack 1 より前の SQL Server を実行しているサーバーがある場合にのみ使用してください。トポロジ内に SQL Server 2000 Service Pack 1 以降だけが含まれる場合は、自動保有期間に基づくメタデータのクリーンアップを使用します。メタデータのクリーンアップの詳細については、「マージ レプリケーションの動作方法」を参照してください。このストアド プロシージャを実行する場合は、実行するコンピュータ上で、きわめて大きいログファイルが必要であり、作成される可能性があることに注意してください。
注意 : |
---|
sp_mergecleanupmetadata の実行後、既定では次の処理を実行します。MSmerge_genhistory、MSmerge_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 の実行
- パブリケーション データベースとサブスクリプション データベースに対するすべての更新を中止することをお勧めしますが必須ではありません。更新を続行すると、パブリケーションが再初期化される際に、前回のマージ以降にサブスクライバ側で行われたすべての更新が失われますが、データの収束は保持されます。
- マージ エージェントを実行してマージを実行します。マージ エージェントを実行する場合は、各サブスクライバで –Validate というエージェント コマンド ライン オプションを使用することをお勧めします。連続モードのマージを実行する場合は、後の「連続モードのマージに関する注意事項」を参照してください。
- すべてのマージが完了したら、sp_mergecleanupmetadata を実行します。
- 名前付きまたは匿名のプル サブスクリプションを使用するすべてのサブスクライバで、sp_reinitmergepullsubscription を実行してデータが収束されるようにします。
- 連続モードのマージを実行する場合は、後の「連続モードのマージに関する注意事項」を参照してください。
- すべてのレベルで関係するすべてのマージ パブリケーションに対して、スナップショット ファイルを再生成します。最初にスナップショットを再生成せずにマージしようとすると、スナップショットを再生成するように要求されます。
- パブリケーション データベースをバックアップします。これが正しく行われないと、パブリケーション データベースの復元後にマージが失敗する可能性があります。
@reinitialize_subscriber = FALSE を指定した sp_mergecleanupmetadata の実行
- パブリケーション データベースおよびサブスクリプション データベースの更新をいったんすべて中止します。
- マージ エージェントを実行してマージを実行します。マージ エージェントを実行する場合は、各サブスクライバで –Validate というエージェント コマンド ライン オプションを使用することをお勧めします。連続モードのマージを実行する場合は、後の「連続モードのマージに関する注意事項」を参照してください。
- すべてのマージが完了したら、sp_mergecleanupmetadata を実行します。
- 連続モードのマージを実行する場合は、後の「連続モードのマージに関する注意事項」を参照してください。
- すべてのレベルで関係するすべてのマージ パブリケーションに対して、スナップショット ファイルを再生成します。最初にスナップショットを再生成せずにマージしようとすると、スナップショットを再生成するように要求されます。
- パブリケーション データベースをバックアップします。これが正しく行われないと、パブリケーション データベースの復元後にマージが失敗する可能性があります。
連続モードのマージに関する注意事項
連続モードのマージを実行する場合は、次のいずれかの操作を行う必要があります。
マージ エージェントを停止し、-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 を実行している必要があります。
戻り値
成功した場合は 0 を、失敗した場合は 1 をそれぞれ返します。
参照
関連項目
MSmerge_genhistory (Transact-SQL)
MSmerge_contents (Transact-SQL)
MSmerge_tombstone (Transact-SQL)