Bagikan melalui


sp_changepublication (T-SQL)

Berlaku untuk: SQL Server Azure SQL Managed Instance

Mengubah properti publikasi. Prosedur tersimpan ini dijalankan di Publisher pada database publikasi.

Konvensi sintaks transact-SQL

Sintaks

sp_changepublication
    [ [ @publication = ] N'publication' ]
    [ , [ @property = ] N'property' ]
    [ , [ @value = ] N'value' ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]
    [ , [ @publisher = ] N'publisher' ]
[ ; ]

Argumen

[ @publication = ] N'publikasi'

Nama publikasi. @publication adalah sysname, dengan default NULL.

[ @property = ] N'property'

Properti publikasi yang akan diubah. @property adalah nvarchar(255), dengan default NULL.

[ @value = ] N'value'

Nilai properti baru. @value adalah nvarchar(255), dengan default NULL.

Tabel ini menjelaskan properti publikasi yang dapat diubah dan pembatasan nilai untuk properti tersebut.

Properti Nilai Deskripsi
allow_anonymous true Langganan anonim dapat dibuat untuk publikasi yang diberikan, dan immediate_sync juga harus true. Tidak dapat diubah untuk publikasi peer-to-peer.
false Langganan anonim tidak dapat dibuat untuk publikasi yang diberikan. Tidak dapat diubah untuk publikasi peer-to-peer.
allow_initialize_from_backup true Pelanggan dapat menginisialisasi langganan ke publikasi ini dari cadangan daripada rekam jepret awal. Properti ini tidak dapat diubah untuk publikasi non-SQL Server.
false Pelanggan harus menggunakan rekam jepret awal. Properti ini tidak dapat diubah untuk publikasi non-SQL Server.
allow_partition_switch true ALTER TABLE...SWITCH pernyataan dapat dijalankan terhadap database yang diterbitkan. Untuk informasi selengkapnya, lihat Mereplikasi Tabel dan Indeks yang Dipartisi.
false ALTER TABLE...SWITCH pernyataan tidak dapat dijalankan terhadap database yang diterbitkan.
allow_pull true Langganan penarikan diizinkan untuk publikasi yang diberikan. Properti ini tidak dapat diubah untuk publikasi non-SQL Server.
false Langganan penarikan tidak diizinkan untuk publikasi yang diberikan. Properti ini tidak dapat diubah untuk publikasi non-SQL Server.
allow_push true Langganan push diizinkan untuk publikasi yang diberikan.
false Langganan push tidak diizinkan untuk publikasi yang diberikan.
allow_subscription_copy true Memungkinkan kemampuan untuk menyalin database yang berlangganan publikasi ini. Properti ini tidak dapat diubah untuk publikasi non-SQL Server.
false Menonaktifkan kemampuan untuk menyalin database yang berlangganan publikasi ini. Properti ini tidak dapat diubah untuk publikasi non-SQL Server.
alt_snapshot_folder Lokasi folder alternatif untuk rekam jepret.
centralized_conflicts true Rekaman konflik disimpan di Publisher. Dapat diubah hanya jika tidak ada langganan aktif. Properti ini tidak dapat diubah untuk publikasi non-SQL Server.
false Rekaman konflik disimpan di Penerbit dan di Pelanggan yang menyebabkan konflik. Dapat diubah hanya jika tidak ada langganan aktif. Properti ini tidak dapat diubah untuk publikasi non-SQL Server.
compress_snapshot true Rekam jepret dalam folder rekam jepret alternatif dikompresi ke dalam format file .cab. Rekam jepret di folder rekam jepret default tidak dapat dikompresi.
false Rekam jepret tidak dikompresi, yang merupakan perilaku default untuk replikasi.
conflict_policy pub wins Kebijakan resolusi konflik untuk memperbarui Pelanggan di mana Penerbit memenangkan konflik. Properti ini hanya dapat diubah jika tidak ada langganan aktif. Tidak didukung untuk Oracle Publishers.
sub reinit Untuk memperbarui Pelanggan, jika konflik terjadi, langganan harus diinisialisasi ulang. Properti ini hanya dapat diubah jika tidak ada langganan aktif. Tidak didukung untuk Oracle Publishers.
sub wins Kebijakan resolusi konflik untuk memperbarui Pelanggan di mana Pelanggan memenangkan konflik. Properti ini hanya dapat diubah jika tidak ada langganan aktif. Tidak didukung untuk Oracle Publishers.
conflict_retention Nilai int yang menentukan periode retensi konflik, dalam hari. Retensi default adalah 14 hari. 0 berarti tidak diperlukan pembersihan konflik. Tidak didukung untuk Oracle Publishers.
description Entri opsional yang menjelaskan publikasi.
enabled_for_het_sub true Memungkinkan publikasi untuk mendukung Pelanggan non-SQL Server. enabled_for_het_sub tidak dapat diubah saat ada langganan ke publikasi. Anda mungkin perlu menjalankan sp_changepublication untuk mematuhi persyaratan berikut sebelum mengatur enabled_for_het_sub ke true:
- allow_queued_tran harus merupakan false.
- allow_sync_tran harus merupakan false.
Mengubah enabled_for_het_sub ke true mungkin mengubah pengaturan publikasi yang ada. Untuk informasi selengkapnya, lihat Pelanggan Non-SQL Server. Properti ini tidak dapat diubah untuk publikasi non-SQL Server.
false Publikasi tidak mendukung Pelanggan non-SQL Server. Properti ini tidak dapat diubah untuk publikasi non-SQL Server.
enabled_for_internet true Publikasi diaktifkan untuk Internet, dan Protokol Transfer File (FTP) dapat digunakan untuk mentransfer file rekam jepret ke pelanggan. File sinkronisasi untuk publikasi dimasukkan ke dalam direktori berikut: C:\Program Files\Microsoft SQL Server\MSSQL\Repldata\ftp. ftp_address tidak boleh NULL. Properti ini tidak dapat diubah untuk publikasi non-SQL Server.
false Publikasi tidak diaktifkan untuk Internet. Properti ini tidak dapat diubah untuk publikasi non-SQL Server.
enabled_for_p2p true Publikasi mendukung replikasi peer-to-peer. Properti ini tidak dapat diubah untuk publikasi non-SQL Server.
Untuk mengatur enabled_for_p2p ke true, pembatasan berikut berlaku:
- allow_anonymous harus false
- allow_dts harus merupakan false.
- allow_initialize_from_backup harus true
- allow_queued_tran harus merupakan false.
- allow_sync_tran harus merupakan false.
- enabled_for_het_sub harus merupakan false.
- independent_agent harus merupakan true.
- repl_freq harus merupakan continuous.
- replicate_ddl harus merupakan 1.
false Publikasi tidak mendukung replikasi peer-to-peer. Properti ini tidak dapat diubah untuk publikasi non-SQL Server.
ftp_address Lokasi file rekam jepret publikasi yang dapat diakses FTP. Properti ini tidak dapat diubah untuk publikasi non-SQL Server.
ftp_login Nama pengguna yang digunakan untuk menyambungkan ke layanan FTP, dan nilainya anonymous diizinkan. Properti ini tidak dapat diubah untuk publikasi non-SQL Server.
ftp_password Kata sandi untuk nama pengguna yang digunakan untuk menyambungkan ke layanan FTP. Properti ini tidak dapat diubah untuk publikasi non-SQL Server.
ftp_port Nomor port layanan FTP untuk Distributor. Properti ini tidak dapat diubah untuk publikasi non-SQL Server.
ftp_subdirectory Menentukan tempat file rekam jepret dibuat jika publikasi mendukung penyebaran rekam jepret menggunakan FTP. Properti ini tidak dapat diubah untuk publikasi non-SQL Server.
immediate_sync true File sinkronisasi untuk publikasi dibuat atau dibuat ulang setiap kali Agen Rekam Jepret berjalan. Pelanggan dapat menerima file sinkronisasi segera setelah langganan, jika Agen Rekam Jepret selesai sekali sebelum langganan. Langganan baru mendapatkan file sinkronisasi terbaru yang dihasilkan oleh eksekusi terbaru Agen Rekam Jepret. independent_agent juga harus true. Untuk informasi selengkapnya, lihat Efek sinkronisasi langsung.
false File sinkronisasi dibuat hanya jika ada langganan baru. Pelanggan tidak dapat menerima file sinkronisasi setelah langganan hingga Agen Rekam Jepret dimulai dan selesai.
independent_agent true Publikasi memiliki Agen Distribusi khusus sendiri.
false Publikasi menggunakan Agen Distribusi bersama, dan setiap pasangan database publikasi/langganan memiliki agen bersama.
p2p_continue_onconflict true Agen Distribusi terus memproses perubahan ketika konflik terdeteksi.

Perhatian: Kami sarankan Anda menggunakan nilai default .FALSE Ketika opsi ini diatur ke TRUE, Agen Distribusi mencoba menyatukan data dalam topologi dengan menerapkan baris yang bertentangan dari simpul yang merupakan ID pencetus tertinggi. Metode ini tidak menjamin konvergensi. Anda harus memastikan bahwa topologi konsisten setelah konflik terdeteksi. Untuk informasi selengkapnya, lihat "Menangani Konflik" di Peer-to-Peer - Deteksi Konflik di Replikasi Peer-to-Peer.
false Agen Distribusi berhenti memproses perubahan ketika konflik terdeteksi.
post_snapshot_script Menentukan lokasi file skrip Transact-SQL yang dijalankan Agen Distribusi setelah semua skrip objek dan data lain yang direplikasi diterapkan selama sinkronisasi awal.
pre_snapshot_script Menentukan lokasi file skrip Transact-SQL yang dijalankan Agen Distribusi sebelum semua skrip objek dan data lain yang direplikasi diterapkan selama sinkronisasi awal.
publish_to_ActiveDirectory true Parameter ini tidak digunakan lagi dan hanya didukung untuk kompatibilitas skrip mundur. Anda tidak dapat lagi menambahkan informasi publikasi ke Microsoft Active Directory.
false Menghapus informasi publikasi dari Direktori Aktif.
queue_type sql Gunakan SQL Server untuk menyimpan transaksi. Properti ini hanya dapat diubah jika tidak ada langganan aktif.

Catatan: Dukungan untuk menggunakan Antrean Pesan Microsoft dihentikan. Menentukan nilai msmq untuk @value menghasilkan kesalahan.
redirected_publisher Nama pendengar grup ketersediaan. Digunakan dalam replikasi peer-to-peer saat rekan berada dalam grup ketersediaan. Properti ini tidak dapat diubah untuk publikasi non-SQL Server. Diperkenalkan di SQL Server 2019 (15.x) CU 13. Untuk informasi selengkapnya, lihat Mengonfigurasi satu peer sebagai bagian dari grup ketersediaan atau Mengonfigurasi kedua rekan dalam grup ketersediaan.
repl_freq continuous Menerbitkan output semua transaksi berbasis log.
snapshot Menerbitkan hanya peristiwa sinkronisasi terjadwal.
replicate_ddl 1 Pernyataan bahasa definisi data (DDL) yang dijalankan di penerbit direplikasi. Properti ini tidak dapat diubah untuk publikasi non-SQL Server.
0 Pernyataan DDL tidak direplikasi. Properti ini tidak dapat diubah untuk publikasi non-SQL Server. Replikasi perubahan skema tidak dapat dinonaktifkan saat menggunakan replikasi peer-to-peer.
replicate_partition_switch true ALTER TABLE...SWITCH pernyataan yang dijalankan terhadap database yang diterbitkan harus direplikasi ke Pelanggan. Opsi ini hanya valid jika allow_partition_switch diatur ke true. Untuk informasi selengkapnya, lihat Mereplikasi Tabel dan Indeks yang Dipartisi.
false ALTER TABLE...SWITCH pernyataan tidak boleh direplikasi ke Pelanggan.
retention int mewakili periode retensi, dalam jam, untuk aktivitas langganan. Jika langganan tidak aktif dalam periode retensi, langganan akan dihapus.
snapshot_in_defaultfolder true File rekam jepret disimpan di folder rekam jepret default. Jika alt_snapshot_folder juga ditentukan, file rekam jepret disimpan di lokasi default dan alternatif.
false File rekam jepret disimpan di lokasi alternatif yang ditentukan oleh alt_snapshot_folder.
status active Data publikasi tersedia untuk Pelanggan segera saat publikasi dibuat. Tidak didukung untuk Oracle Publishers.
inactive Data publikasi tidak tersedia untuk Pelanggan saat publikasi dibuat. Tidak didukung untuk Oracle Publishers.
sync_method native Menggunakan output salinan massal mode asli dari semua tabel saat menyinkronkan langganan.
character Menggunakan output salinan massal mode karakter dari semua tabel saat menyinkronkan langganan.
concurrent Menggunakan output program penyalinan massal mode asli dari semua tabel, tetapi tidak mengunci tabel selama proses pembuatan rekam jepret. Tidak valid untuk replikasi rekam jepret.
concurrent_c Menggunakan output program salin massal mode karakter dari semua tabel, tetapi tidak mengunci tabel selama proses pembuatan rekam jepret. Tidak valid untuk replikasi rekam jepret.
taskid Properti ini tidak digunakan lagi dan tidak lagi didukung.
allow_drop true DROP TABLE Mengaktifkan dukungan DLL untuk artikel yang merupakan bagian dari replikasi transaksional. Versi minimum yang didukung: SQL Server 2014 (12.x) Paket Layanan 2 atau lebih tinggi dan Paket Layanan SQL Server 2016 (13.x) 1 atau lebih tinggi. Untuk informasi selengkapnya, lihat KB 3170123
false (default) DROP TABLE Menonaktifkan dukungan DLL untuk artikel yang merupakan bagian dari replikasi transaksional.
NULL (default) Mengembalikan daftar nilai yang didukung untuk @property.

[ @force_invalidate_snapshot = ] force_invalidate_snapshot

Mengakui bahwa tindakan yang diambil oleh prosedur tersimpan ini mungkin membatalkan rekam jepret yang ada. @force_invalidate_snapshot adalah bit, dengan default 0.

  • 0 menentukan bahwa perubahan pada artikel tidak menyebabkan rekam jepret tidak valid. Jika prosedur tersimpan mendeteksi bahwa perubahan memang memerlukan rekam jepret baru, kesalahan terjadi dan tidak ada perubahan yang dilakukan.
  • 1 menentukan bahwa perubahan pada artikel dapat menyebabkan rekam jepret tidak valid. Jika ada langganan yang memerlukan rekam jepret baru, nilai ini memberikan izin agar rekam jepret yang ada ditandai sebagai usang dan rekam jepret baru dihasilkan.

Lihat bagian Keterangan untuk properti yang, saat diubah, memerlukan pembuatan rekam jepret baru.

[ @force_reinit_subscription = ] force_reinit_subscription

Mengakui bahwa tindakan yang diambil oleh prosedur tersimpan ini mungkin mengharuskan langganan yang ada untuk diinisialisasi ulang. @force_reinit_subscription adalah bit, dengan default 0.

  • 0 menentukan bahwa perubahan pada artikel tidak menyebabkan langganan diinisialisasi ulang. Jika prosedur tersimpan mendeteksi bahwa perubahan akan mengharuskan langganan yang ada diinisialisasi ulang, kesalahan terjadi dan tidak ada perubahan yang dilakukan.
  • 1 menentukan bahwa perubahan pada artikel menyebabkan langganan yang ada diinisialisasi ulang, dan memberikan izin untuk reinitialisasi langganan terjadi.

[ @publisher = ] N'publisher'

Menentukan Penerbit Non-SQL Server. @publisher adalah sysname, dengan default NULL.

@publisher tidak boleh digunakan saat mengubah properti artikel di Penerbit SQL Server.

Mengembalikan nilai kode

0 (berhasil) atau 1 (kegagalan).

Keterangan

sp_changepublication digunakan dalam replikasi rekam jepret dan replikasi transaksional.

Setelah mengubah salah satu properti berikut, Anda harus membuat rekam jepret baru, dan Anda harus menentukan nilai 1 untuk parameter @force_invalidate_snapshot .

  • alt_snapshot_folder
  • compress_snapshot
  • enabled_for_het_sub
  • ftp_address
  • ftp_login
  • ftp_password
  • ftp_port
  • ftp_subdirectory
  • post_snapshot_script
  • pre_snapshot_script
  • snapshot_in_defaultfolder
  • sync_mode

Untuk mencantumkan objek publikasi di Direktori Aktif menggunakan publish_to_active_directory parameter , objek SQL Server harus sudah dibuat di Direktori Aktif.

Efek sinkronisasi langsung

Saat sinkronisasi langsung aktif, semua perubahan dalam log dilacak segera setelah rekam jepret awal dihasilkan bahkan jika tidak ada langganan. Perubahan yang dicatat digunakan saat pelanggan menggunakan cadangan untuk menambahkan simpul serekan baru. Setelah cadangan dipulihkan, serekan disinkronkan dengan perubahan lain yang terjadi setelah cadangan diambil. Karena perintah dilacak dalam database distribusi, logika sinkronisasi dapat melihat LSN yang dicadangkan terakhir dan menggunakan ini sebagai titik awal, mengetahui bahwa perintah tersedia jika cadangan diambil dalam periode retensi maksimum. (Nilai default untuk periode retensi minimum adalah 0 jam, dan periode retensi maksimum adalah 24 jam.)

Ketika sinkronisasi segera nonaktif, perubahan disimpan setidaknya periode retensi min dan segera dibersihkan untuk semua transaksi yang sudah direplikasi. Jika sinkronisasi langsung nonaktif dan dikonfigurasi dengan periode retensi default, kemungkinan perubahan yang diperlukan setelah pencadangan diambil dibersihkan, dan simpul serekan baru tidak akan diinisialisasi dengan benar. Satu-satunya opsi yang tersisa adalah menghentikan topologi. Mengatur sinkronisasi langsung ke aktif memberikan fleksibilitas yang lebih besar dan merupakan pengaturan yang direkomendasikan untuk replikasi P2P.

Contoh

DECLARE @publication AS sysname
SET @publication = N'AdvWorksProductTran' 

-- Turn off DDL replication for the transactional publication.
USE [AdventureWorks2022]
EXEC sp_changepublication 
  @publication = @publication, 
  @property = N'replicate_ddl', 
  @value = 0
GO

Izin

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