次の方法で共有


sp_addpublication_snapshot (Transact-SQL)

適用対象: SQL Server Azure SQL Managed Instance

指定されたパブリケーションのスナップショット エージェントを作成します。 このストアド プロシージャは、パブリッシャー側のパブリケーション データベースで実行されます。

重要

リモート ディストリビューターを使用してパブリッシャーを構成する場合、 @job_login@job_passwordを含むすべてのパラメーターに指定された値がプレーン テキストとしてディストリビューターに送信されます。 このストアド プロシージャを実行する前に、パブリッシャーとリモート ディストリビューターの間の接続を暗号化する必要があります。 詳細については、「接続を暗号化するために SQL Server データベース エンジンを構成する」を参照してください。

Transact-SQL 構文表記規則

構文

sp_addpublication_snapshot
    [ @publication = ] N'publication'
    [ , [ @frequency_type = ] frequency_type ]
    [ , [ @frequency_interval = ] frequency_interval ]
    [ , [ @frequency_subday = ] frequency_subday ]
    [ , [ @frequency_subday_interval = ] frequency_subday_interval ]
    [ , [ @frequency_relative_interval = ] frequency_relative_interval ]
    [ , [ @frequency_recurrence_factor = ] frequency_recurrence_factor ]
    [ , [ @active_start_date = ] active_start_date ]
    [ , [ @active_end_date = ] active_end_date ]
    [ , [ @active_start_time_of_day = ] active_start_time_of_day ]
    [ , [ @active_end_time_of_day = ] active_end_time_of_day ]
    [ , [ @snapshot_job_name = ] N'snapshot_job_name' ]
    [ , [ @publisher_security_mode = ] publisher_security_mode ]
    [ , [ @publisher_login = ] N'publisher_login' ]
    [ , [ @publisher_password = ] N'publisher_password' ]
    [ , [ @job_login = ] N'job_login' ]
    [ , [ @job_password = ] N'job_password' ]
    [ , [ @publisher = ] N'publisher' ]
    [ , [ @distributor_security_mode = ] distributor_security_mode ]
    [ , [ @distributor_login = ] N'distributor_login' ]
    [ , [ @distributor_password = ] N'distributor_password' ]
[ ; ]

引数

[ @publication = ] N'publication'

出版物の名前。 @publicationsysname で、既定値はありません。

[ @frequency_type = ] frequency_type

スナップショット エージェントが実行される頻度。 @frequency_typeint で、次のいずれかの値を指定できます。

説明
1 1 回。
4 (既定) 毎日
8 週単位
16 月単位
32 frequency_interval を基準とした月単位
64 SQL Server エージェントの起動時
128 コンピューターがアイドル状態のときに実行する

[ @frequency_interval = ] frequency_interval

@frequency_typeによって設定された頻度に適用する値。 @frequency_intervalint で、次のいずれかの値を指定できます。

frequency_typeの値 frequency_interval への影響
1 @frequency_interval は使用されません。
4 (既定) @frequency_interval日ごと。既定値は日単位です。
8 @frequency_interval は、次の 1 つ以上 ( と組み合わせたもの|(ビットごとの OR) 論理演算子):

1 = 日曜日 |

2 = 月曜日 |

4 = 火曜日 |

8 = 水曜日 |

16 = 木曜日 |

32 = 金曜日 |

64 = 土曜日
16 月の @frequency_interval 日。
32 @frequency_interval は、次のいずれかの値です。

1 = 日曜日 |

2 = 月曜日 |

3 = 火曜日 |

4 = 水曜日 |

5 = 木曜日 |

6 = 金曜日 |

7 = 土曜日 |

8 = 日 |

9 = 平日 |

10 = 週末
64 @frequency_interval は使用されません。
128 @frequency_interval は使用されません。

[ @frequency_subday = ] frequency_subday

freq_subday_intervalの単位。 @frequency_subdayint であり、これらの値のいずれかを指定できます。

説明
1 1 回。
2 Second
4 (既定)
8 時間

[ @frequency_subday_interval = ] frequency_subday_interval

frequency_subdayの間隔 (分単位)。 @frequency_subday_intervalint で、既定値は 5 です。

[ @frequency_relative_interval = ] frequency_relative_interval

スナップショット エージェントが実行される日付。 @frequency_relative_intervalint で、既定値は 1 です。

[ @frequency_recurrence_factor = ] frequency_recurrence_factor

frequency_typeで使用される繰り返し係数。 @frequency_recurrence_factorint で、既定値は 0 です。

[ @active_start_date = ] active_start_date

スナップショット エージェントが最初にスケジュールされた日付で、yyyyMMddとして書式設定されます。 @active_start_dateint で、既定値は 0 です。

[ @active_end_date = ] active_end_date

スナップショット エージェントのスケジュールが終了した日付(yyyyMMdd形式)。 @active_end_dateint で、既定値は 99991231 で、9999 年 12 月 31 日を意味します。

[ @active_start_time_of_day = ] active_start_time_of_day

スナップショット エージェントが最初にスケジュールされ、HHmmss形式の時刻。 @active_start_time_of_dayint で、既定値は 0 です。

[ @active_end_time_of_day = ] active_end_time_of_day

スナップショット エージェントのスケジュールが終了した時刻。HHmmss形式。 @active_end_time_of_dayint で、既定値は 235959 です。これは、24 時間制で測定される午後 11 時 59 分 59 分を意味します。

[ @snapshot_job_name = ] N'snapshot_job_name'

既存のジョブが使用されている場合は、既存のスナップショット エージェント ジョブ名の名前。 @snapshot_job_namenvarchar(100) で、既定値は NULL です。 このパラメーターは内部使用を目的としており、新しいパブリケーションを作成するときに指定しないでください。 @snapshot_agent_nameを指定する場合は、@job_login@job_passwordNULLする必要があります。

[ @publisher_security_mode = ] publisher_security_mode

Note

Microsoft Entra ID の、旧称は Azure Active Directory(Azure AD)です。

パブリッシャーに接続するときにエージェントによって使用されるセキュリティ モード。 @publisher_security_modeint で、既定値は 1 です。 SQL Server 以外のパブリッシャーには、 0 の値を指定する必要があります。 可能な場合は、Windows 認証を使用します。 次の値は、セキュリティ モードを定義します。

  • 0 は SQL Server 認証を指定します。
  • 1はWindows 認証を指定します。
  • 2 は、SQL Server 2022 (16.x) CU 6 以降の Microsoft Entra パスワード認証を指定します。
  • 3 は、SQL Server 2022 (16.x) CU 6 以降の Microsoft Entra 統合認証を指定します。
  • 4 は、SQL Server 2022 (16.x) CU 6 以降の Microsoft Entra トークン認証を指定します。

[ @publisher_login = ] N'publisher_login'

パブリッシャーに接続するときに使用されるログイン。 @publisher_loginsysname で、既定値は NULL です。 @publisher_security_mode0されている場合は、@publisher_loginを指定する必要があります。 @publisher_loginNULLされ、@publisher_security_mode1されている場合、@job_loginで指定されたアカウントがパブリッシャーに接続するときに使用されます。

[ @publisher_password = ] N'publisher_password'

パブリッシャーに接続するときに使用するパスワード。 @publisher_passwordsysname で、既定値は NULL です。

重要

認証情報はスクリプト ファイルに格納しないでください。 セキュリティを向上させるために、実行時にログイン名とパスワードを指定することをお勧めします。

[ @job_login = ] N'job_login'

エージェントが実行されているアカウントのログイン。 Azure SQL Managed Instance では、SQL Server アカウントを使用します。 @job_loginnvarchar(257) で、既定値は NULL です。 このアカウントは、ディストリビューターへのエージェント接続に常に使用されます。 新しいスナップショット エージェント ジョブを作成するときに、このパラメーターを指定する必要があります。

SQL Server 以外のパブリッシャーの場合、これは sp_adddistpublisherで指定されたログインと同じである必要があります。

[ @job_password = ] N'job_password'

エージェントが実行される Windows アカウントのパスワード。 @job_passwordsysname で、既定値はありません。 新しいスナップショット エージェント ジョブを作成するときに、このパラメーターを指定する必要があります。

重要

認証情報はスクリプト ファイルに格納しないでください。 セキュリティを向上させるために、実行時にログイン名とパスワードを指定することをお勧めします。

[ @publisher = ] N'publisher'

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

@publisherは、SQL Server パブリッシャーでスナップショット エージェントを作成するときに使用しないでください。

[ @distributor_security_mode = ] distributor_security_mode

単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。

[ @distributor_login = ] N'distributor_login'

単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。

[ @distributor_password = ] N'distributor_password'

単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。

リターン コードの値

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

解説

sp_addpublication_snapshot は、スナップショット レプリケーション、トランザクション レプリケーション、マージ レプリケーションで使用されます。

-- To avoid storing the login and password in the script file, the values 
-- are passed into SQLCMD as scripting variables. 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 @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks'; 
SET @publication = N'AdvWorksProductTran'; 
-- Windows account used to run the Log Reader and Snapshot Agents.
SET @login = $(Login); 
-- This should be passed at runtime.
SET @password = $(Password); 

-- Enable transactional or snapshot replication on the publication database.
EXEC sp_replicationdboption 
    @dbname=@publicationDB, 
    @optname=N'publish',
    @value = N'true';

-- Execute sp_addlogreader_agent to create the agent job. 
EXEC sp_addlogreader_agent 
    @job_login = @login, 
    @job_password = @password,
    -- Explicitly specify the use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;

-- Create a new transactional publication with the required properties. 
EXEC sp_addpublication 
    @publication = @publication, 
    @status = N'active',
    @allow_push = N'true',
    @allow_pull = N'true',
    @independent_agent = N'true';

-- Create a new snapshot job for the publication, using a default schedule.
EXEC sp_addpublication_snapshot 
    @publication = @publication, 
    @job_login = @login, 
    @job_password = @password,
    -- Explicitly specify the use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;
GO

アクセス許可

sysadmin固定サーバー ロールまたは固定データベース ロールdb_ownerのメンバーのみがsp_addpublication_snapshotを実行できます。