sp_adddynamicsnapshot_job (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.