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


Хранимая процедура sp_adddynamicsnapshot_job (Transact-SQL)

Изменения: 5 декабря 2005 г.

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

ms190327.note(ru-ru,SQL.90).gifПримечание.
Чтобы создать задание моментального снимка отфильтрованных данных, необходимо существование стандартного задания моментальных снимков для публикации.

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

Значок ссылки на разделСинтаксические обозначения в 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>
    
    ms190327.note(ru-ru,SQL.90).gifПримечание.
    При формировании имени для задания динамического моментального снимка можно усекать имя стандартного задания моментальных снимков.
  • [ @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 по умолчанию.

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

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

Замечания

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

Разрешения

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

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

Имя столбца Тип данных Описание

id

int

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

dynamic_snapshot_jobname

sysname

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

dynamic_snapshot_jobid

uniqueidentifier

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

Пример

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

-- Enable AdventureWorks 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 AdventureWorks.', 
  @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].[EmployeeID] = [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_dropdynamicsnapshot_job (Transact-SQL)
sp_helpdynamicsnapshot_job (Transact-SQL)

Другие ресурсы

How to: Create a Snapshot for a Merge Publication with Parameterized Filters (Replication Transact-SQL Programming)
Параметризованные фильтры строк

Справка и поддержка

Получение помощи по SQL Server 2005

Журнал изменений

Версия Журнал

5 декабря 2005 г.

Новое содержимое
  • Добавлены сведения о результирующем наборе.