sp_adddynamicsnapshot_job (Transact-SQL)
Crea un processo di agente che genera uno snapshot dei dati filtrati per una pubblicazione con filtri di riga con parametri. Questa stored procedure viene eseguita nel database di pubblicazione del server di pubblicazione. Questa stored procedure viene utilizzata da un amministratore per creare in modo manuale processi di snapshot dei dati filtrati per Sottoscrittori.
[!NOTA]
Affinché venga creato un processo di snapshot dei dati filtrati, è necessario che esista già un processo di snapshot standard per la pubblicazione.
Per ulteriori informazioni, vedere Snapshot per pubblicazioni di tipo merge con filtri con parametri.
Sintassi
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 ]
Argomenti
[ @publication=] 'publication'
Nome della pubblicazione a cui si desidera aggiungere il processo di snapshot dei dati filtrati. publication è di tipo sysname e non prevede alcun valore predefinito.[ @suser_sname= ] 'suser_sname'
Valore utilizzato durante la creazione di uno snapshot dei dati filtrati per una sottoscrizione filtrata in base al valore della funzione SUSER_SNAME nel Sottoscrittore. suser_sname è di tipo sysname e non prevede alcun valore predefinito. suser_sname deve essere NULL se questa funzione non viene utilizzata per filtrare in modo dinamico la pubblicazione.[ @host_name= ] 'host_name'
Valore utilizzato durante la creazione di uno snapshot dei dati filtrati per una sottoscrizione filtrata in base al valore della funzione HOST_NAME nel Sottoscrittore. host_name è di tipo sysname e non prevede alcun valore predefinito. host_name deve essere NULL se questa funzione non viene utilizzata per filtrare in modo dinamico la pubblicazione.[ @dynamic_snapshot_jobname= ] 'dynamic_snapshot_jobname'
Nome del processo di snapshot dei dati filtrati creato. dynamic_snapshot_jobname è di tipo sysname, è un parametro OUTPUT facoltativo e il valore predefinito è NULL. Se viene specificato, dynamic_snapshot_jobname deve essere risolto in un processo univoco nel server di distribuzione. Se non viene specificato, verrà generato automaticamente e restituito nel set di risultati un nome di processo con il formato seguente:'dyn_' + <name of the standard snapshot job> + <GUID>
[!NOTA]
Quando viene generato il nome del processo di snapshot dinamico, è possibile troncare il nome del processo di snapshot standard.
[ @dynamic_snapshot_jobid= ] 'dynamic_snapshot_jobid'
Identificatore del processo di snapshot dei dati filtrati creato. dynamic_snapshot_jobid è di tipo uniqueidentifier, è un parametro OUTPUT facoltativo e il valore predefinito è NULL.[ @frequency_type=] frequency_type
Frequenza per l'esecuzione pianificata del processo di snapshot dei dati filtrati. frequency_type è di tipo int. I possibili valori sono i seguenti.Valore
Descrizione
1
Singola occorrenza
2
Su richiesta
4 (predefinito)
Giornaliera
8
Settimanale
16
Mensile
32
Mensile relativa
64
Avvio automatico
128
Periodica
[ @frequency_interval = ] frequency_interval
Periodo, espresso in giorni, durante il quale viene eseguito il processo di snapshot dei dati filtrati. frequency_interval è di tipo int e il valore predefinito è 1. Il valore di questo parametro dipende da quello di frequency_type.Valore di frequency_type
Effetto su frequency_interval
1
frequency_interval non viene utilizzato.
4 (predefinito)
Il processo viene eseguito ogni frequency_interval giorni. Il valore predefinito corrisponde alla frequenza giornaliera.
8
frequency_interval corrisponde a uno o più dei valori seguenti, uniti tramite l'operatore logico | (OR bit per bit) (Transact-SQL):
1 = Domenica | 2 = Lunedì | 4 = Martedì | 8 = Mercoledì | 16 = Giovedì | 32 = Venerdì | 64 = Sabato
16
Il processo viene eseguito nel giorno del mese specificato in frequency_interval.
32
frequency_interval può essere uno dei valori seguenti:
1 = Domenica | 2 = Lunedì | 3 = Martedì | 4 = Mercoledì | 5 = Giovedì | 6 = Venerdì | 7 = Sabato | 8 = Giorno | 9 = Giorno feriale | 10 = Giorno festivo
64
frequency_interval non viene utilizzato.
128
frequency_interval non viene utilizzato.
[ @frequency_subday=] frequency_subday
Specifica le unità per frequency_subday_interval. frequency_subday è di tipo int. I possibili valori sono i seguenti.Valore
Descrizione
1
Una volta
2
Secondo
4 (predefinito)
Minuto
8
Ora
[ @frequency_subday_interval=] frequency_subday_interval
Numero di periodi frequency_subday che devono intercorrere tra un'esecuzione del processo e la successiva. frequency_subday_interval è di tipo int e il valore predefinito è 5.[ @frequency_relative_interval=] frequency_relative_interval
Occorrenza del processo di snapshot dei dati filtrati in ogni mese. Questo parametro viene utilizzato quando frequency_type è impostato su 32 (frequenza mensile relativa). frequency_relative_interval è di tipo int. I possibili valori sono i seguenti.Valore
Descrizione
1 (predefinito)
Primo
2
Secondo
4
Terzo
8
Quarto
16
Ultimo
[ @frequency_recurrence_factor=] frequency_recurrence_factor
Fattore di ricorrenza utilizzato da frequency_type. frequency_recurrence_factor è di tipo int e il valore predefinito è 0.[ @active_start_date = ] active_start_date
Data della prima esecuzione pianificata del processo di snapshot dei dati filtrati, nel formato YYYYMMDD. active_start_date è di tipo int e il valore predefinito è NULL.[ @active_end_date=] active_end_date
Data dell'ultima esecuzione pianificata del processo di snapshot dei dati filtrati, nel formato YYYYMMDD. active_end_date è di tipo int e il valore predefinito è NULL.[ @active_start_time_of_day=] active_start_time_of_day
Ora del giorno della prima esecuzione pianificata del processo di snapshot dei dati filtrati, nel formato HHMMSS. active_start_time_of_day è di tipo int e il valore predefinito è NULL.[ @active_end_time_of_day=] active_end_time_of_day
Ora del giorno dell'ultima esecuzione pianificata del processo di snapshot dei dati filtrati, nel formato HHMMSS. active_end_time_of_day è di tipo int e il valore predefinito è NULL.
Set di risultati
Nome colonna |
Tipo di dati |
Descrizione |
---|---|---|
id |
int |
Identifica il processo di snapshot dei dati filtrati nella tabella di sistema MSdynamicsnapshotjobs. |
dynamic_snapshot_jobname |
sysname |
Nome del processo di snapshot dei dati filtrati. |
dynamic_snapshot_jobid |
uniqueidentifier |
Identifica in modo univoco il processo di MicrosoftSQL Server Agent nel server di distribuzione. |
Valori restituiti
0 (esito positivo) o 1 (esito negativo)
Osservazioni
sp_adddynamicsnapshot_job viene utilizzata per la replica di tipo merge di pubblicazioni con un filtro con parametri.
Esempio
-- 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
Autorizzazioni
Solo i membri del ruolo predefinito del server sysadmin o del ruolo predefinito del database db_owner possono eseguire sp_adddynamicsnapshot_job.