sp_adddynamicsnapshot_job (T-SQL)

Berlaku untuk:SQL ServerAzure SQL Managed Instance

Membuat pekerjaan agen yang menghasilkan rekam jepret data yang difilter untuk publikasi dengan filter baris berparameter. Prosedur tersimpan ini dijalankan di Publisher pada database publikasi. Prosedur tersimpan ini digunakan oleh administrator untuk membuat pekerjaan rekam jepret data yang difilter secara manual untuk Pelanggan.

Catatan

Agar pekerjaan rekam jepret data yang difilter dibuat, pekerjaan rekam jepret standar untuk publikasi harus sudah ada.

Untuk informasi selengkapnya, lihat Membuat Rekam Jepret untuk Publikasi Gabungan dengan Filter Berparameter.

Konvensi sintaks transact-SQL

Sintaks

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

Argumen

[ @publication = ] N'publikasi'

Nama publikasi tempat pekerjaan rekam jepret data yang difilter sedang ditambahkan. @publication adalah sysname, tanpa default.

[ @suser_sname = ] N'suser_sname'

Nilai yang digunakan saat membuat rekam jepret data yang difilter untuk langganan yang difilter berdasarkan nilai fungsi SUSER_SNAME di Pelanggan. @suser_sname adalah sysname, dengan default NULL. @suser_sname harus NULL jika fungsi ini tidak digunakan untuk memfilter publikasi secara dinamis.

[ @host_name = ] N'host_name'

Nilai yang digunakan saat membuat rekam jepret data yang difilter untuk langganan yang difilter berdasarkan nilai fungsi HOST_NAME di Pelanggan. @host_name adalah sysname, dengan default NULL. host_name harus NULL jika fungsi ini tidak digunakan untuk memfilter publikasi secara dinamis.

[ @dynamic_snapshot_jobname = ] OUTPUT N'dynamic_snapshot_jobname'

Nama pekerjaan rekam jepret data yang difilter dibuat. @dynamic_snapshot_jobname adalah parameter OUTPUT dari jenis sysname. Jika ditentukan, @dynamic_snapshot_jobname harus menyelesaikan pekerjaan unik di Distributor. Jika tidak ditentukan, nama pekerjaan secara otomatis dihasilkan dalam kumpulan hasil, di mana nama dibuat sebagai berikut:

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

Catatan

Saat menghasilkan nama pekerjaan rekam jepret dinamis, Anda dapat memotong nama pekerjaan rekam jepret standar.

[ @dynamic_snapshot_jobid = ] OUTPUT 'dynamic_snapshot_jobid'

Pengidentifikasi untuk pekerjaan rekam jepret data yang difilter dibuat. @dynamic_snapshot_jobid adalah parameter OUTPUT dari jenis uniqueidentifier, dengan default NULL.

[ @frequency_type = ] frequency_type

Menentukan frekuensi di mana pekerjaan rekam jepret data yang difilter dijadwalkan. @frequency_type int, dan bisa menjadi salah satu nilai ini.

Nilai Deskripsi
1 Satu kali
2 (default) Sesuai permintaan
4 Harian
8 Mingguan
16 Bulanan
32 Relatif bulanan
64 Autostart
128 Berulang

[ @frequency_interval = ] frequency_interval

Periode, diukur dalam hari, ketika pekerjaan rekam jepret data yang difilter dijalankan. @frequency_interval int, dan tergantung pada nilai @frequency_type.

Nilai @frequency_type Pengaruh pada @frequency_interval
1 (default) @frequency_interval tidak digunakan.
4 Setiap @frequency_interval hari.
8 @frequency_interval adalah satu atau beberapa hal berikut (dikombinasikan dengan | (Bitwise ATAU) (T-SQL) operator logis):

1 = Minggu
2 = Senin
4 = Selasa
8 = Rabu
16 = Kamis
32 = Jumat
64 = Sabtu
16 Pada hari @frequency_interval dalam sebulan.
32 @frequency_interval adalah salah satu opsi berikut:

1 = Minggu
2 = Senin
3 = Selasa
4 = Rabu
5 = Kamis
6 = Jumat
7 = Sabtu
8 = Hari
9 = Hari kerja
10 = Hari akhir pekan
64 @frequency_interval tidak digunakan.
128 @frequency_interval tidak digunakan.

[ @frequency_subday = ] frequency_subday

Menentukan unit untuk @frequency_subday_interval. @frequency_subday int, dan bisa menjadi salah satu nilai ini.

Nilai Deskripsi
1 (default) Satu kali
2 Second
4 Minute
8 Hour

[ @frequency_subday_interval = ] frequency_subday_interval

Jumlah periode frequency_subday yang terjadi antara setiap eksekusi pekerjaan. @frequency_subday_interval int, dengan default 1.

[ @frequency_relative_interval = ] frequency_relative_interval

Terjadinya pekerjaan rekam jepret data yang difilter di setiap bulan. Parameter ini digunakan ketika @frequency_type diatur ke 32 (relatif bulanan). @frequency_relative_interval int, dan bisa menjadi salah satu nilai ini.

Nilai Deskripsi
1 (default) First
2 Second
4 Ketiga
8 Keempat
16 Last

[ @frequency_recurrence_factor = ] frequency_recurrence_factor

Faktor pengulangan yang digunakan oleh frequency_type. @frequency_recurrence_factor int, dengan default 1.

[ @active_start_date = ] active_start_date

Tanggal saat pekerjaan rekam jepret data yang difilter pertama kali dijadwalkan, diformat sebagai yyyyMMdd. @active_start_date int, dengan default 0.

[ @active_end_date = ] active_end_date

Tanggal ketika pekerjaan rekam jepret data yang difilter berhenti dijadwalkan, diformat sebagai yyyyMMdd. @active_end_date int, dengan default 0.

[ @active_start_time_of_day = ] active_start_time_of_day

Waktu hari ketika pekerjaan rekam jepret data yang difilter pertama kali dijadwalkan, diformat sebagai HHmmss. @active_start_time_of_day int, dengan default 0.

[ @active_end_time_of_day = ] active_end_time_of_day

Waktu hari ketika pekerjaan rekam jepret data yang difilter berhenti dijadwalkan, diformat sebagai HHmmss. @active_end_time_of_day int, dengan default 0.

Tataan hasil

Nama kolom Jenis data Deskripsi
id int Mengidentifikasi pekerjaan rekam jepret data yang difilter dalam tabel sistem MSdynamicsnapshotjobs .
dynamic_snapshot_jobname nama sysname Nama pekerjaan rekam jepret data yang difilter.
dynamic_snapshot_jobid pengidentifikasi unik Secara unik mengidentifikasi pekerjaan SQL Server Agent di Distributor.

Mengembalikan nilai kode

0 (berhasil) atau 1 (kegagalan).

Keterangan

sp_adddynamicsnapshot_job digunakan dalam replikasi penggabungan untuk publikasi yang menggunakan filter berparameter.

Contoh

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

Izin

Hanya anggota peran server tetap sysadmin atau peran database tetap db_owner yang dapat menjalankan sp_adddynamicsnapshot_job.