sp_reinitsubscription (Transact-SQL)

適用対象: SQL Server Azure SQL Managed Instance

サブスクリプションに再初期化のマークを付けます。 このストアド プロシージャは、プッシュ サブスクリプションのパブリッシャー側で実行されます。

Transact-SQL 構文表記規則

構文

sp_reinitsubscription
    [ [ @publication = ] N'publication' ]
    [ , [ @article = ] N'article' ]
    , [ @subscriber = ] N'subscriber'
    [ , [ @destination_db = ] N'destination_db' ]
    [ , [ @for_schema_change = ] for_schema_change ]
    [ , [ @publisher = ] N'publisher' ]
    [ , [ @ignore_distributor_failure = ] ignore_distributor_failure ]
    [ , [ @invalidate_snapshot = ] invalidate_snapshot ]
[ ; ]

引数

[ @publication = ] N'publication'

出版物の名前。 @publicationsysname で、既定値は all です。

[ @article = ] N'article'

アーティクルの名前。 @articlesysname で、既定値は all です。 即時更新パブリケーションの場合は、 @articleallする必要があります。 それ以外の場合、ストアド プロシージャはパブリケーションをスキップし、エラーを報告します。

[ @subscriber = ] N'subscriber'

サブスクライバーの名前。 @subscribersysname で、既定値はありません。

[ @destination_db = ] N'destination_db'

転送先データベースの名前。 @destination_dbsysname で、既定値は all です。

[ @for_schema_change = ] for_schema_change

パブリケーション データベースでスキーマを変更した結果として、再初期化が行われるかどうかを指定します。 @for_schema_changebit で、既定値は 0 です。

  • 0場合、パブリケーションの一部だけでなく、パブリケーション全体が再初期化されている限り、即時更新を許可するパブリケーションのアクティブなサブスクリプションが再アクティブ化されます。 これは、スキーマの変更の結果として再初期化が開始されていることを意味します。

  • 1場合、アクティブなサブスクリプションは、スナップショット エージェントが実行されるまで再アクティブ化されません。

[ @publisher = ] N'publisher'

SQL Server 以外のパブリッシャーを指定します。 @publishersysname で、既定値は NULL です。

@publisher は、SQL Server パブリッシャーには使用しないでください。

[ @ignore_distributor_failure = ] ignore_distributor_failure

ディストリビューターが存在しない場合やオフラインの場合でも、再初期化を許可します。 @ignore_distributor_failureビットで、既定値は 0 です。 0場合、ディストリビューターが存在しないかオフラインの場合、再初期化は失敗します。

[ @invalidate_snapshot = ] invalidate_snapshot

既存のパブリケーション スナップショットを無効にします。 @invalidate_snapshotbit で、既定値は 0 です。 1場合、パブリケーションの新しいスナップショットが生成されます。

リターン コードの値

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

解説

sp_reinitsubscription はトランザクション レプリケーションで使用されます。

sp_reinitsubscription は、ピアツーピア トランザクション レプリケーションではサポートされていません。

初期スナップショットが自動的に適用され、パブリケーションで更新可能なサブスクリプションが許可されていないサブスクリプションの場合、スキーマと一括コピー プログラム ファイルが準備され、ディストリビューション エージェントがサブスクリプションを再同期できるように、このストアド プロシージャの実行後にスナップショット エージェントを実行する必要があります。

初期スナップショットが自動的に適用され、パブリケーションで更新可能なサブスクリプションが許可されているサブスクリプションの場合、ディストリビューション エージェントは、スナップショット エージェントによって以前に作成された最新のスキーマファイルと一括コピー プログラム ファイルを使用してサブスクリプションを再同期します。 ディストリビューション エージェントは、ディストリビューション エージェントがビジー状態でない場合、ユーザーがsp_reinitsubscriptionを実行した直後にサブスクリプションを再同期します。 それ以外の場合は、メッセージ間隔 (コマンド プロンプト パラメーター MessageInterval で指定ディストリビューション エージェント) の後に同期が発生する可能性があります。

sp_reinitsubscription は、初期スナップショットが手動で適用されるサブスクリプションには影響しません。

匿名サブスクリプションをパブリケーションに再同期するには、 all または NULL@subscriberとして渡します。

トランザクション レプリケーションでは、アーティクル レベルでのサブスクリプションの再初期化がサポートされます。 アーティクルに再初期化のマークが付けられると、次の同期化の際に、アーティクルのスナップショットがサブスクライバーで再適用されます。 ただし、同じサブスクライバーにサブスクライブされる従属アーティクルがある場合は、特定の状況でパブリケーション内の従属アーティクルも自動的に再初期化されない限り、アーティクルへのスナップショットの再適用は失敗する可能性があります。

  • アーティクルのプリクリエーション コマンドが 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'AdventureWorks2022Replica';
SET @publication = N'AdvWorksProductTran';

USE [AdventureWorks2022Replica]

-- Execute at the Publisher to reinitialize the push subscription.
EXEC sp_reinitsubscription 
    @subscriber = $(SubServer),
    @destination_db = @subscriptionDB,
    @publication = @publication;
GO

-- Start the Distribution Agent.

アクセス許可

sysadmin固定サーバー ロールのメンバー、db_owner固定データベース ロールのメンバー、またはサブスクリプションの作成者のみが、sp_reinitsubscriptionを実行できます。