sp_adddynamicsnapshot_job (Transact-SQL)

Создает задание агента, которое формирует моментальный снимок отфильтрованных данных для публикации с параметризированными фильтрами строк. Эта хранимая процедура выполняется на издателе в базе данных публикации. Эта хранимая процедура используется администратором, чтобы вручную создавать задания моментальных снимков отфильтрованных данных для подписчиков.

ПримечаниеПримечание

Чтобы создать задание моментального снимка отфильтрованных данных, необходимо существование стандартного задания моментальных снимков для публикации.

Дополнительные сведения см. в разделе Моментальные снимки для публикаций слиянием с параметризованными фильтрами.

Значок ссылки на разделСинтаксические обозначения в Transact-SQL

Синтаксис

sp_adddynamicsnapshot_job [ @publication = ] 'publication' 
    [ , [ @suser_sname = ] 'suser_sname' ] 
    [ , [ @host_name = ] 'host_name' ] 
    [ , [ @dynamic_snapshot_jobname = ] 'dynamic_snapshot_jobname' OUTPUT ] 
    [ , [ @dynamic_snapshot_jobid = ] 'dynamic_snapshot_jobid' OUTPUT ] 
    [ , [ @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 ]

Аргументы

  • [ @publication = ] 'publication'
    Имя публикации, к которой требуется добавить задание моментального снимка отфильтрованных данных. Аргумент publication имеет тип sysname и не имеет значения по умолчанию.

  • [ @suser_sname= ] 'suser_sname'
    Значение, используемое во время создания моментального снимка отфильтрованных данных для подписки, отсортированной по значению функции SUSER_SNAME на подписчике. Аргумент suser_sname имеет тип sysname и не имеет значения по умолчанию. Аргумент suser_sname должен иметь значение NULL, если функция не используется для динамической фильтрации публикации.

  • [ @host_name= ] 'host_name'
    Значение, используемое во время создания моментального снимка отфильтрованных данных для подписки, отсортированной по значению функции HOST_NAME на подписчике. Аргумент host_name имеет тип sysname и не имеет значения по умолчанию. Аргумент host_name должен иметь значение NULL, если функция не используется для динамической фильтрации публикации.

  • [ @dynamic_snapshot_jobname= ] 'dynamic_snapshot_jobname'
    Имя созданного задания моментального снимка отфильтрованных данных. Аргумент dynamic_snapshot_jobname имеет тип sysname и значение NULL по умолчанию и является необязательным выходным параметром. Если он указан, имя dynamic_snapshot_jobname должно привести к созданию уникального задания на распространителе. Если аргумент не указан, имя задания будет автоматически сформировано и возвращено в результирующем наборе, причем имя создается следующим образом:

    'dyn_' + <name of the standard snapshot job> + <GUID>
    
    ПримечаниеПримечание

    При формировании имени для задания динамического моментального снимка можно усекать имя стандартного задания моментальных снимков.

  • [ @dynamic_snapshot_jobid= ] 'dynamic_snapshot_jobid'
    Идентификатор созданного задания моментального снимка отфильтрованных данных. Аргумент dynamic_snapshot_jobid имеет тип uniqueidentifier и значение NULL по умолчанию и является необязательным выходным параметром.

  • [ @frequency_type=] frequency_type
    Частота, с которой необходимо выполнять задание моментального снимка отфильтрованных данных. Аргумент frequency_type имеет тип int и может принимать одно из следующих значений.

    Значение

    Описание

    1

    Однократно

    2

    По запросу

    4 (по умолчанию)

    Ежедневно

    8

    Еженедельно

    16

    Ежемесячно

    32

    Ежемесячное расписание

    64

    Автозапуск

    128

    Повторяющаяся задача

  • [ @frequency_interval=] frequency_interval
    Период (в днях), в течение которого выполняется задание моментального снимка отфильтрованных данных. Аргумент frequency_interval имеет тип int и значение «1» по умолчанию. Он зависит от значения frequency_type.

    Значение аргумента frequency_type

    Воздействие на аргумент frequency_interval

    1

    Аргумент frequency_interval не используется.

    4 (по умолчанию)

    Каждые frequency_interval дней, по умолчанию ежедневно.

    8

    Аргумент frequency_interval может иметь одно или несколько значений из следующих (объединены логическим оператором | (Побитовое ИЛИ) (Transact-SQL)):

    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
    Указывает единицы измерения для аргумента frequency_subday_interval. Аргумент frequency_subday имеет тип int и может принимать одно из следующих значений.

    Значение

    Описание

    1

    Однократно

    2

    Секунда

    4 (по умолчанию)

    Минута

    8

    Час

  • [ @frequency_subday_interval=] frequency_subday_interval
    Число периодов frequency_subday между запусками задания. Аргумент frequency_subday_interval имеет тип int и значение 5 по умолчанию.

  • [ @frequency_relative_interval=] frequency_relative_interval
    Количество выполнений задания моментальных снимков отфильтрованных данных в каждом месяце. Этот параметр используется, если аргумент frequency_type имеет значение 32 (ежемесячное относительное расписание). Аргумент frequency_relative_interval имеет тип int и может принимать одно из следующих значений.

    Значение

    Описание

    1 (по умолчанию)

    Первый

    2

    Второй

    4

    Третий

    8

    Четвертый

    16

    Последний

  • [ @frequency_recurrence_factor=] frequency_recurrence_factor
    Коэффициент рекурсии, используемый аргументом frequency_type. Аргумент frequency_recurrence_factor имеет тип int и значение «0» по умолчанию.

  • [ @active_start_date=] active_start_date
    Дата, когда впервые запланировано выполнение задачи моментальных снимков отфильтрованных данных в формате ГГГГММДД. Аргумент active_start_date имеет тип int и значение NULL по умолчанию.

  • [ @active_end_date=] active_end_date
    Дата, когда выполнение задачи моментальных снимков отфильтрованных данных приостановлено в формате ГГГГММДД. Аргумент active_end_date имеет тип int и значение NULL по умолчанию.

  • [ @active_start_time_of_day=] active_start_time_of_day
    Время дня, когда впервые запланировано выполнение задачи моментальных снимков отфильтрованных данных в формате ЧЧММСС. Аргумент active_start_time_of_day имеет тип int и значение NULL по умолчанию.

  • [ @active_end_time_of_day=] active_end_time_of_day
    Время дня, когда выполнение задачи моментальных снимков отфильтрованных данных было приостановлено в формате ЧЧММСС. Аргумент active_end_time_of_day имеет тип int и значение NULL по умолчанию.

Результирующий набор

Имя столбца

Тип данных

Описание

id

int

Определяет задание моментального снимка фильтрованных данных в системной таблице MSdynamicsnapshotjobs.

dynamic_snapshot_jobname

sysname

Имя задания моментального снимка фильтрованных данных.

dynamic_snapshot_jobid

uniqueidentifier

Однозначно определяет задание агента Microsoft SQL Server на стороне распространителя.

Значения кодов возврата

0 (успешное завершение) или 1 (неуспешное завершение)

Замечания

Хранимая процедура sp_adddynamicsnapshot_job используется в репликации слиянием для публикаций, использующих параметризованный фильтр.

Пример

-- To avoid storing the login and password in the script file, the value 
-- is passed into SQLCMD as a scripting variable. 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".

--Add a new merge publication.
DECLARE @publicationdb AS sysname;
DECLARE @publication AS sysname;
DECLARE @table1 AS sysname;
DECLARE @table2 AS sysname;
DECLARE @filter AS sysname;
DECLARE @schema_hr AS sysname;
DECLARE @schema_sales AS sysname;

SET @publicationdb = N'AdventureWorks2008R2';
SET @publication = N'AdvWorksSalesPersonMerge';
SET @table1 = N'Employee';
SET @table2 = N'SalesPerson';
SET @filter = N'SalesPerson_Employee';
SET @schema_hr = N'HumanResources';
SET @schema_sales = N'Sales';

USE [AdventureWorks2008R2];

-- Enable AdventureWorks2008R2 for merge replication.
EXEC sp_replicationdboption
  @dbname = @publicationdb,
  @optname = N'merge publish',
  @value = N'true';  

-- Create new merge publication.  
EXEC sp_addmergepublication 
  @publication = @publication, 
  @description = N'Merge publication of AdventureWorks2008R2.', 
  @allow_subscriber_initiated_snapshot = N'false';

-- Create a new snapshot job for the publication, using the 
-- default schedule. Pass credentials at runtime using 
-- sqlcmd scripting variables.
EXEC sp_addpublication_snapshot 
  @publication = @publication, 
  @job_login = $(Login), 
  @job_password = $(password);

-- Add an article for the Employee table, 
-- which is horizontally partitioned using 
-- a parameterized row filter.
EXEC sp_addmergearticle 
  @publication = @publication, 
  @article = @table1, 
  @source_owner = @schema_hr, 
  @source_object = @table1, 
  @type = N'table', 
  @description = 'contains employee information', 
  @subset_filterclause = N'[LoginID] = HOST_NAME()';

-- Add an article for the SalesPerson table, 
-- which is partitioned based on a join filter.
EXEC sp_addmergearticle 
  @publication = @publication, 
  @article = @table2, 
  @source_owner = @schema_sales, 
  @source_object = @table2, 
  @type = N'table', 
  @description = 'contains customer information';

-- Add a join filter between the two articles.
EXEC sp_addmergefilter 
  @publication = @publication, 
  @article = @table1, 
  @filtername = @filter, 
  @join_articlename = @table2, 
  @join_filterclause = N'[Employee].[BusinessEntityID] = [SalesPerson].[SalesPersonID]', 
  @join_unique_key = 1, 
  @filter_type = 1;
GO

-- Start the snapshot agent job.
DECLARE @publication AS sysname;
SET @publication = N'AdvWorksSalesPersonMerge';

EXEC sp_startpublication_snapshot 
  @publication = @publication;
GO

PRINT '*** Waiting for the initial snapshot.';
GO

-- Create a temporary table to store the filtered data snapshot 
-- job information.
CREATE TABLE #temp (id int,
    job_name sysname,
    job_id uniqueidentifier,
    dynamic_filter_login sysname NULL,
    dynamic_filter_hostname sysname NULL,
    dynamic_snapshot_location nvarchar(255),
    frequency_type int, 
    frequency_interval int, 
    frequency_subday_type int,
    frequency_subday_interval int, 
    frequency_relative_interval int, 
    frequency_recurrence_factor int, 
    active_start_date int, 
    active_end_date int, 
    active_start_time int, 
    active_end_time int
)

-- Create each snapshot for a partition 
-- The initial snapshot must already be generated.
DECLARE @publication AS sysname;
DECLARE @jobname AS sysname
DECLARE @hostname AS sysname
SET @publication = N'AdvWorksSalesPersonMerge';
SET @hostname = N'adventure-works\Fernando';

WHILE NOT EXISTS(SELECT * FROM sysmergepublications 
    WHERE [name] = @publication 
    AND snapshot_ready = 1)
BEGIN
    WAITFOR DELAY '00:00:05'
END

-- Create a data partition by overriding HOST_NAME().
EXEC sp_addmergepartition 
  @publication = @publication,
  @host_name = @hostname;

-- Create the filtered data snapshot job, and use the returned 
-- information to start the job.
EXEC sp_adddynamicsnapshot_job 
  @publication = @publication,
  @host_name = @hostname;

INSERT INTO #temp (id, job_name, job_id, dynamic_filter_login,
    dynamic_filter_hostname, dynamic_snapshot_location,
    frequency_type, frequency_interval, frequency_subday_type,
    frequency_subday_interval, frequency_relative_interval, 
    frequency_recurrence_factor, active_start_date, active_end_date, 
    active_start_time,active_end_time)
EXEC sp_helpdynamicsnapshot_job;

SELECT @jobname = (SELECT DISTINCT job_name FROM #temp WHERE dynamic_filter_hostname = @hostname);

EXEC msdb..sp_start_job @job_name = @jobname;
DROP TABLE #temp;
GO

Разрешения

Хранимую процедуру sp_adddynamicsnapshot_job могут выполнять только члены предопределенной роли сервера sysadmin и члены предопределенной роли базы данных db_owner.