Поделиться через


Хранимая процедура 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.

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

Имя столбца

Тип данных

Описание

идентификатор

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'AdventureWorks2012';
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 [AdventureWorks2012];

-- Enable AdventureWorks2012 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 AdventureWorks2012.', 
  @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.

См. также

Справочник

sp_dropdynamicsnapshot_job (Transact-SQL)

sp_helpdynamicsnapshot_job (Transact-SQL)

Основные понятия

Создание моментального снимка для публикации слиянием с параметризованными фильтрами

Параметризованные фильтры строк