sp_reinitsubscription (Transact-SQL)
サブスクリプションに再初期化のマークを付けます。このストアド プロシージャは、プッシュ サブスクリプションのパブリッシャ側で実行されます。
構文
sp_reinitsubscription [ [ @publication = ] 'publication' ]
[ , [ @article = ] 'article' ]
, [ @subscriber = ] 'subscriber'
[ , [ @destination_db = ] 'destination_db']
[ , [ @for_schema_change = ] 'for_schema_change']
[ , [ @publisher = ] 'publisher' ]
[ , [ @ignore_distributor_failure = ] ignore_distributor_failure ]
[ , [ @invalidate_snapshot = ] invalidate_snapshot ]
引数
[ @publication=] 'publication'
パブリケーションの名前を指定します。publication のデータ型は sysname で、既定値は all です。[ @article=] 'article'
アーティクルの名前を指定します。article のデータ型は sysname で、既定値は all です。即時更新パブリケーションの場合、article は all にする必要があります。これ以外を指定すると、ストアド プロシージャではパブリケーションがスキップされ、エラーがレポートされます。[ @subscriber =] 'subscriber'
サブスクライバの名前を指定します。subscriber のデータ型は sysname で、既定値はありません。[ @destination_db=] 'destination_db'
目的のデータベースの名前を指定します。destination_db のデータ型は sysname で、既定値は all です。[ @for_schema_change=] 'for_schema_change'
パブリケーション データベースでスキーマを変更した結果として、再初期化が行われるかどうかを指定します。for_schema_change のデータ型は bit で、既定値は 0 です。0 の場合、即時更新が可能なパブリケーションに対するアクティブ サブスクリプションは、一部のアーティクルだけでなくパブリケーション全体が再初期化されたときに限り、再アクティブ化されます。これは、スキーマ変更の結果、再初期化が行われることを表します。1 の場合、アクティブ サブスクリプションは、スナップショット エージェントが実行されるまで再アクティブ化されません。[@publisher= ] 'publisher'
SQL Server 以外のパブリッシャを指定します。publisher のデータ型は sysname で、既定値は NULL です。注意 SQL Server パブリッシャに対して、publisher は使用しないでください。
[ @ignore_distributor_failure= ] ignore_distributor_failure
ディストリビュータが存在しないかオフラインの場合でも、再初期化を許可します。ignore_distributor_failure のデータ型は bit で、既定値は 0 です。0 を指定すると、ディストリビュータが存在しないかオフラインの場合、再初期化は失敗します。[ @invalidate_snapshot= ] invalidate_snapshot
既存のパブリケーション スナップショットを無効にします。invalidate_snapshot のデータ型は bit で、既定値は 0 です。1 の場合、パブリケーション用に新しいスナップショットが生成されます。
戻り値
0 (成功) または 1 (失敗)
説明
sp_reinitsubscription は、トランザクション レプリケーションで使用します。
sp_reinitsubscription は、ピア ツー ピア トランザクション レプリケーションに対してはサポートされていません。
初期スナップショットが自動的に適用され、パブリケーションで更新可能なサブスクリプションが許可されない場合のサブスクリプションについては、このストアド プロシージャを実行してからスナップショット エージェントを実行する必要があります。こうすると、スキーマおよび一括コピー プログラム ファイルの準備ができてから、ディストリビューション エージェントでサブスクリプションを再同期化できます。
初期スナップショットが自動的に適用され、パブリケーションで更新可能なサブスクリプションが許可される場合のサブスクリプションについては、ディストリビューション エージェントでサブスクリプションを再同期化するときに、スナップショット エージェントによって以前に作成された最新のスキーマおよび一括コピー プログラム ファイルが使用されます。ディストリビューション エージェントによるサブスクリプションの再同期化は、ディストリビューション エージェントがビジーでない限り、ユーザーが sp_reinitsubscription を実行した直後に行われます。直後に行われなかった場合は、ディストリビューション エージェントのコマンド プロンプト パラメータ MessageInterval で指定されたメッセージ間隔で、再同期化が行われます。
sp_reinitsubscription は、最初のスナップショットが手動で適用されるサブスクリプションには影響しません。
パブリケーションへの匿名サブスクリプションを再同期化するには、subscriber に all または NULL を設定してください。
トランザクション レプリケーションでは、アーティクル レベルでのサブスクリプションの再初期化がサポートされます。アーティクルに再初期化のマークが付けられると、次の同期化の際に、アーティクルのスナップショットがサブスクライバで再適用されます。ただし、同じサブスクライバにサブスクライブされる従属アーティクルがある場合は、特定の状況でパブリケーション内の従属アーティクルも自動的に再初期化されない限り、アーティクルへのスナップショットの再適用は失敗する可能性があります。
アーティクルの事前作成コマンドが "drop" の場合、そのアーティクルのベース オブジェクトのスキーマ バインド ビューとスキーマ バインド ストアド プロシージャに対応するアーティクルにも、再初期化のマークが付けられます。
アーティクルのスキーマ オプションに、主キーに関する宣言済みの参照整合性のスクリプト作成が含まれている場合は、再初期化されるアーティクルのベース テーブルに対して、外部キー リレーションシップが設定されているベース テーブルを持つアーティクルにも、再初期化のマークが付けられます。
使用例
-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). For information about how to use scripting variables
-- on the command line and in SQL Server Management Studio, see the
-- "Executing Replication Scripts" section in the topic
-- "Programming Replication Using System Stored Procedures".
DECLARE @subscriptionDB AS sysname;
DECLARE @publication AS sysname;
SET @subscriptionDB = N'AdventureWorksReplica';
SET @publication = N'AdvWorksProductTran';
USE [AdventureWorksReplica]
-- Execute at the Publisher to reinitialize the push subscription.
EXEC sp_reinitsubscription
@subscriber = $(SubServer),
@destination_db = @subscriptionDB,
@publication = @publication;
GO
-- Start the Distribution Agent.
権限
sp_reinitsubscription を実行できるのは、sysadmin 固定サーバー ロールまたは db_owner 固定データベース ロールのメンバ、またはサブスクリプションの作成者だけです。