sys.sp_adddynamicsnapshot_job (Transact-SQL)

Dotyczy:SQL ServerAzure SQL Managed Instance

Tworzy zadanie agenta, które generuje przefiltrowany migawkę danych dla publikacji z parametryzowanymi filtrami wierszowymi. Ta procedura składowana jest wykonywana w programie Publisher w bazie danych publikacji. Ta procedura przechowywana jest wykorzystywana przez administratora do ręcznego tworzenia zadań snapshotów z filtrowanymi danymi dla subskrybentów.

Note

Aby stworzyć zadanie snapshot z filtrowanymi danymi, standardowe zadanie snapshotu musi już istnieć.

Więcej informacji można znaleźć w artykule Utwórz migawkę dla publikacji Merge z filtrami parametryzowanymi.

Transact-SQL konwencje składni

Syntax

sys.sp_adddynamicsnapshot_job
    [ @publication = ] N'publication'
    [ , [ @suser_sname = ] N'suser_sname' ]
    [ , [ @host_name = ] N'host_name' ]
    [ , [ @dynamic_snapshot_jobname = ] N'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 ]
[ ; ]

Arguments

[ @publication = ] N'publikacja'

Nazwa publikacji, do której dodaje się zadanie snapshot z filtrowanymi danymi. @publication to sysname, bez domyślnego zapisu.

[ @suser_sname = ] N'suser_sname'

Wartość używana przy tworzeniu filtrowanego migawki danych dla subskrypcji, która jest filtrowana przez wartość funkcji SUSER_SNAME u abonenta. @suser_sname to nazwa systemu, z domyślnym .NULL @suser_sname powinno być NULL , jeśli ta funkcja nie jest używana do dynamicznego filtrowania publikacji.

[ @host_name = ] N'host_name'

Wartość używana przy tworzeniu filtrowanego migawki danych dla subskrypcji, która jest filtrowana przez wartość funkcji HOST_NAME u Abonenta. @host_name to nazwa systemu z domyślnym .NULL @host_name powinno być NULL , jeśli ta funkcja nie jest używana do dynamicznego filtrowania publikacji.

[ @dynamic_snapshot_jobname = ] WYJŚCIE N'dynamic_snapshot_jobname'

Nazwa zadania snapshot z filtrowanych danych, które zostało utworzone. @dynamic_snapshot_jobname jest parametrem OUTPUT typu sysname. Jeśli zostanie to określone @dynamic_snapshot_jobname do konkretnego stanowiska w Dystrybutorze. Jeśli nie jest określona, nazwa zadania jest automatycznie generowana w zbiorze wyników, gdzie nazwa jest tworzona w następujący sposób:

'dyn_' + <name of the standard snapshot job> + <GUID>

Note

Generując nazwę dynamicznego zadania snapshot, możesz skrócić nazwę standardowego zadania snapshot.

[ @dynamic_snapshot_jobid = ] WYJŚCIE 'dynamic_snapshot_jobid'

Identyfikator dla zadania snapshot z filtrowanymi danymi. @dynamic_snapshot_jobid jest parametrem OUTPUT typu uniqueidentifier, z domyślnym parametrem NULL.

[ @frequency_type = ] frequency_type

Określa częstotliwość, o jaką zadanie migawki danych filtrowanych jest zaplanowane. @frequency_type jest int i może być jedną z tych wartości.

Value Description
1 Jeden raz
2 (ustawienie domyślne) Na żądanie
4 Codziennie
8 Co tydzień
16 Miesięczny
32 Miesięczny pokrewny
64 Autostart
128 Płatność cykliczna

[ @frequency_interval = ] frequency_interval

Okres, mierzony w dniach, w którym wykonywane jest zadanie snapshotu z filtrowanymi danymi. @frequency_interval jest int i zależy od wartości @frequency_type.

Wartość @frequency_type Wpływ na @frequency_interval
1 (ustawienie domyślne) @frequency_interval jest nieużywana.
4 Co @frequency_interval dni.
8 @frequency_interval to jedna lub więcej z następujących (połączonych z | (BITOWO-OR) operator logiczny):

1 = Niedziela
2 = Poniedziałek
4 = Wtorek
8 = Środa
16 = Czwartek
32 = Piątek
64 = Sobota
16 W @frequency_interval dnia miesiąca.
32 @frequency_interval jest jedną z następujących opcji:

1 = Niedziela
2 = Poniedziałek
3 = Wtorek
4 = Środa
5 = Czwartek
6 = Piątek
7 = Sobota
8 = Dzień
9 = Dzień powszednie
10 = Dzień weekendowy
64 @frequency_interval jest nieużywana.
128 @frequency_interval jest nieużywana.

[ @frequency_subday = ] frequency_subday

Określa jednostki dla @frequency_subday_interval. @frequency_subday jest int i może być jedną z tych wartości.

Value Description
1 (ustawienie domyślne) Raz
2 Second
4 Minuta
8 Godzina

[ @frequency_subday_interval = ] frequency_subday_interval

Liczba @frequency_subday okresów, które występują między każdym wykonaniem zadania. @frequency_subday_interval jest int, z domyślnym .1

[ @frequency_relative_interval = ] frequency_relative_interval

Występowanie zadania z przefiltrowanym danym w każdym miesiącu. Parametr ten jest używany, gdy @frequency_type jest ustawione na 32 (miesięczny relatyw). @frequency_relative_interval jest int i może być jedną z tych wartości.

Value Description
1 (ustawienie domyślne) First
2 Second
4 Third
8 Fourth
16 Ostatni

[ @frequency_recurrence_factor = ] frequency_recurrence_factor

Współczynnik powtarzalności używany przez @frequency_type. @frequency_recurrence_factor jest int, z domyślnym .1

[ @active_start_date = ] active_start_date

Data, kiedy zadanie snapshotu z filtrowanymi danymi jest po raz pierwszy zaplanowane, jest sformatowane jako yyyyMMdd. @active_start_date jest int, z domyślnym .0

[ @active_end_date = ] active_end_date

Data, w której zadanie przestaje być planowane dla przefiltrowanego zdjęcia danych, sformatowane jako yyyyMMdd. @active_end_date jest int, z domyślnym .0

[ @active_start_time_of_day = ] active_start_time_of_day

Pora dnia, w której zadanie snapshotu z filtrowanym danym jest po raz pierwszy zaplanowane, sformatowane jako HHmmss. @active_start_time_of_day jest int, z domyślnym .0

[ @active_end_time_of_day = ] active_end_time_of_day

Pora dnia, w której zadanie snapshot z filtrowanymi danymi przestaje być planowane, sformatowane jako HHmmss. @active_end_time_of_day jest int, z domyślnym obciążeniem 0.

Zestaw wyników

Nazwa kolumny Typ danych Description
id int Identyfikuje zadanie snapshot z filtrowanymi danymi w tabeli systemu MSdynamicsnapshotjobs .
dynamic_snapshot_jobname sysname Nazwa zadania snapshot z filtrowanych danych.
dynamic_snapshot_jobid uniqueidentifier Unikalnie identyfikuje stanowisko SQL Server Agent u Dystrybutora.

Zwracanie wartości kodu

0 (powodzenie) lub 1 (niepowodzenie).

Remarks

sp_adddynamicsnapshot_job jest używany w replikacji scalania publikacji wykorzystujących filtr parametryzowany.

Examples

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

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

uprawnienia

Tylko członkowie roli stałego serwera systemowego lub roli db_owner stałej bazy danych mogą wykonywać sp_adddynamicsnapshot_job.