sp_adddynamicsnapshot_job (Transact-SQL)

Gilt für:SQL ServerAzure SQL Managed Instance

Erstellt einen Agentauftrag, der eine Momentaufnahme gefilterter Daten für eine Veröffentlichung mit parametrisierten Zeilenfiltern generiert. Diese gespeicherte Prozedur wird im Publisher in der Publikationsdatenbank ausgeführt. Ein Administrator kann diese gespeicherte Prozedur verwenden, um manuell Aufträge für Momentaufnahmen gefilterter Daten für Abonnenten zu erstellen.

Hinweis

Damit ein Auftrag für eine Momentaufnahme gefilterter Daten erstellt werden kann, muss bereits ein Auftrag für eine Standardmomentaufnahme für die Veröffentlichung vorhanden sein.

Weitere Informationen finden Sie unter Erstellen einer Momentaufnahme für eine Mergeveröffentlichung mit parametrisierten Filtern.

Transact-SQL-Syntaxkonventionen

Syntax

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

Argumente

[ @publication = ] N'Publikation'

Der Name der Publikation, der die gefilterten Daten Momentaufnahme Auftrag hinzugefügt werden. @publication ist "sysname" ohne Standard.

[ @suser_sname = ] N'suser_sname'

Der Wert, der beim Erstellen einer gefilterten Daten Momentaufnahme für ein Abonnement verwendet wird, das nach dem Wert der funktion SUSER_SNAME beim Abonnenten gefiltert wird. @suser_sname ist "sysname" mit der Standardeinstellung "NULL. @suser_sname sollte seinNULL, wenn diese Funktion nicht zum dynamischen Filtern der Publikation verwendet wird.

[ @host_name = ] N'host_name'

Der Wert, der beim Erstellen einer gefilterten Daten Momentaufnahme für ein Abonnement verwendet wird, das nach dem Wert der funktion HOST_NAME beim Abonnenten gefiltert wird. @host_name ist "sysname" mit der Standardeinstellung "NULL. host_name sollte seinNULL, wenn diese Funktion nicht verwendet wird, um die Publikation dynamisch zu filtern.

[ @dynamic_snapshot_jobname = ] Ausgabe von N'dynamic_Momentaufnahme_jobname'

Der Name der gefilterten Daten Momentaufnahme Auftrag erstellt. @dynamic_Momentaufnahme_jobname ist ein OUTPUT-Parameter vom Typ Sysname. Wenn angegeben, muss @dynamic_Momentaufnahme_jobname zu einem eindeutigen Auftrag beim Distributor aufgelöst werden. Wenn nicht angegeben, wird automatisch ein Auftragsname im Resultset generiert, wobei der Name wie folgt erstellt wird:

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

Hinweis

Beim Generieren des Namens des dynamischen Momentaufnahme Auftrags können Sie den Namen des Standardauftrags Momentaufnahme Auftrag abschneiden.

[ @dynamic_snapshot_jobid = ] 'dynamic_Momentaufnahme_jobid' OUTPUT

Ein Bezeichner für die gefilterten Daten, Momentaufnahme Auftrag erstellt wurde. @dynamic_Momentaufnahme_jobid ist ein OUTPUT-Parameter vom Typ uniqueidentifier, mit einem Standardwert von NULL.

[ @frequency_type = ] frequency_type

Gibt die Häufigkeit an, mit der die gefilterten Daten Momentaufnahme Auftrag geplant werden. @frequency_type ist int und kann einer dieser Werte sein.

Wert Beschreibung
1 Einmal
2 (Standard) On-Demand-Streaming
4 Täglich
8 Wöchentlich
16 Monatlich
32 Monatlich, relativ
64 Autostart
128 Wiederkehrend

[ @frequency_interval = ] frequency_interval

Der In Tagen gemessene Zeitraum, in dem die gefilterten Daten Momentaufnahme Auftrag ausgeführt werden. @frequency_interval ist int und hängt vom Wert der @frequency_type ab.

Wert von @frequency_type Auswirkung auf @frequency_interval
1 (Standard) @frequency_interval ist nicht verwendet.
4 Alle @frequency_interval Tage.
8 @frequency_interval ist eine oder mehrere der folgenden Elemente (kombiniert mit einem | (Bitweise ODER) (Transact-SQL) logischer Operator):

1 = Sonntag
2 = Montag
4 = Dienstag
8 = Mittwoch
16 = Donnerstag
32 = Freitag
64 = Samstag
16 Am @frequency_interval Tag des Monats.
32 @frequency_interval ist eine der folgenden Optionen:

1 = Sonntag
2 = Montag
3 = Dienstag
4 = Mittwoch
5 = Donnerstag
6 = Freitag
7 = Samstag
8 = Tag
9 = Wochentag
10 = Wochenendtag
64 @frequency_interval ist nicht verwendet.
128 @frequency_interval ist nicht verwendet.

[ @frequency_subday = ] frequency_subday

Gibt die Einheiten für @frequency_subday_interval an. @frequency_subday ist int und kann einer dieser Werte sein.

Wert Beschreibung
1 (Standardwert) Einmal
2 Second
4 Minute
8 Hour

[ @frequency_subday_interval = ] frequency_subday_interval

Die Anzahl der frequency_subday Zeiträume, die zwischen jeder Ausführung des Auftrags auftreten. @frequency_subday_interval ist int, mit einem Standardwert von 1.

[ @frequency_relative_interval = ] frequency_relative_interval

Das Vorkommen der gefilterten Daten Momentaufnahme Auftrag in jedem Monat. Dieser Parameter wird verwendet, wenn @frequency_type auf 32 (monatlich relativ) festgelegt ist. @frequency_relative_interval ist int und kann einer dieser Werte sein.

Wert Beschreibung
1 (Standardwert) First
2 Second
4 Third
8 Viertes
16 Letzte

[ @frequency_recurrence_factor = ] frequency_recurrence_factor

Der von frequency_type verwendete Serienfaktor. @frequency_recurrence_factor ist int mit einem Standardwert von 1.

[ @active_start_date = ] active_start_date

Das Datum, an dem die gefilterten Daten Momentaufnahme Auftrag zuerst geplant werden, formatiert als yyyyMMdd. @active_start_date ist int, mit einem Standardwert von 0.

[ @active_end_date = ] active_end_date

Das Datum, an dem die gefilterten Daten Momentaufnahme Auftrag nicht mehr geplant werden, formatiert als yyyyMMdd. @active_end_date ist int, mit einem Standardwert von 0.

[ @active_start_time_of_day = ] active_start_time_of_day

Die Uhrzeit, zu der die gefilterten Daten Momentaufnahme Auftrag zuerst geplant werden, formatiert als HHmmss. @active_start_time_of_day ist int mit einem Standardwert von 0.

[ @active_end_time_of_day = ] active_end_time_of_day

Die Tageszeit, zu der die gefilterten Daten Momentaufnahme Auftrag nicht mehr geplant werden, formatiert als HHmmss. @active_end_time_of_day ist int mit einem Standardwert von 0.

Resultset

Spaltenname Datentyp BESCHREIBUNG
id int Identifiziert die gefilterten Daten Momentaufnahme Auftrag in der Systemtabelle "MSdynamic Momentaufnahme jobs".
dynamic_snapshot_jobname sysname Name des Auftrags für eine Momentaufnahme gefilterter Daten.
dynamic_snapshot_jobid uniqueidentifier Identifiziert den SQL Server-Agent Job im Distributor eindeutig.

Rückgabecodewerte

0 (Erfolg) oder 1 (Fehler).

Hinweise

sp_adddynamicsnapshot_job wird in der Zusammenführungsreplikation für Publikationen verwendet, die einen parametrisierten Filter verwenden.

Beispiele

-- 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

Berechtigungen

Nur Mitglieder der festen Serverrolle sysadmin oder die db_owner feste Datenbankrolle können ausgeführt werden sp_adddynamicsnapshot_job.