Tentukan Jadwal Sinkronisasi

Berlaku untuk: SQL ServerAzure SQL Managed Instance

Topik ini menjelaskan cara menentukan jadwal sinkronisasi di SQL Server dengan menggunakan SQL Server Management Studio, Transact-SQL, atau Replication Management Objects (RMO). Saat membuat langganan, Anda dapat menentukan jadwal sinkronisasi yang mengontrol kapan agen replikasi untuk langganan akan berjalan. Jika Anda tidak menentukan parameter penjadwalan, langganan akan menggunakan jadwal default.

Langganan disinkronkan oleh Agen Distribusi (untuk rekam jepret dan replikasi transaksional) atau Agen Penggabungan (untuk replikasi penggabungan). Agen dapat berjalan terus menerus, berjalan sesuai permintaan, atau berjalan sesuai jadwal.

Menggunakan SQL Server Management Studio

Tentukan jadwal sinkronisasi pada halaman Jadwal Sinkronisasi di Wizard Langganan Baru. Untuk informasi selengkapnya tentang mengakses wizard ini, lihat Membuat Langganan Push dan Membuat Langganan Pull.

Ubah jadwal sinkronisasi dalam kotak dialog Properti Jadwal Pekerjaan, yang tersedia di folder Jobs di SQL Server Management Studio dan di jendela detail agen di Replication Monitor. Untuk informasi tentang cara memulai Monitor Replikasi, lihat Memulai Monitor Replikasi.

Jika Anda menentukan jadwal dari folder Pekerjaan , gunakan tabel berikut untuk menentukan nama pekerjaan agen.

Agen Nama pekerjaan
Gabungkan Agen untuk langganan penarikan <Publisher-PublicationDatabase-Publication-Subscriber-SubscriptionDatabase-integer><><><><><>
Gabungkan Agen untuk langganan push <Publisher-PublicationDatabase-Publication-Subscriber-integer><><><><>
Agen Distribusi untuk langganan push <Publisher-PublicationDatabase-Publication-Subscriber-integer><><><><> 1
Agen Distribusi untuk langganan penarikan <Publisher-PublicationDatabase-Publication-Subscriber-SubscriptionDatabase-GUID><><><><><> 2
Agen Distribusi untuk langganan push ke Pelanggan non-SQL Server <Publisher-PublicationDatabase-Publication-Subscriber-integer><><><><>

1 Untuk langganan push ke publikasi Oracle, yang digunakan adalah <Publisher>-<Publisher>, bukan <Publisher>-<PublicationDatabase>

2 Untuk langganan pull ke publikasi Oracle, yang digunakan adalah ><, bukan >Publisher<->PublicationDatabase

Untuk menentukan jadwal sinkronisasi

  1. Di halaman SynchronizationSchedule pada Wizard Langganan Baru, pilih salah satu nilai berikut dari daftar dropdown Jadwal Agen untuk setiap langganan yang Anda buat:

    • Jalankan terus menerus

    • Jalankan sesuai permintaan saja

    • <Tentukan Jadwal...>

  2. Jika Anda memilih >Tentukan Jadwal..., tentukan jadwal dalam kotak dialog Properti Jadwal Pekerjaan, lalu klik OK.

  3. Selesaikan wizard.

Untuk mengubah jadwal sinkronisasi untuk langganan push di Monitor Replikasi

  1. Perluas grup Publisher di panel kiri Monitor Replikasi, perluas Publisher, lalu klik publikasi.

  2. Klik tab Semua Langganan .

  3. Klik kanan langganan, lalu klik Tampilkan Detail.

  4. Di jendela Langganan > SubscriptionName, klik >, lalu klik AgentName Properti Pekerjaan.

  5. Pada halaman Jadwal di kotak dialog Properti Pekerjaan - >JobName, klik Edit.

  6. Di kotak dialog Properti Jadwal Pekerjaan , pilih nilai dari daftar dropdown Tipe Jadwal :

    • Untuk menentukan bahwa agen harus berjalan terus menerus, pilih Mulai secara otomatis saat SQL Server Agent dimulai.

    • Untuk menentukan bahwa agen harus berjalan sesuai jadwal, pilih Berulang.

    • Untuk menentukan bahwa agen harus berjalan sesuai permintaan, pilih Satu kali.

  7. Jika Anda memilih Berulang, tentukan jadwal untuk agen.

  8. Pilih OK.

Untuk mengubah jadwal sinkronisasi untuk langganan push di Management Studio

  1. Sambungkan ke Distributor di Management Studio, lalu perluas simpul server.

  2. Perluas folder SQL Server Agent, lalu perluas folder Pekerjaan.

  3. Klik kanan tugas untuk Agen Distribusi atau Agen Penggabungan yang terkait dengan langganan tersebut, lalu klik Properti.

  4. Pada halaman Jadwal di kotak dialog Properti Pekerjaan - >JobName, klik Edit.

  5. Di kotak dialog Properti Jadwal Pekerjaan , pilih nilai dari daftar dropdown Tipe Jadwal :

    • Untuk menentukan bahwa agen harus berjalan terus menerus, pilih Mulai secara otomatis saat SQL Server Agent dimulai.

    • Untuk menentukan bahwa agen harus berjalan sesuai jadwal, pilih Berulang.

    • Untuk menentukan bahwa agen harus berjalan sesuai permintaan, pilih Satu kali.

  6. Jika Anda memilih Berulang, tentukan jadwal untuk agen.

  7. Pilih OK.

Untuk mengubah jadwal sinkronisasi langganan pull di Management Studio

  1. Sambungkan ke Pelanggan di Management Studio, lalu perluas simpul server.

  2. Perluas folder SQL Server Agent, lalu perluas folder Pekerjaan.

  3. Klik kanan tugas untuk Agen Distribusi atau Agen Penggabungan yang terkait dengan langganan tersebut, lalu klik Properti.

  4. Pada halaman Jadwal di kotak dialog Properti Pekerjaan - >JobName, klik Edit.

  5. Di kotak dialog Properti Jadwal Pekerjaan , pilih nilai dari daftar dropdown Tipe Jadwal :

    • Untuk menentukan bahwa agen harus berjalan terus menerus, pilih Mulai secara otomatis saat SQL Server Agent dimulai.

    • Untuk menentukan bahwa agen harus berjalan sesuai jadwal, pilih Berulang.

    • Untuk menentukan bahwa agen harus berjalan sesuai permintaan, pilih Satu kali.

  6. Jika Anda memilih Berulang, tentukan jadwal untuk agen.

  7. Pilih OK.

Menggunakan T-SQL

Anda dapat menentukan jadwal sinkronisasi secara terprogram menggunakan prosedur tersimpan replikasi. Prosedur tersimpan yang Anda gunakan bergantung pada jenis replikasi dan jenis langganan (tarik atau dorong).

Jadwal ditentukan oleh parameter penjadwalan berikut, perilaku yang diwarisi dari sp_add_schedule (Transact-SQL):

  • @frequency_type - jenis frekuensi yang digunakan saat menjadwalkan agen.

  • @frequency_interval - hari dalam seminggu ketika agen berjalan.

  • @frequency_relative_interval - minggu tertentu dalam sebulan ketika agen dijadwalkan untuk dijalankan setiap bulan.

  • @frequency_recurrence_factor - jumlah unit bertipe frekuensi yang muncul di antara sinkronisasi.

  • @frequency_subday - unit frekuensi ketika agen berjalan lebih sering daripada sekali sehari.

  • @frequency_subday_interval - jumlah unit frekuensi antara eksekusi ketika agen berjalan lebih sering daripada sekali sehari.

  • @active_start_time_of_day - waktu paling awal pada hari tertentu ketika agen berjalan akan dimulai.

  • @active_end_time_of_day - waktu terbaru dalam hari tertentu ketika agen berjalan akan dimulai.

  • @active_start_date - hari pertama jadwal agen yang akan berlaku.

  • @active_end_date - hari terakhir jadwal agen berlaku.

Untuk menentukan jadwal sinkronisasi untuk langganan penarikan ke publikasi transaksional

  1. Buat langganan pull baru untuk publikasi transaksional. Untuk informasi selengkapnya, lihat Membuat Langganan Pull.

  2. Pada Pelanggan, jalankan sp_addpullsubscription_agent (Transact-SQL). Tentukan @publisher, @publisher_db, @publication, dan kredensial Microsoft Windows yang digunakan oleh Agen Distribusi pada Subscriber untuk menjalankan @job_name dan @password. Tentukan parameter sinkronisasi, yang dirinci di atas, yang menentukan jadwal untuk pekerjaan Agen Distribusi yang menyinkronkan langganan.

Untuk menentukan jadwal sinkronisasi untuk langganan push ke publikasi transaksional

  1. Buat langganan push baru untuk publikasi transaksional. Untuk informasi selengkapnya, lihat Membuat Langganan Push.

  2. Pada Pelanggan, jalankan sp_addpushsubscription_agent (Transact-SQL). Tentukan @subscriber, @subscriber_db, @publication, serta kredensial Windows yang digunakan Agen Distribusi di Subscriber untuk berjalan bagi @job_name dan @password. Tentukan parameter sinkronisasi, yang dirinci di atas, yang menentukan jadwal untuk pekerjaan Agen Distribusi yang menyinkronkan langganan.

Untuk menentukan jadwal sinkronisasi untuk langganan penarikan ke publikasi gabungan

  1. Buat langganan pull baru untuk publikasi penggabungan. Untuk informasi selengkapnya, lihat Membuat Langganan Pull.

  2. Pada Subscriber, jalankan sp_addmergepullsubscription_agent. Tentukan @publisher, @publisher_db, @publication, serta kredensial Windows yang digunakan Merge Agent di Subscriber untuk menjalankan @job_name dan @password. Tentukan parameter sinkronisasi, yang dirinci di atas, yang menentukan jadwal untuk pekerjaan Agen Penggabungan yang menyinkronkan langganan.

Untuk menentukan jadwal sinkronisasi bagi langganan push ke publikasi merge

  1. Buat langganan push baru ke publikasi gabungan. Untuk informasi selengkapnya, lihat Membuat Langganan Push.

  2. Pada Subscriber, jalankan sp_addmergepushsubscription_agent. Tentukan @subscriber, @subscriber_db, @publication, dan kredensial Windows yang digunakan Merge Agent pada Subscriber untuk berjalan untuk @job_name dan @password. Tentukan parameter sinkronisasi, yang dirinci di atas, yang menentukan jadwal untuk pekerjaan Agen Penggabungan yang menyinkronkan langganan.

Menggunakan Objek Manajemen Replikasi (RMO)

Replikasi menggunakan SQL Server Agent untuk menjadwalkan pekerjaan untuk aktivitas yang terjadi secara berkala, seperti pembuatan rekam jepret dan sinkronisasi langganan. Anda dapat menggunakan Objek Manajemen Replikasi (RMO) secara terprogram untuk menentukan jadwal untuk pekerjaan agen replikasi.

Catatan

Saat Anda membuat langganan dan menentukan nilai false untuk CreateSyncAgentByDefault (perilaku default untuk langganan pull), tugas agen tidak dibuat dan properti penjadwalan diabaikan. Dalam hal ini, jadwal sinkronisasi harus ditentukan oleh aplikasi. Untuk informasi selengkapnya, lihat Membuat Langganan Pull dan Membuat Langganan Push.

Untuk menentukan jadwal agen replikasi saat Anda membuat langganan push ke publikasi transaksional

  1. Buat instance dari kelas TransSubscription untuk langganan yang sedang Anda buat. Untuk informasi selengkapnya, lihat Membuat Langganan Push.

  2. Sebelum Anda memanggil Create, atur satu atau beberapa bidang AgentSchedule properti berikut:

    Catatan

    Jika Anda tidak menentukan salah satu properti ini, nilai default diatur.

  3. Create Panggil metode untuk membuat langganan.

Untuk menentukan jadwal agen replikasi saat Anda membuat langganan pull ke publikasi transaksional

  1. Buat instance dari kelas TransPullSubscription untuk langganan yang sedang Anda buat. Untuk informasi selengkapnya, lihat Membuat Langganan Pull.

  2. Sebelum Anda memanggil Create, atur satu atau beberapa bidang AgentSchedule properti berikut:

    Catatan

    Jika Anda tidak menentukan salah satu properti ini, nilai default diatur.

  3. Create Panggil metode untuk membuat langganan.

Untuk menentukan jadwal agen replikasi saat Anda membuat langganan penarikan ke publikasi gabungan

  1. Buat instance dari kelas MergePullSubscription untuk langganan yang sedang Anda buat. Untuk informasi selengkapnya, lihat Membuat Langganan Pull.

  2. Sebelum Anda memanggil Create, atur satu atau beberapa bidang AgentSchedule properti berikut:

    Catatan

    Jika Anda tidak menentukan salah satu properti ini, nilai default diatur.

  3. Create Panggil metode untuk membuat langganan.

Untuk menentukan jadwal agen replikasi saat Anda membuat langganan push ke publikasi gabungan

  1. Buat instance dari kelas MergeSubscription untuk langganan yang sedang Anda buat. Untuk informasi selengkapnya, lihat Membuat Langganan Push.

  2. Sebelum Anda memanggil Create, atur satu atau beberapa bidang AgentSchedule properti berikut:

    Catatan

    Jika Anda tidak menentukan salah satu properti ini, nilai default diatur.

  3. Create Panggil metode untuk membuat langganan.

Contoh (RMO)

Contoh ini membuat langganan push ke publikasi gabungan dan menentukan jadwal sinkronisasi langganan.

// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksSalesOrdersMerge";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorks2022Replica";
string publicationDbName = "AdventureWorks2022";
string hostname = @"adventure-works\garrett1";

//Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);

// Create the objects that we need.
MergePublication publication;
MergeSubscription subscription;

try
{
    // Connect to the Publisher.
    conn.Connect();

    // Ensure that the publication exists and that 
    // it supports push subscriptions.
    publication = new MergePublication();
    publication.Name = publicationName;
    publication.DatabaseName = publicationDbName;
    publication.ConnectionContext = conn;

    if (publication.IsExistingObject)
    {
        if ((publication.Attributes & PublicationAttributes.AllowPush) == 0)
        {
            publication.Attributes |= PublicationAttributes.AllowPush;
        }

        // Define the push subscription.
        subscription = new MergeSubscription();
        subscription.ConnectionContext = conn;
        subscription.SubscriberName = subscriberName;
        subscription.PublicationName = publicationName;
        subscription.DatabaseName = publicationDbName;
        subscription.SubscriptionDBName = subscriptionDbName;
        subscription.HostName = hostname;

        // Set a schedule to synchronize the subscription every 2 hours
        // during weekdays from 6am to 10pm.
        subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.Weekly;
        subscription.AgentSchedule.FrequencyInterval = Convert.ToInt32(0x003E);
        subscription.AgentSchedule.FrequencyRecurrenceFactor = 1;
        subscription.AgentSchedule.FrequencySubDay = ScheduleFrequencySubDay.Hour;
        subscription.AgentSchedule.FrequencySubDayInterval = 2;
        subscription.AgentSchedule.ActiveStartDate = 20051108;
        subscription.AgentSchedule.ActiveEndDate = 20071231;
        subscription.AgentSchedule.ActiveStartTime = 060000;
        subscription.AgentSchedule.ActiveEndTime = 100000;

        // Specify the Windows login credentials for the Merge Agent job.
        subscription.SynchronizationAgentProcessSecurity.Login = winLogin;
        subscription.SynchronizationAgentProcessSecurity.Password = winPassword;

        // Create the push subscription.
        subscription.Create();
    }
    else
    {
        // Do something here if the publication does not exist.
        throw new ApplicationException(String.Format(
            "The publication '{0}' does not exist on {1}.",
            publicationName, publisherName));
    }
}
catch (Exception ex)
{
    // Implement the appropriate error handling here.
    throw new ApplicationException(String.Format(
        "The subscription to {0} could not be created.", publicationName), ex);
}
finally
{
    conn.Disconnect();
}
' Define the Publisher, publication, and databases.
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publisherName As String = publisherInstance
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorks2022Replica"
Dim publicationDbName As String = "AdventureWorks2022"
Dim hostname As String = "adventure-works\garrett1"

'Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)

' Create the objects that we need.
Dim publication As MergePublication
Dim subscription As MergeSubscription

Try
    ' Connect to the Publisher.
    conn.Connect()

    ' Ensure that the publication exists and that 
    ' it supports push subscriptions.
    publication = New MergePublication()
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName
    publication.ConnectionContext = conn

    If publication.IsExistingObject Then
        If (publication.Attributes And PublicationAttributes.AllowPush) = 0 Then
            publication.Attributes = publication.Attributes _
            Or PublicationAttributes.AllowPush
        End If

        ' Define the push subscription.
        subscription = New MergeSubscription()
        subscription.ConnectionContext = conn
        subscription.SubscriberName = subscriberName
        subscription.PublicationName = publicationName
        subscription.DatabaseName = publicationDbName
        subscription.SubscriptionDBName = subscriptionDbName
        subscription.HostName = hostname

        ' Set a schedule to synchronize the subscription every 2 hours
        ' during weekdays from 6am to 10pm.
        subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.Weekly
        subscription.AgentSchedule.FrequencyInterval = Convert.ToInt32("0x003E", 16)
        subscription.AgentSchedule.FrequencyRecurrenceFactor = 1
        subscription.AgentSchedule.FrequencySubDay = ScheduleFrequencySubDay.Hour
        subscription.AgentSchedule.FrequencySubDayInterval = 2
        subscription.AgentSchedule.ActiveStartDate = 20051108
        subscription.AgentSchedule.ActiveEndDate = 20071231
        subscription.AgentSchedule.ActiveStartTime = 60000
        subscription.AgentSchedule.ActiveEndTime = 100000

        ' Specify the Windows login credentials for the Merge Agent job.
        subscription.SynchronizationAgentProcessSecurity.Login = winLogin
        subscription.SynchronizationAgentProcessSecurity.Password = winPassword

        ' Create the push subscription.
        subscription.Create()
    Else

        ' Do something here if the publication does not exist.
        Throw New ApplicationException(String.Format( _
         "The publication '{0}' does not exist on {1}.", _
         publicationName, publisherName))
    End If
Catch ex As Exception
    ' Implement the appropriate error handling here.
    Throw New ApplicationException(String.Format( _
    "The subscription to {0} could not be created.", publicationName), ex)
Finally
    conn.Disconnect()
End Try