Menginisialisasi ulang Langganan

Berlaku untuk:SQL ServerAzure SQL Database

Topik ini menjelaskan cara menginisialisasi ulang langganan di SQL Server dengan menggunakan SQL Server Management Studio, Transact-SQL, atau Replication Management Objects (RMO). Langganan individual dapat ditandai untuk reinisialisasi sehingga rekam jepret baru diterapkan selama sinkronisasi berikutnya.

Catatan

Azure SQL Managed Instance dapat menjadi penerbit, distributor, dan pelanggan untuk rekam jepret dan replikasi transaksional. Database di Azure SQL Database hanya dapat menjadi pelanggan pendorongan untuk rekam jepret dan replikasi transaksional. Untuk informasi selengkapnya, lihat Replikasi transaksional dengan Azure SQL Database dan Azure SQL Managed Instance.

Menggunakan SQL Server Management Studio

Menginisialisasi ulang langganan adalah proses dua bagian:

  1. Satu langganan atau semua langganan ke publikasi ditandai untuk reinisialisasi. Tandai langganan untuk reinisialisasi dalam kotak dialog Menginisialisasi ulang Langganan , yang tersedia dari folder Publikasi Lokal dan folder Langganan Lokal di Microsoft SQL Server Management Studio. Anda juga dapat menandai langganan dari tab Semua Langganan dan simpul publikasi di Monitor Replikasi. Untuk informasi tentang memulai Monitor Replikasi, lihat Memulai Monitor Replikasi. Saat Anda menandai langganan untuk reinisialisasi, Anda memiliki opsi berikut:

    Menggunakan rekam jepret saat ini
    Pilih untuk menerapkan rekam jepret saat ini ke Pelanggan saat berikutnya Agen Distribusi atau Agen Penggabungan berjalan. Jika tidak tersedia rekam jepret yang valid, opsi ini tidak dapat dipilih.

    Menggunakan rekam jepret baru
    Pilih untuk menginisialisasi ulang langganan dengan rekam jepret baru. Rekam jepret dapat diterapkan ke Pelanggan hanya setelah dibuat oleh Agen Rekam Jepret. Jika Agen Rekam Jepret diatur untuk berjalan sesuai jadwal, langganan tidak diinisialisasi ulang hingga setelah Agen Rekam Jepret terjadwal berikutnya berjalan. Pilih Hasilkan rekam jepret baru sekarang untuk segera memulai Agen Rekam Jepret.

    Unggah perubahan yang tidak disinkronkan sebelum reinisialisasi
    Gabungkan replikasi saja. Pilih untuk mengunggah perubahan yang tertunda dari database langganan sebelum data di Pelanggan ditimpa dengan rekam jepret.

    Jika Anda menambahkan, menghilangkan, atau mengubah filter berparameter, perubahan yang tertunda di Pelanggan tidak dapat diunggah ke Penerbit selama reinisialisasi. Jika Anda ingin mengunggah perubahan yang tertunda, sinkronkan semua langganan sebelum mengubah filter.

  2. Langganan diinisialisasi ulang saat berikutnya disinkronkan: Agen Distribusi (untuk replikasi transaksional) atau Agen Penggabungan (untuk replikasi penggabungan) menerapkan rekam jepret terbaru ke setiap Pelanggan yang memiliki langganan yang ditandai untuk reinitialisasi. Untuk informasi selengkapnya tentang menyinkronkan langganan, lihat Menyinkronkan Langganan Push dan Menyinkronkan Langganan Pull.

Untuk menandai satu langganan pendorongan atau penarikan untuk reinisialisasi di Management Studio (di Penerbit)

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

  2. Perluas folder Replikasi, lalu perluas folder Publikasi Lokal.

  3. Perluas publikasi yang memiliki langganan yang ingin Anda masukkan ulang.

  4. Klik kanan langganan, lalu klik Inisialisasi ulang.

  5. Dalam kotak dialog Menginisialisasi ulang Langganan , pilih opsi, lalu klik Tandai untuk Reinisialisasi.

Untuk menandai satu langganan penarikan untuk reinisialisasi di Management Studio (di Pelanggan)

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

  2. Perluas folder Replikasi, lalu perluas folder Langganan Lokal.

  3. Klik kanan langganan, lalu klik Inisialisasi ulang.

  4. Dalam kotak dialog konfirmasi yang ditampilkan, klik Ya.

Untuk menandai semua langganan untuk reinisialisasi di Management Studio

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

  2. Perluas folder Replikasi, lalu perluas folder Publikasi Lokal.

  3. Klik kanan publikasi dengan langganan yang ingin Anda masukkan ulang, lalu klik Masukkan Ulang Semua Langganan.

  4. Dalam kotak dialog Menginisialisasi ulang Langganan , pilih opsi, lalu klik Tandai untuk Reinisialisasi.

Untuk menandai satu langganan pendorongan atau penarikan untuk reinisialisasi di Monitor Replikasi

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

  2. Klik tab Semua Langganan .

  3. Klik kanan langganan yang ingin Anda inisialisasi ulang, lalu klik Inisialisasi Ulang Langganan.

  4. Dalam kotak dialog Menginisialisasi ulang Langganan , pilih opsi, lalu klik Tandai untuk Reinisialisasi.

Untuk menandai semua langganan untuk reinisialisasi di Monitor Replikasi

  1. Di Monitor Replikasi, perluas grup Publisher di panel kiri, lalu perluas Publisher.

  2. Klik kanan publikasi dengan langganan yang ingin Anda masukkan ulang, lalu klik Masukkan Ulang Semua Langganan.

  3. Dalam kotak dialog Menginisialisasi ulang Langganan , pilih opsi, lalu klik Tandai untuk Reinisialisasi.

Menggunakan T-SQL

Langganan dapat diinisialisasi ulang secara terprogram menggunakan prosedur tersimpan replikasi. Prosedur tersimpan yang digunakan tergantung pada jenis langganan (dorong atau tarik) dan jenis publikasi tempat langganan berada.

Untuk menginisialisasi ulang langganan penarikan ke publikasi transaksi

  1. Di Pelanggan pada database langganan, jalankan sp_reinitpullsubscription (Transact-SQL). Tentukan @publisher, @publisher_db, dan @publication. Ini menandai langganan untuk reinisialisasi saat agen Distribusi berjalan berikutnya.

  2. (Opsional) Mulai Agen Distribusi di Pelanggan untuk menyinkronkan langganan. Untuk informasi selengkapnya, lihat Menyinkronkan Langganan Pull.

Untuk menginisialisasi ulang langganan pendorongan ke publikasi transaksi

  1. Di Publisher, jalankan sp_reinitsubscription (Transact-SQL). Tentukan @publication, @subscriber, dan @destination_db. Ini menandai langganan untuk reinisialisasi saat agen Distribusi berjalan berikutnya.

  2. (Opsional) Mulai Agen Distribusi di Distributor untuk menyinkronkan langganan. Untuk informasi selengkapnya, lihat Menyinkronkan Langganan Push.

Untuk menginisialisasi ulang langganan penarikan ke publikasi gabungan

  1. Di Pelanggan pada database langganan, jalankan sp_reinitmergepullsubscription (Transact-SQL). Tentukan @publisher, @publisher_db, dan @publication. Untuk mengunggah perubahan dari Pelanggan sebelum reinisialisasi terjadi, tentukan nilai true untuk @upload_first. Ini menandai langganan untuk reinitialisasi saat berikutnya Agen Penggabungan berjalan.

    Penting

    Jika Anda menambahkan, menghilangkan, atau mengubah filter berparameter, perubahan yang tertunda di Pelanggan tidak dapat diunggah ke Penerbit selama reinisialisasi. Jika Anda ingin mengunggah perubahan yang tertunda, sinkronkan semua langganan sebelum mengubah filter.

  2. (Opsional) Mulai Agen Penggabungan di Pelanggan untuk menyinkronkan langganan. Untuk informasi selengkapnya, lihat Menyinkronkan Langganan Pull.

Untuk menginisialisasi ulang langganan pendorongan ke publikasi gabungan

  1. Di Publisher, jalankan sp_reinitmergesubscription (Transact-SQL). Tentukan @publication, @subscriber, dan @subscriber_db. Untuk mengunggah perubahan dari Pelanggan sebelum reinisialisasi terjadi, tentukan nilai true untuk @upload_first. Ini menandai langganan untuk reinisialisasi saat agen Distribusi berjalan berikutnya.

    Penting

    Jika Anda menambahkan, menghilangkan, atau mengubah filter berparameter, perubahan yang tertunda di Pelanggan tidak dapat diunggah ke Penerbit selama reinisialisasi. Jika Anda ingin mengunggah perubahan yang tertunda, sinkronkan semua langganan sebelum mengubah filter.

  2. (Opsional) Mulai Agen Penggabungan di Distributor untuk menyinkronkan langganan. Untuk informasi selengkapnya, lihat Menyinkronkan Langganan Push.

Untuk mengatur kebijakan reinitialisasi saat membuat publikasi penggabungan baru

  1. Di Publisher pada database publikasi, jalankan sp_addmergepublication, tentukan salah satu nilai berikut untuk @automatic_reinitialization_policy:

    • 1 - perubahan diunggah dari Pelanggan sebelum langganan secara otomatis diinisialisasi ulang sebagaimana diperlukan oleh perubahan pada publikasi.

    • 0 - perubahan di Pelanggan dibuang ketika langganan secara otomatis diinisialisasi ulang sebagaimana diperlukan oleh perubahan pada publikasi.

    Penting

    Jika Anda menambahkan, menghilangkan, atau mengubah filter berparameter, perubahan yang tertunda di Pelanggan tidak dapat diunggah ke Penerbit selama reinisialisasi. Jika Anda ingin mengunggah perubahan yang tertunda, sinkronkan semua langganan sebelum mengubah filter.

    Untuk informasi selengkapnya, lihat Membuat Publikasi.

Untuk mengubah kebijakan reinitialisasi untuk publikasi penggabungan yang ada

  1. Di Publisher pada database publikasi, jalankan sp_changemergepublication, tentukan automatic_reinitialization_policy untuk @property dan salah satu nilai berikut untuk @value:

    • 1 - perubahan diunggah dari Pelanggan sebelum langganan secara otomatis diinisialisasi ulang sebagaimana diperlukan oleh perubahan pada publikasi.

    • 0 - perubahan di Pelanggan dibuang ketika langganan secara otomatis diinisialisasi ulang sebagaimana diperlukan oleh perubahan pada publikasi.

    Penting

    Jika Anda menambahkan, menghilangkan, atau mengubah filter berparameter, perubahan yang tertunda di Pelanggan tidak dapat diunggah ke Penerbit selama reinisialisasi. Jika Anda ingin mengunggah perubahan yang tertunda, sinkronkan semua langganan sebelum mengubah filter.

    Untuk informasi selengkapnya, lihat Menampilkan dan Mengubah Properti Publikasi.

Menggunakan Objek Manajemen Replikasi (RMO)

Langganan individual dapat ditandai untuk reinisialisasi sehingga selama sinkronisasi berikutnya, rekam jepret baru diterapkan. Langganan dapat diinisialisasi ulang secara terprogram dengan menggunakan Objek Manajemen Replikasi (RMO). Kelas yang Anda gunakan bergantung pada jenis publikasi tempat langganan berada dan jenis langganan (yaitu, langganan pendorongan atau penarikan).

Untuk menginisialisasi ulang langganan penarikan ke publikasi transaksi

  1. Buat koneksi ke Pelanggan dengan menggunakan ServerConnection kelas .

  2. Buat instans TransPullSubscription kelas, dan atur PublicationName, , DatabaseNamePublisherName, PublicationDBName, dan koneksi dari langkah 1 untuk ConnectionContext.

  3. LoadProperties Panggil metode untuk mendapatkan properti objek.

    Catatan

    Jika metode ini mengembalikan false, properti langganan di langkah 2 didefinisikan dengan tidak benar atau langganan penarikan tidak ada.

  4. Panggil Reinitialize metode. Metode ini menandai langganan untuk reinisialisasi.

  5. Sinkronkan langganan penarikan. Untuk informasi selengkapnya, lihat Menyinkronkan Langganan Pull.

Untuk menginisialisasi ulang langganan pendorongan ke publikasi transaksi

  1. Buat koneksi ke Publisher dengan menggunakan ServerConnection kelas .

  2. Buat instans TransSubscription kelas, dan atur PublicationName, , DatabaseNameSubscriberName, SubscriptionDBName, dan koneksi dari langkah 1 untuk ConnectionContext.

  3. LoadProperties Panggil metode untuk mendapatkan properti objek.

    Catatan

    Jika metode ini mengembalikan false, properti langganan di langkah 2 didefinisikan dengan tidak benar atau langganan push tidak ada.

  4. Panggil Reinitialize metode. Metode ini menandai langganan untuk reinisialisasi.

  5. Sinkronkan langganan push. Untuk informasi selengkapnya, lihat Menyinkronkan Langganan Push.

Untuk menginisialisasi ulang langganan penarikan ke publikasi gabungan

  1. Buat koneksi ke Pelanggan dengan menggunakan ServerConnection kelas .

  2. Buat instans MergePullSubscription kelas, dan atur PublicationName, , DatabaseNamePublisherName, PublicationDBName, dan koneksi dari langkah 1 untuk ConnectionContext.

  3. LoadProperties Panggil metode untuk mendapatkan properti objek.

    Catatan

    Jika metode ini mengembalikan false, properti langganan di langkah 2 didefinisikan dengan tidak benar atau langganan penarikan tidak ada.

  4. Panggil Reinitialize metode. Berikan nilai true untuk mengunggah perubahan di Pelanggan sebelum reinisialisasi atau nilai false untuk menginisialisasi ulang dan kehilangan perubahan yang tertunda di Pelanggan. Metode ini menandai langganan untuk reinisialisasi.

    Catatan

    Perubahan tidak dapat diunggah jika langganan kedaluwarsa. Untuk informasi selengkapnya, lihat Mengatur Periode Kedaluwarsa untuk Langganan.

  5. Sinkronkan langganan penarikan. Untuk informasi selengkapnya, lihat Menyinkronkan Langganan Pull.

Untuk menginisialisasi ulang langganan pendorongan ke publikasi gabungan

  1. Buat koneksi ke Publisher dengan menggunakan ServerConnection kelas .

  2. Buat instans MergeSubscription kelas, dan atur PublicationName, , DatabaseNameSubscriberName, SubscriptionDBName, dan koneksi dari langkah 1 untuk ConnectionContext.

  3. LoadProperties Panggil metode untuk mendapatkan properti objek.

    Catatan

    Jika metode ini mengembalikan false, properti langganan di langkah 2 didefinisikan dengan tidak benar atau langganan push tidak ada.

  4. Panggil Reinitialize metode. Berikan nilai true untuk mengunggah perubahan di Pelanggan sebelum reinisialisasi atau nilai false untuk menginisialisasi ulang dan kehilangan perubahan yang tertunda di Pelanggan. Metode ini menandai langganan untuk reinisialisasi.

    Catatan

    Perubahan tidak dapat diunggah jika langganan kedaluwarsa. Untuk informasi selengkapnya, lihat Mengatur Periode Kedaluwarsa untuk Langganan.

  5. Sinkronkan langganan push. Untuk informasi selengkapnya, lihat Menyinkronkan Langganan Push.

Contoh (RMO)

Contoh ini menginisialisasi ulang langganan penarikan ke publikasi transaksi.

// Define server, publication, and database names.
String subscriberName = subscriberInstance;
String publisherName = publisherInstance;
String publicationName = "AdvWorksProductTran";
String publicationDbName = "AdventureWorks2022";
String subscriptionDbName = "AdventureWorks2022Replica";

// Create a connection to the Subscriber.
ServerConnection conn = new ServerConnection(subscriberName);

TransPullSubscription subscription;

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

    // Define subscription properties.
    subscription = new TransPullSubscription();
    subscription.ConnectionContext = conn;
    subscription.DatabaseName = subscriptionDbName;
    subscription.PublisherName = publisherName;
    subscription.PublicationDBName = publicationDbName;
    subscription.PublicationName = publicationName;

    // If the pull subscription and the job exists, mark the subscription
    // for reinitialization and start the agent job.
    if (subscription.LoadProperties() && subscription.AgentJobId != null)
    {
        subscription.Reinitialize();
        subscription.SynchronizeWithJob();
    }
    else
    {
        // Do something here if the subscription does not exist.
        throw new ApplicationException(String.Format(
            "A subscription to '{0}' does not exists on {1}",
            publicationName, subscriberName));
    }
}
catch (Exception ex)
{
    // Do appropriate error handling here.
    throw new ApplicationException("The subscription could not be reinitialized.", ex);
}
finally
{
    conn.Disconnect();
}
' Define server, publication, and database names.
Dim subscriberName As String = subscriberInstance
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksProductTran"
Dim publicationDbName As String = "AdventureWorks2022"
Dim subscriptionDbName As String = "AdventureWorks2022Replica"

' Create a connection to the Subscriber.
Dim conn As ServerConnection = New ServerConnection(subscriberName)

Dim subscription As TransPullSubscription

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

    ' Define subscription properties.
    subscription = New TransPullSubscription()
    subscription.ConnectionContext = conn
    subscription.DatabaseName = subscriptionDbName
    subscription.PublisherName = publisherName
    subscription.PublicationDBName = publicationDbName
    subscription.PublicationName = publicationName

    ' If the pull subscription and the job exists, mark the subscription
    ' for reinitialization and start the agent job.
    If subscription.LoadProperties() And (Not subscription.AgentJobId Is Nothing) Then
        subscription.Reinitialize()
        subscription.SynchronizeWithJob()
    Else
        ' Do something here if the subscription does not exist.
        Throw New ApplicationException(String.Format( _
         "A subscription to '{0}' does not exists on {1}", _
         publicationName, subscriberName))
    End If
Catch ex As Exception
    ' Do appropriate error handling here.
    Throw New ApplicationException("The subscription could not be reinitialized.", ex)
Finally
    conn.Disconnect()
End Try

Contoh ini menginisialisasi ulang langganan penarikan ke publikasi gabungan setelah terlebih dahulu mengunggah perubahan yang tertunda di Pelanggan.

// Define server, publication, and database names.
String subscriberName = subscriberInstance;
String publisherName = publisherInstance;
String publicationName = "AdvWorksSalesOrdersMerge";
String publicationDbName = "AdventureWorks2022";
String subscriptionDbName = "AdventureWorks2022Replica";

// Create a connection to the Subscriber.
ServerConnection conn = new ServerConnection(subscriberName);

MergePullSubscription subscription;

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

    // Define subscription properties.
    subscription = new MergePullSubscription();
    subscription.ConnectionContext = conn;
    subscription.DatabaseName = subscriptionDbName;
    subscription.PublisherName = publisherName;
    subscription.PublicationDBName = publicationDbName;
    subscription.PublicationName = publicationName;

    // If the pull subscription and the job exists, mark the subscription
    // for reinitialization after upload and start the agent job.
    if (subscription.LoadProperties() && subscription.AgentJobId != null)
    {
        subscription.Reinitialize(true);
        subscription.SynchronizeWithJob();
    }
    else
    {
        // Do something here if the subscription does not exist.
        throw new ApplicationException(String.Format(
            "A subscription to '{0}' does not exists on {1}",
            publicationName, subscriberName));
    }
}
catch (Exception ex)
{
    // Do appropriate error handling here.
    throw new ApplicationException("The subscription could not be synchronized.", ex);
}
finally
{
    conn.Disconnect();
}
' Define server, publication, and database names.
Dim subscriberName As String = subscriberInstance
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publicationDbName As String = "AdventureWorks2022"
Dim subscriptionDbName As String = "AdventureWorks2022Replica"

' Create a connection to the Subscriber.
Dim conn As ServerConnection = New ServerConnection(subscriberName)

Dim subscription As MergePullSubscription

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

    ' Define subscription properties.
    subscription = New MergePullSubscription()
    subscription.ConnectionContext = conn
    subscription.DatabaseName = subscriptionDbName
    subscription.PublisherName = publisherName
    subscription.PublicationDBName = publicationDbName
    subscription.PublicationName = publicationName

    ' If the pull subscription and the job exists, mark the subscription
    ' for reinitialization after upload and start the agent job.
    If subscription.LoadProperties() And (Not subscription.AgentJobId Is Nothing) Then
        subscription.Reinitialize(True)
        subscription.SynchronizeWithJob()
    Else
        ' Do something here if the subscription does not exist.
        Throw New ApplicationException(String.Format( _
         "A subscription to '{0}' does not exists on {1}", _
         publicationName, subscriberName))
    End If
Catch ex As Exception
    ' Do appropriate error handling here.
    Throw New ApplicationException("The subscription could not be synchronized.", ex)
Finally
    conn.Disconnect()
End Try

Lihat Juga

Menginisialisasi ulang Langganan
Konsep Objek Manajemen Replikasi
Praktik Terbaik Keamanan Replikasi