sp_addpublication_snapshot (Transact-SQL)
为指定的发布创建快照代理。此存储过程在发布服务器上对发布数据库执行。
安全说明 |
---|
使用远程分发服务器配置发布服务器时,为所有参数提供的值(包括 job_login 和 job_password)都会以纯文本方式发送到该分发服务器。在执行此存储过程之前,应该对发布服务器及其远程分发服务器之间的连接进行加密。有关详细信息,请参阅加密与 SQL Server 的连接。 |
语法
sp_addpublication_snapshot [ @publication= ] '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 = ] 'snapshot_agent_name' ]
[ , [ @publisher_security_mode = ] publisher_security_mode ]
[ , [ @publisher_login = ] 'publisher_login' ]
[ , [ @publisher_password = ] 'publisher_password' ]
[ , [ @job_login = ] 'job_login' ]
[ , [ @job_password = ] 'job_password' ]
[ , [ @publisher = ] 'publisher' ]
参数
[ @publication=] 'publication'
发布的名称。publication 的数据类型为 sysname,无默认值。[ @frequency_type=] frequency_type
执行快照代理的频率。frequency_type 的数据类型为 int,可以是下列值之一。值
说明
1
一次。
4(默认值)
每天。
8
每周。
16
每月。
32
每月,相对于频率间隔。
64
SQL Server 代理启动时。
128
计算机空闲时运行
[ @frequency_interval=] frequency_interval
应用到 frequency_type 所设置频率的值。frequency_interval 的数据类型为 int,可以为以下值之一。frequency_type 的值
对 frequency_interval 的影响
1
不使用 frequency_interval。
4(默认值)
每 frequency_interval 天,默认为每天。
8
frequency_interval 是以下一个值或多个值(用逻辑运算符 |(位或)组合):
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_subday 的数据类型为 int,可以为下列值之一。值
说明
1
一次
2
第二个
4(默认值)
分钟
8
小时
[ @frequency_subday_interval=] frequency_subday_interval
是 frequency_subday 的时间间隔。frequency_subday_interval 的数据类型为 int,默认值为 5,表示每 5 分钟。[ @frequency_relative_interval=] frequency_relative_interval
快照代理运行的日期。frequency_relative_interval 的数据类型为 int,默认值为 1。[ @frequency_recurrence_factor=] frequency_recurrence_factor
是 frequency_type 使用的重复因子。frequency_recurrence_factor 的数据类型为 int,默认值为 0。[ @active_start_date=] active_start_date
第一次调度快照代理的日期,格式为 YYYYMMDD。active_start_date 的数据类型为 int,默认值为 0。[ @active_end_date=] active_end_date
停止调度快照代理的日期,格式为 YYYYMMDD。active_end_date 的数据类型为 int,默认值为 99991231,表示 9999 年 12 月 31 日。[ @active_start_time_of_day=] active_start_time_of_day
第一次调度快照代理的时间,格式为 HHMMSS。active_start_time_of_day 的数据类型为 int,默认值为 0。[ @active_end_time_of_day=] active_end_time_of_day
停止安排快照代理的时间,格式为 HHMMSS。active_end_time_of_day 的数据类型为 int,默认值为 235959,表示 24 小时制的 11:59:59 P.M.。[ @snapshot_job_name = ] 'snapshot_agent_name'
现有快照代理作业的名称(如果正在使用现有作业)。snapshot_agent_name 的数据类型为 nvarchar(100),默认值为 NULL。此参数只限内部使用,创建新发布时不应指定它。如果指定了 snapshot_agent_name,则 job_login 和 job_password 必须为 NULL。[ @publisher_security_mode= ] publisher_security_mode
连接到发布服务器时代理所使用的安全模式。publisher_security_mode 的数据类型为 smallint,默认值为 1。0 指定 SQL Server 身份验证,1 指定 Windows 身份验证。对于非 SQL Server 发布服务器,必须将该值指定为 0。请尽可能使用 Windows 身份验证。[ @publisher_login= ] 'publisher_login'
连接到发布服务器时所使用的登录名。publisher_login 的数据类型为 sysname,默认值为 NULL。如果 publisher_security_mode 为 0,则必须指定 publisher_login。如果 publisher_login 的值为 NULL 且 publisher_security_mode 的值为 1,则连接到发布服务器时,将使用 job_login 中指定的 Windows 帐户。[ @publisher_password= ] 'publisher_password'
连接到发布服务器时所用的密码。publisher_password 的数据类型为 sysname,默认值为 NULL。安全说明 请不要将身份验证信息存储在脚本文件中。为了提高安全性,建议您在运行时提供登录名和密码。
[ @job_login= ] 'job_login'
运行代理所用的 Windows 帐户的登录名。job_login 的数据类型为 nvarchar(257),默认值为 NULL。此 Windows 帐户总是用于与分发服务器建立代理连接。创建新的快照代理作业时,必须提供此参数。注意 对于非 SQL Server 发布服务器,此参数必须是在 sp_adddistpublisher (Transact-SQL) 中指定的同一个登录名。
[ @job_password= ] 'job_password'
运行代理时所用的 Windows 帐户的密码。job_password 的数据类型为 sysname,其默认值为 NULL。创建新的快照代理作业时,必须提供此参数。如果 job_password 为 NULL 且创建快照的用户为 sysadmin,此参数将默认为运行 SQL Server 代理时所用的帐户。安全说明 请不要将身份验证信息存储在脚本文件中。为了提高安全性,建议您在运行时提供登录名和密码。
[ @publisher= ] 'publisher'
指定一个非 SQL Server 发布服务器。publisher 的数据类型为 sysname,默认值为 NULL。注意 在 SQL Server 发布服务器中创建快照代理时,不应使用 publisher。
返回代码值
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。