sp_reinitsubscription (Transact-SQL)

適用対象: SQL ServerAzure SQL Managed Instance

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

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' パブリケーションの名前を指定します。 publicationsysname で、既定値はすべてです。

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

[ @subscriber = ] 'subscriber' サブスクライバーの名前です。 サブスクライバーsysname で、既定値はありません。

[ @destination_db = ] 'destination_db' コピー先データベースの名前を指定します。 destination_dbは sysname で、既定値はすべてです。

[ @for_schema_change = ] 'for_schema_change' パブリケーション データベースでのスキーマ変更の結果として再初期化が行われるかどうかを示します。 for_schema_changeはビットで、既定値は 0 です。 0 の場合、パブリケーションの一部だけでなく、パブリケーション全体が再初期化されている限り、即時更新を許可するパブリケーションのアクティブなサブスクリプションが再アクティブ化されます。 これは、スキーマの変更の結果として再初期化が開始されていることを意味します。 1 の場合、アクティブなサブスクリプションは、スナップショット エージェントが実行されるまで再アクティブ化されません。

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

Note

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

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

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

リターン コードの値

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

解説

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

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

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

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

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

匿名サブスクリプションをパブリケーションに再同期するには、サブスクライバーとしてすべてまたは 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'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を実行できます。

参照

サブスクリプションの再初期化
サブスクリプションの再初期化
レプリケーション ストアド プロシージャ (Transact-SQL)