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.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

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.