sp_adddynamicsnapshot_job (Transact-SQL)
Gilt für: SQL Server Azure 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, zu der der gefilterte Datenmomentaufnahmeauftrag hinzugefügt wird. @publication ist "sysname" ohne Standard.
[ @suser_sname = ] N'suser_sname'
Der Wert, der beim Erstellen einer gefilterten Datenmomentaufnahme 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 Datenmomentaufnahme 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_snapshot_jobname'
Der Name des erstellten gefilterten Datenmomentaufnahmeauftrags. @dynamic_snapshot_jobname ist ein OUTPUT-Parameter vom Typ "sysname". Wenn angegeben, muss @dynamic_snapshot_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 Momentaufnahmeauftrags können Sie den Namen des standardmäßigen Momentaufnahmeauftrags abschneiden.
[ @dynamic_snapshot_jobid = ] 'dynamic_snapshot_jobid' OUTPUT
Ein Bezeichner für den erstellten Datenmomentaufnahmeauftrag für gefilterte Daten. @dynamic_snapshot_jobid ist ein OUTPUT-Parameter vom Typ uniqueidentifier, mit einem Standardwert von NULL
.
[ @frequency_type = ] frequency_type
Gibt die Häufigkeit an, mit der der gefilterte Datenmomentaufnahmeauftrag geplant wird. @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 Zeitraum, der in Tagen gemessen wird, wenn der gefilterte Datenmomentaufnahmeauftrag ausgeführt wird. @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) logischer Operator):1 = Sonntag2 = Montag4 = Dienstag8 = Mittwoch16 = Donnerstag32 = Freitag64 = Samstag |
16 |
Am @frequency_interval Tag des Monats. |
32 |
@frequency_interval ist eine der folgenden Optionen:1 = Sonntag2 = Montag3 = Dienstag4 = Mittwoch5 = Donnerstag6 = Freitag7 = Samstag8 = Tag9 = Wochentag10 = 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 des gefilterten Datenmomentaufnahmeauftrags 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 |
Last |
[ @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 der gefilterte Datenmomentaufnahmeauftrag zuerst geplant ist, formatiert als yyyyMMdd
. @active_start_date ist int, mit einem Standardwert von 0
.
[ @active_end_date = ] active_end_date
Das Datum, an dem der gefilterte Datenmomentaufnahmeauftrag nicht mehr geplant wird, formatiert als yyyyMMdd
. @active_end_date ist int, mit einem Standardwert von 0
.
[ @active_start_time_of_day = ] active_start_time_of_day
Die Tageszeit, zu der der gefilterte Datenmomentaufnahmeauftrag zum ersten Mal geplant ist, 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 der gefilterte Datenmomentaufnahmeauftrag nicht mehr geplant wird, formatiert als HHmmss
. @active_end_time_of_day ist int mit einem Standardwert von 0
.
Resultset
Spaltenname | Datentyp | BESCHREIBUNG |
---|---|---|
id |
int | Identifies the filtered data snapshot job in the MSdynamicsnapshotjobs system table. |
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
(erfolgreich) 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
.