Freigeben über


sp_adddynamicsnapshot_job (Transact-SQL)

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

HinweisHinweis

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 Momentaufnahmen für Mergeveröffentlichungen mit parametrisierten Filtern.

Themenlink (Symbol) Transact-SQL-Syntaxkonventionen

Syntax

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 ]

Argumente

  • [ @publication=] 'publication'
    Der Name der Veröffentlichung, der der Auftrag für die Momentaufnahme gefilterter Daten hinzugefügt wird. publication ist vom Datentyp sysname und hat keinen Standardwert.

  • [ @suser_sname= ] 'suser_sname'
    Der verwendete Wert beim Erstellen einer Momentaufnahme gefilterter Daten für ein Abonnement, das nach dem Wert der SUSER_SNAME-Funktion beim Abonnenten gefiltert wird. suser_sname ist vom Datentyp sysname und hat keinen Standardwert. suser_sname sollte NULL sein, wenn diese Funktion nicht zum dynamischen Filtern der Veröffentlichung verwendet wird.

  • [ @host_name= ] 'host_name'
    Der verwendete Wert beim Erstellen einer Momentaufnahme gefilterter Daten für ein Abonnement, das nach dem Wert der HOST_NAME-Funktion beim Abonnenten gefiltert wird. host_name ist vom Datentyp sysname und hat keinen Standardwert. host_name sollte NULL sein, wenn diese Funktion nicht zum dynamischen Filtern der Veröffentlichung verwendet wird.

  • [ @dynamic_snapshot_jobname= ] 'dynamic_snapshot_jobname'
    Der Name des erstellten Auftrags für eine Momentaufnahme gefilterter Daten. dynamic_snapshot_jobname ist vom Datentyp sysname mit dem Standardwert NULL und ist außerdem ein optionaler OUTPUT-Parameter. Wird dieses Argument angegeben, muss dynamic_snapshot_jobname zu einem eindeutigen Auftrag auf dem Verteiler aufgelöst werden. Wird das Argument nicht angegeben, wird automatisch ein Auftragsname generiert und im Resultset zurückgegeben, wo der Name folgendermaßen erstellt wird:

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

    Wenn Sie den Namen des Auftrags für eine dynamische Momentaufnahme generieren, können Sie den Namen des Auftrags für eine Standardmomentaufnahme abschneiden.

  • [ @dynamic_snapshot_jobid= ] 'dynamic_snapshot_jobid'
    Ein Bezeichner des erstellten Auftrags für die Momentaufnahme gefilterter Daten. dynamic_snapshot_jobid ist vom Datentyp uniqueidentifier mit dem Standardwert NULL und ist außerdem ein optionaler OUTPUT-Parameter.

  • [ @frequency_type=] frequency_type
    Die Häufigkeit, mit der der Auftrag für die Momentaufnahme gefilterter Daten geplant werden soll. frequency_type ist vom Datentyp int. Die folgenden Werte sind möglich.

    Wert

    Beschreibung

    1

    Einmal

    2

    Bedarfsgesteuert

    4 (Standard)

    Täglich

    8

    Wöchentlich

    16

    Monatlich

    32

    Monatlich, relativ

    64

    Autostart

    128

    Wiederholt

  • [ @frequency_interval = ] frequency_interval
    Der Zeitraum (in Tagen) der Ausführung des Auftrags für die Momentaufnahme gefilterter Daten. frequency_interval ist vom Datentyp int. Der Standardwert ist 1, und der Wert hängt vom Wert von frequency_type ab.

    Wert für frequency_type

    Auswirkung auf frequency_interval

    1

    frequency_interval wird nicht verwendet.

    4 (Standard)

    Alle frequency_interval Tage; der Standard ist täglich.

    8

    frequency_interval kann einen oder mehrere der folgenden Werte aufweisen (verknüpft mit dem logischen | (Bitweises OR) (Transact-SQL)-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 kann einen der folgenden Werte aufweisen:

    1 = Sonntag | 2 = Montag | 3 = Dienstag | 4 = Mittwoch | 5 = Donnerstag | 6 = Freitag | 7 = Samstag | 8 = Tag | 9 = Arbeitstag | 10 = Wochenendtag

    64

    frequency_interval wird nicht verwendet.

    128

    frequency_interval wird nicht verwendet.

  • [ @frequency_subday=] frequency_subday
    Gibt die Einheiten für das frequency_subday_interval an. frequency_subday ist vom Datentyp int. Die folgenden Werte sind möglich.

    Wert

    Beschreibung

    1

    Einmal

    2

    Zweimal

    4 (Standard)

    Minute

    8

    Stunde

  • [ @frequency_subday_interval=] frequency_subday_interval
    Die Anzahl der frequency_subday-Zeiträume zwischen jeder Ausführung des Auftrags. frequency_subday_interval ist vom Datentyp int. Der Standardwert ist 5.

  • [ @frequency_relative_interval=] frequency_relative_interval
    Das Auftreten des Auftrags für eine Momentaufnahme gefilterter Daten in jedem Monat. Dieser Parameter wird verwendet, wenn frequency_type auf 32 (monatlich, relativ) festgelegt ist. frequency_relative_interval ist vom Datentyp int. Die folgenden Werte sind möglich.

    Wert

    Beschreibung

    1 (Standard)

    Erster

    2

    Zweiter

    4

    Dritter

    8

    Vierter

    16

    Letzter

  • [ @frequency_recurrence_factor=] frequency_recurrence_factor
    Der von frequency_type verwendete Wiederholungsfaktor. frequency_recurrence_factor ist vom Datentyp int. Der Standardwert ist 0.

  • [ @active_start_date=] active_start_date
    Das Datum, an dem der Auftrag für die Momentaufnahme gefilterter Daten zum ersten Mal geplant ist. Dabei wird das Format JJJJMMTT verwendet. active_start_date ist vom Datentyp int und hat den Standardwert NULL.

  • [ @active_end_date=] active_end_date
    Das Datum, ab dem der Auftrag für die Momentaufnahme gefilterter Daten nicht mehr geplant ist. Dabei wird das Format JJJJMMTT verwendet. active_end_date ist vom Datentyp int und hat den Standardwert NULL.

  • [ @active_start_time_of_day=] active_start_time_of_day
    Die Tageszeit, zu der der Auftrag für die Momentaufnahme gefilterter Daten zum ersten Mal geplant ist. Dabei wird das Format HHMMSS verwendet. active_start_time_of_day ist vom Datentyp int und hat den Standardwert NULL.

  • [ @active_end_time_of_day=] active_end_time_of_day
    Die Tageszeit, ab der der Auftrag für die Momentaufnahme gefilterter Daten nicht mehr geplant ist. Dabei wird das Format HHMMSS verwendet. active_end_time_of_day ist vom Datentyp int und hat den Standardwert NULL.

Resultset

Spaltenname

Datentyp

Beschreibung

id

int

Identifiziert den Auftrag für eine Momentaufnahme gefilterter Daten in der MSdynamicsnapshotjobs-Systemtabelle.

dynamic_snapshot_jobname

sysname

Name des Auftrags für eine Momentaufnahme gefilterter Daten.

dynamic_snapshot_jobid

uniqueidentifier

Identifiziert den Auftrag des Microsoft SQL Server-Agents eindeutig auf dem Verteiler.

Rückgabecodewerte

0 (Erfolg) oder 1 (Fehler)

Hinweise

sp_adddynamicsnapshot_job wird bei der Mergereplikation für Veröffentlichungen verwendet, die einen parametrisierten Filter verwenden.

Beispiel

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

Berechtigungen

Nur Mitglieder der festen Serverrolle sysadmin oder der festen Datenbankrolle db_owner können sp_adddynamicsnapshot_job ausführen.

Siehe auch

Verweis

sp_dropdynamicsnapshot_job (Transact-SQL)

sp_helpdynamicsnapshot_job (Transact-SQL)

Konzepte

Erstellen einer Momentaufnahme für eine Mergeveröffentlichung mit parametrisierten Filtern

Parametrisierte Zeilenfilter