sp_adddynamicsnapshot_job (Transact-SQL)
Si applica a: SQL Server Istanza gestita di SQL di Azure
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 altre informazioni, vedere Creazione di uno snapshot per una pubblicazione di tipo merge con filtri con parametri.
Convenzioni relative alla sintassi Transact-SQL
Sintassi
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 ]
[ ; ]
Argomenti
[ @publication = ] N'publication'
Nome della pubblicazione a cui viene aggiunto il processo di snapshot dei dati filtrati. @publication è sysname, senza impostazione predefinita.
[ @suser_sname = ] N'suser_sname'
Valore utilizzato durante la creazione di uno snapshot dei dati filtrato per una sottoscrizione filtrata in base al valore della funzione SUSER_SNAME nel Sottoscrittore. @suser_sname è sysname, con un valore predefinito .NULL
@suser_sname deve essere NULL
se questa funzione non viene usata per filtrare dinamicamente la pubblicazione.
[ @host_name = ] N'host_name'
Valore utilizzato durante la creazione di uno snapshot dei dati filtrato per una sottoscrizione filtrata filtrata in base al valore della funzione HOST_NAME nel Sottoscrittore. @host_name è sysname, con un valore predefinito .NULL
host_name deve essere NULL
se questa funzione non viene usata per filtrare dinamicamente la pubblicazione.
[ @dynamic_snapshot_jobname = ] N'dynamic_snapshot_jobname' OUTPUT
Nome del processo di snapshot dei dati filtrato creato. @dynamic_snapshot_jobname è un parametro OUTPUT di tipo sysname. Se specificato, @dynamic_snapshot_jobname deve essere risolto in un processo univoco nel server di distribuzione. Se non specificato, viene generato automaticamente un nome di processo nel set di risultati, in cui viene creato il nome come indicato di seguito:
'dyn_' + <name of the standard snapshot job> + <GUID>
Nota
Quando si genera il nome del processo snapshot dinamico, è possibile troncare il nome del processo di snapshot standard.
[ @dynamic_snapshot_jobid = ] OUTPUT 'dynamic_snapshot_jobid'
Identificatore per il processo di snapshot dei dati filtrato creato. @dynamic_snapshot_jobid è un parametro OUTPUT di tipo uniqueidentifier, con un valore predefinito .NULL
[ @frequency_type = ] frequency_type
Specifica la frequenza in base alla quale è pianificato il processo di snapshot dei dati filtrati. @frequency_type è int e può essere uno di questi valori.
valore | Descrizione |
---|---|
1 |
Singola occorrenza |
2 (predefinito) |
Su richiesta |
4 |
Ogni giorno |
8 |
Settimanale |
16 |
Mensile |
32 |
Mensile relativa |
64 |
Avvio automatico |
128 |
Ricorrente |
[ @frequency_interval = ] frequency_interval
Periodo, misurato in giorni, quando viene eseguito il processo di snapshot dei dati filtrati. @frequency_interval è int e dipende dal valore di @frequency_type.
Valore di @frequency_type | Effetto sulle @frequency_interval |
---|---|
1 (predefinito) |
@frequency_interval non è usato. |
4 |
Ogni @frequency_interval giorni. |
8 |
@frequency_interval è uno o più dei seguenti elementi (combinati con un oggetto | (OR bit per bit) Operatore logico):1 = Domenica2 = Lunedì4 = Martedì8 = Mercoledì16 = Giovedì32 = Venerdì64 = Sabato |
16 |
Nel @frequency_interval giorno del mese. |
32 |
@frequency_interval è una delle opzioni seguenti:1 = Domenica2 = Lunedì3 = Martedì4 = Mercoledì5 = Giovedì6 = Venerdì7 = Sabato8 = Giorno9 = Giorno feriale10 = Giorno del fine settimana |
64 |
@frequency_interval non è usato. |
128 |
@frequency_interval non è usato. |
[ @frequency_subday = ] frequency_subday
Specifica le unità per @frequency_subday_interval. @frequency_subday è int e può essere uno di questi valori.
valore | Descrizione |
---|---|
1 (predefinito) |
Una sola volta |
2 |
Secondo |
4 |
Minute |
8 |
Ore |
[ @frequency_subday_interval = ] frequency_subday_interval
Numero di periodi di frequency_subday che si verificano tra ogni esecuzione del processo. @frequency_subday_interval è int, con il valore predefinito 1
.
[ @frequency_relative_interval = ] frequency_relative_interval
Occorrenza del processo di snapshot dei dati filtrato in ogni mese. Questo parametro viene usato quando @frequency_type è impostato su 32
(relativo mensile). @frequency_relative_interval è int e può essere uno di questi valori.
valore | Descrizione |
---|---|
1 (predefinito) |
First |
2 |
Secondo |
4 |
Terza |
8 |
Quarta |
16 |
Ultimo |
[ @frequency_recurrence_factor = ] frequency_recurrence_factor
Fattore di ricorrenza utilizzato da frequency_type. @frequency_recurrence_factor è int, con un valore predefinito .1
[ @active_start_date = ] active_start_date
Data della prima pianificazione del processo di snapshot dei dati filtrati, formattata come yyyyMMdd
. @active_start_date è int, con un valore predefinito .0
[ @active_end_date = ] active_end_date
Data in cui il processo di snapshot dei dati filtrati smette di essere pianificato, formattato come yyyyMMdd
. @active_end_date è int, con un valore predefinito .0
[ @active_start_time_of_day = ] active_start_time_of_day
Ora del giorno in cui il processo di snapshot dei dati filtrati viene pianificato per la prima volta, formattato come HHmmss
. @active_start_time_of_day è int, con il valore predefinito 0
.
[ @active_end_time_of_day = ] active_end_time_of_day
Ora del giorno in cui il processo di snapshot dei dati filtrati smette di essere pianificato, formattato come HHmmss
. @active_end_time_of_day è int, con il valore predefinito .0
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 SQL Server Agent nel server di distribuzione. |
Valori del codice restituito
0
(esito positivo) o 1
(errore).
Osservazioni:
sp_adddynamicsnapshot_job
viene utilizzato nella replica di tipo merge per le pubblicazioni che utilizzano un filtro con parametri.
Esempi
-- 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
Autorizzazioni
Solo i membri del ruolo predefinito del server sysadmin o il ruolo predefinito del database db_owner possono eseguire sp_adddynamicsnapshot_job
.