sp_adddynamicsnapshot_job (Transact-SQL)

Crée un travail de l'Agent qui crée l'instantané de données filtrées pour une publication avec des filtres de lignes paramétrables. Cette procédure stockée est exécutée dans la base de données de publication du serveur de publication. Un administrateur utilise cette procédure stockée pour créer manuellement des travaux d'instantané de données filtrées pour des Abonnés.

[!REMARQUE]

Pour créer un travail d'instantané de données filtrées, un travail d'instantané standard doit déjà exister pour la publication.

Pour plus d'informations, consultez Instantanés des publications de fusion avec des filtres paramétrés.

Icône Lien de rubrique Conventions de la syntaxe de Transact-SQL

Syntaxe

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 ]

Arguments

  • [ @publication=] 'publication'
    Nom de la publication à laquelle le travail d'instantané de données filtrées est ajouté. publication est de type sysname, sans valeur par défaut.

  • [ @suser_sname= ] 'suser_sname'
    Valeur utilisée lors de la création d'un travail d'instantané de données filtrées pour un abonnement filtré par la valeur de la fonction SUSER_SNAME sur l'Abonné. suser_sname est de type sysname, sans valeur par défaut. suser_sname doit avoir la valeur NULL si cette fonction n'est pas utilisée pour filtrer dynamiquement la publication.

  • [ @host_name= ] 'host_name'
    Valeur utilisée lors de la création d'un travail d'instantané de données filtrées pour un abonnement filtré par la valeur de la fonction HOST_NAME sur l'Abonné. host_name est de type sysname, sans valeur par défaut. host_name doit avoir la valeur NULL si cette fonction n'est pas utilisée pour filtrer dynamiquement la publication.

  • [ @dynamic_snapshot_jobname= ] 'dynamic_snapshot_jobname'
    Nom du travail d'instantané de données filtrées créé. dynamic_snapshot_jobname est de type sysname, avec NULL comme valeur par défaut. Il s'agit d'un paramètre OUTPUT facultatif. Si cet argument est spécifié, dynamic_snapshot_jobname doit correspondre à un travail unique sur le serveur de distribution. S'il n'est pas spécifié, un nom de travail est automatiquement créé et renvoyé dans l'ensemble de résultats, où le nom est créé comme suit :

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

    [!REMARQUE]

    Lors de la création du nom du travail d'instantané dynamique, vous pouvez tronquer le nom du travail d'instantané standard.

  • [ @dynamic_snapshot_jobid= ] 'dynamic_snapshot_jobid'
    Identificateur du travail d'instantané de données filtrées créé. dynamic_snapshot_jobid est de type uniqueidentifier, avec NULL comme valeur par défaut. Il s'agit d'un paramètre OUTPUT facultatif.

  • [ @frequency_type=] frequency_type
    Fréquence à laquelle doit être planifié le travail d'instantané de données filtrées. frequency_type est de type int et peut prendre l'une des valeurs suivantes.

    Valeur

    Description

    1

    Une fois

    2

    À la demande

    4 (par défaut)

    Quotidienne

    8

    Hebdomadaire

    16

    Mensuelle

    32

    Mensuelle relative

    64

    Démarrage automatique

    128

    Périodique

  • [ @frequency_interval = ] frequency_interval
    Périodicité (en jours) du travail d'instantané de données filtrées. frequency_interval est de type int. Sa valeur par défaut est 1 ; il dépend de la valeur de frequency_type.

    Valeur de frequency_type

    Effet sur frequency_interval

    1

    frequency_interval n'est pas utilisé.

    4 (par défaut)

    Chaque jour de frequency_interval. La valeur par défaut est quotidienne.

    8

    frequency_interval prend une ou plusieurs des valeurs suivantes (combinées avec un opérateur logique | (OR au niveau du bit) (Transact-SQL)) :

    1 = Dimanche | 2 = Lundi | 4 = Mardi | 8 = Mercredi | 16 = Jeudi | 32 = Vendredi | 64 = Samedi

    16

    Le frequency_interval jour du mois.

    32

    frequency_interval prend une des valeurs suivantes :

    1 = Dimanche | 2 = Lundi | 3 = Mardi | 4 = Mercredi | 5 = Jeudi | 6 = Vendredi | 7 = Samedi | 8 = Jour | 9 = Jour de la semaine | 10 = Jour de week-end

    64

    frequency_interval n'est pas utilisé.

    128

    frequency_interval n'est pas utilisé.

  • [ @frequency_subday=] frequency_subday
    Spécifie les unités pour frequency_subday_interval. frequency_subday est de type int et peut prendre l'une des valeurs suivantes.

    Valeur

    Description

    1

    Une fois

    2

    Seconde

    4 (par défaut)

    Minute

    8

    Heure

  • [ @frequency_subday_interval=] frequency_subday_interval
    Nombre de périodes frequency_subday entre chaque exécution du travail. frequency_subday_interval est de type int, avec 5 comme valeur par défaut.

  • [ @frequency_relative_interval=] frequency_relative_interval
    Occurrence du travail d'instantané de données filtrées pour chaque mois. Ce paramètre est utilisé lorsque frequency_type a la valeur 32 (fréquence mensuelle relative). frequency_relative_interval est de type int et peut prendre l'une des valeurs suivantes.

    Valeur

    Description

    1 (par défaut)

    Première

    2

    Seconde

    4

    Troisième

    8

    Quatrième

    16

    Dernière

  • [ @frequency_recurrence_factor=] frequency_recurrence_factor
    Facteur de récurrence utilisé par frequency_type. frequency_recurrence_factor est de type int, avec 0 comme valeur par défaut.

  • [ @active_start_date=] active_start_date
    Date à laquelle le travail d'instantané de données filtrées est planifié pour la première fois, exprimée au format AAAAMMJJ. active_start_date est de type int, avec NULL comme valeur par défaut.

  • [ @active_end_date=] active_end_date
    Date à laquelle le travail d'instantané de données filtrées cesse d'être planifié, exprimée au format AAAAMMJJ. active_end_date est de type int, avec NULL comme valeur par défaut.

  • [ @active_start_time_of_day=] active_start_time_of_day
    Heure du jour à laquelle le travail d'instantané de données filtrées est planifié pour la première fois, exprimée au format HHMMSS. active_start_time_of_day est de type int, avec NULL comme valeur par défaut.

  • [ @active_end_time_of_day=] active_end_time_of_day
    Heure du jour à laquelle le travail d'instantané de données filtrées cesse d'être planifié, exprimée au format HHMMSS. active_end_time_of_day est de type int, avec NULL comme valeur par défaut.

Jeu de résultats

Nom de la colonne

Type de données

Description

id

int

Identifie le travail d'instantané de données filtrées dans la table système MSdynamicsnapshotjobs.

dynamic_snapshot_jobname

sysname

Nom du travail d'instantané de données filtrées.

dynamic_snapshot_jobid

uniqueidentifier

Identifie de manière unique le travail de l'Agent Microsoft SQL Server sur le serveur de distribution.

Valeurs des codes de retour

0 (succès) ou 1 (échec)

Notes

sp_adddynamicsnapshot_job s'utilise dans la réplication de fusion pour les publications qui utilisent un filtre paramétré.

Exemple

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

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

Autorisations

Seuls les membres du rôle serveur fixe sysadmin ou du rôle de base de données fixe db_owner peuvent exécuter sp_adddynamicsnapshot_job.

Voir aussi

Référence

sp_dropdynamicsnapshot_job (Transact-SQL)

sp_helpdynamicsnapshot_job (Transact-SQL)

Concepts

Créer un instantané d'une publication de fusion avec des filtres paramétrés

Filtres de lignes paramétrés