Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: SQL Server
Azure SQL Managed Instance
Cria um trabalho de agente que gera um snapshot de dados filtrado para uma publicação com filtros de linha parametrizados. Este procedimento armazenado é executado no Publisher no banco de dados de publicação. Este procedimento armazenado é utilizado por um administrador para criar manualmente trabalhos de snapshot de dados filtrados para Subscritores.
Note
Para que um trabalho de snapshot de dados filtrado seja criado, já deve existir um job de snapshot padrão para a publicação.
Para mais informações, consulte Criar um Snapshot para uma Publicação de Fusão com Filtros Parametrizados.
Transact-SQL convenções de sintaxe
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'publicação'
O nome da publicação à qual está a ser adicionado o trabalho de snapshot de dados filtrado. @publication é sysname, sem padrão.
[ @suser_sname = ] N'suser_sname'
O valor utilizado ao criar um instantâneo de dados filtrado para uma subscrição que é filtrado pelo valor da função SUSER_SNAME no Assinante.
@suser_sname é sysname, com um padrão de NULL.
@suser_sname deveria ser NULL se esta função não for usada para filtrar dinamicamente a publicação.
[ @host_name = ] N'host_name'
O valor utilizado ao criar um snapshot de dados filtrado para uma subscrição que é filtrado pelo valor da função HOST_NAME no Assinante.
@host_name é sysname, com um padrão de NULL.
@host_name deveria ser NULL se esta função não for usada para filtrar dinamicamente a publicação.
[ @dynamic_snapshot_jobname = ] N'dynamic_snapshot_jobname' SAÍDA
O nome do trabalho de snapshot de dados filtrado criado.
@dynamic_snapshot_jobname é um OUTPUT parâmetro do tipo sysname. Se especificado, @dynamic_snapshot_jobname deve assumir um cargo único no Distribuidor. Se não especificado, um nome de trabalho é gerado automaticamente no conjunto de resultados, onde o nome é criado da seguinte forma:
'dyn_' + <name of the standard snapshot job> + <GUID>
Note
Ao gerar o nome do trabalho de snapshot dinâmico, pode truncar o nome do job de snapshot padrão.
[ @dynamic_snapshot_jobid = ] 'dynamic_snapshot_jobid' SAÍDA
Um identificador para o trabalho de snapshot de dados filtrado criado.
@dynamic_snapshot_jobid é um OUTPUT parâmetro de tipo identificador único, com um padrão de NULL.
[ @frequency_type = ] frequency_type
Especifica a frequência com que o trabalho de snapshot de dados filtrado é agendado. @frequency_type é int, e pode ser um desses valores.
| Value | Description |
|---|---|
1 |
Uma vez |
2 (padrão) |
A pedido |
4 |
Diariamente |
8 |
Semanalmente |
16 |
Monthly |
32 |
Parente mensal |
64 |
Arranque automático |
128 |
Recorrente |
[ @frequency_interval = ] frequency_interval
O período, medido em dias, em que o trabalho de snapshot de dados filtrado é executado. @frequency_interval é int, e depende do valor da @frequency_type.
| Valor da @frequency_type | Efeito na @frequency_interval |
|---|---|
1 (padrão) |
@frequency_interval está por usar. |
4 |
A cada @frequency_interval dias. |
8 |
@frequency_interval é um ou mais dos seguintes (combinados com um | (Bitwise OR) operador lógico):1 = Domingo2 = Segunda-feira4 = Terça-feira8 = Quarta-feira16 = Quinta-feira32 = Sexta-feira64 = Sábado |
16 |
No @frequency_interval dia do mês. |
32 |
@frequency_interval é uma das seguintes opções:1 = Domingo2 = Segunda-feira3 = Terça-feira4 = Quarta-feira5 = Quinta-feira6 = Sexta-feira7 = Sábado8 = Dia9 = Dias úteis10 = Dia de fim de semana |
64 |
@frequency_interval está por usar. |
128 |
@frequency_interval está por usar. |
[ @frequency_subday = ] frequency_subday
Especifica as unidades para @frequency_subday_interval. @frequency_subday é int, e pode ser um desses valores.
| Value | Description |
|---|---|
1 (padrão) |
Uma vez |
2 |
Second |
4 |
Minuto |
8 |
Hora |
[ @frequency_subday_interval = ] frequency_subday_interval
O número de períodos de @frequency_subday que ocorrem entre cada execução do trabalho.
@frequency_subday_interval é int, com um padrão de 1.
[ @frequency_relative_interval = ] frequency_relative_interval
A ocorrência do trabalho de snapshot de dados filtrado em cada mês. Este parâmetro é usado quando @frequency_type está definido como 32 (relativo mensal).
@frequency_relative_interval é int, e pode ser um desses valores.
| Value | Description |
|---|---|
1 (padrão) |
First |
2 |
Second |
4 |
Third |
8 |
Fourth |
16 |
Último |
[ @frequency_recurrence_factor = ] frequency_recurrence_factor
O fator de recorrência utilizado por @frequency_type.
@frequency_recurrence_factor é int, com um padrão de 1.
[ @active_start_date = ] active_start_date
A data em que o trabalho de snapshot de dados filtrado é agendado pela primeira vez, formatada como yyyyMMdd.
@active_start_date é int, com um padrão de 0.
[ @active_end_date = ] active_end_date
A data em que o trabalho de snapshot de dados filtrados deixa de ser agendado, formatada como yyyyMMdd.
@active_end_date é int, com um padrão de 0.
[ @active_start_time_of_day = ] active_start_time_of_day
A hora do dia em que o trabalho de snapshot de dados filtrado é agendado pela primeira vez, formatado como HHmmss.
@active_start_time_of_day é int, com um padrão de 0.
[ @active_end_time_of_day = ] active_end_time_of_day
A hora do dia em que o trabalho de snapshot de dados filtrados deixa de ser agendado, formatada como HHmmss.
@active_end_time_of_day é int, com um padrão de 0.
Conjunto de resultados
| Nome da coluna | Tipo de dados | Description |
|---|---|---|
id |
int | Identifica o trabalho de snapshot de dados filtrado na tabela do sistema MSdynamicsnapshotjobs . |
dynamic_snapshot_jobname |
sysname | Nome do trabalho de snapshot de dados filtrado. |
dynamic_snapshot_jobid |
uniqueidentifier | Identifica de forma única o trabalho do SQL Server Agent no Distribuidor. |
Valores de código de retorno
0 (sucesso) ou 1 (fracasso).
Remarks
sp_adddynamicsnapshot_job é usado na replicação por fusão para publicações que utilizam um filtro parametrizado.
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
Permissions
Apenas os membros do papel de servidor fixo de sysadmin ou do papel de base de dados fixa db_owner podem executar sp_adddynamicsnapshot_job.