sp_addpublication (T-SQL)

Berlaku untuk:SQL ServerAzure SQL Managed Instance

Membuat rekam jepret atau publikasi transaksi. Prosedur tersimpan ini dijalankan di Publisher pada database publikasi.

Konvensi sintaks transact-SQL

Sintaks

sp_addpublication
    [ @publication = ] N'publication'
    [ , [ @taskid = ] taskid ]
    [ , [ @restricted = ] N'restricted' ]
    [ , [ @sync_method = ] N'sync_method' ]
    [ , [ @repl_freq = ] N'repl_freq' ]
    [ , [ @description = ] N'description' ]
    [ , [ @status = ] N'status' ]
    [ , [ @independent_agent = ] N'independent_agent' ]
    [ , [ @immediate_sync = ] N'immediate_sync' ]
    [ , [ @enabled_for_internet = ] N'enabled_for_internet' ]
    [ , [ @allow_push = ] N'allow_push' ]
    [ , [ @allow_pull = ] N'allow_pull' ]
    [ , [ @allow_anonymous = ] N'allow_anonymous' ]
    [ , [ @allow_sync_tran = ] N'allow_sync_tran' ]
    [ , [ @autogen_sync_procs = ] N'autogen_sync_procs' ]
    [ , [ @retention = ] retention ]
    [ , [ @allow_queued_tran = ] N'allow_queued_tran' ]
    [ , [ @snapshot_in_defaultfolder = ] N'snapshot_in_defaultfolder' ]
    [ , [ @alt_snapshot_folder = ] N'alt_snapshot_folder' ]
    [ , [ @pre_snapshot_script = ] N'pre_snapshot_script' ]
    [ , [ @post_snapshot_script = ] N'post_snapshot_script' ]
    [ , [ @compress_snapshot = ] N'compress_snapshot' ]
    [ , [ @ftp_address = ] N'ftp_address' ]
    [ , [ @ftp_port = ] ftp_port ]
    [ , [ @ftp_subdirectory = ] N'ftp_subdirectory' ]
    [ , [ @ftp_login = ] N'ftp_login' ]
    [ , [ @ftp_password = ] N'ftp_password' ]
    [ , [ @allow_dts = ] N'allow_dts' ]
    [ , [ @allow_subscription_copy = ] N'allow_subscription_copy' ]
    [ , [ @conflict_policy = ] N'conflict_policy' ]
    [ , [ @centralized_conflicts = ] N'centralized_conflicts' ]
    [ , [ @conflict_retention = ] conflict_retention ]
    [ , [ @queue_type = ] N'queue_type' ]
    [ , [ @add_to_active_directory = ] N'add_to_active_directory' ]
    [ , [ @logreader_job_name = ] N'logreader_job_name' ]
    [ , [ @qreader_job_name = ] N'qreader_job_name' ]
    [ , [ @publisher = ] N'publisher' ]
    [ , [ @allow_initialize_from_backup = ] N'allow_initialize_from_backup' ]
    [ , [ @replicate_ddl = ] replicate_ddl ]
    [ , [ @enabled_for_p2p = ] N'enabled_for_p2p' ]
    [ , [ @publish_local_changes_only = ] N'publish_local_changes_only' ]
    [ , [ @enabled_for_het_sub = ] N'enabled_for_het_sub' ]
    [ , [ @p2p_conflictdetection = ] N'p2p_conflictdetection' ]
    [ , [ @p2p_originator_id = ] p2p_originator_id ]
    [ , [ @p2p_continue_onconflict = ] N'p2p_continue_onconflict' ]
    [ , [ @allow_partition_switch = ] N'allow_partition_switch' ]
    [ , [ @replicate_partition_switch = ] N'replicate_partition_switch' ]
    [ , [ @allow_drop = ] N'allow_drop' ]
    [ , [ @p2p_conflictdetection_policy = ] N'p2p_conflictdetection_policy' ]
[ ; ]

Argumen

[ @publication = ] N'publikasi'

Nama publikasi yang akan dibuat. @publication adalah sysname, tanpa default. Nama dalam database harus unik.

[ @taskid = ] taskid

Didukung hanya untuk kompatibilitas mundur; gunakan sp_addpublication_snapshot (Transact-SQL).

[ @restricted = ] N'dibatasi'

Didukung hanya untuk kompatibilitas mundur; gunakan default_access.

[ @sync_method = ] N'sync_method'

Mode sinkronisasi. @sync_method adalah nvarchar(40), dan bisa menjadi salah satu nilai berikut.

Nilai Description
native1 Menghasilkan output program salinan massal mode asli dari semua tabel.
character Menghasilkan output program salin massal mode karakter dari semua tabel. Catatan: Untuk Oracle Publisher, character hanya valid untuk replikasi rekam jepret.
concurrent1 Menghasilkan output program salin massal mode asli dari semua tabel tetapi tidak mengunci tabel selama rekam jepret. Hanya didukung untuk publikasi transaksi.
concurrent_c Menghasilkan output program salin massal mode karakter dari semua tabel tetapi tidak mengunci tabel selama rekam jepret. Hanya didukung untuk publikasi transaksi.
database snapshot Menghasilkan output program salinan massal mode asli dari semua tabel dari rekam jepret database. Rekam jepret database tidak tersedia di setiap edisi SQL Server. Untuk daftar fitur yang didukung oleh edisi SQL Server, lihat Edisi dan fitur yang didukung SQL Server 2022.
database snapshot character Menghasilkan output program salin massal mode karakter dari semua tabel dari rekam jepret database. Rekam jepret database tidak tersedia di setiap edisi SQL Server. Untuk daftar fitur yang didukung oleh edisi SQL Server, lihat Edisi dan fitur yang didukung SQL Server 2022.
NULL (default) Default ke native untuk Penerbit SQL Server. Untuk Penerbit non-SQL Server, default character ke saat nilai @repl_freq adalah Snapshot dan concurrent_c untuk semua kasus lainnya.

1 Tidak didukung untuk Oracle Publishers.

[ @repl_freq = ] N'repl_freq'

Jenis frekuensi replikasi, @repl_freq adalah nvarchar(10), dan bisa menjadi salah satu nilai berikut.

Nilai Deskripsi
continuous (default) Agen pembaca log berjalan terus menerus. Untuk Penerbit non-SQL Server, ini mengharuskan @sync_method diatur ke concurrent_c.
snapshot Agen pembaca log berjalan sesuai jadwal. Untuk Penerbit non-SQL Server, ini mengharuskan @sync_method diatur ke character.

[ @description = ] N'description'

Deskripsi opsional untuk publikasi. @description adalah nvarchar(255), dengan default NULL.

[ @status = ] N'status'

Menentukan apakah data publikasi tersedia. @status adalah nvarchar(8), dan bisa menjadi salah satu nilai berikut.

Nilai Deskripsi
active Data publikasi tersedia untuk Pelanggan segera.
inactive (default) Data publikasi tidak tersedia untuk Pelanggan saat publikasi pertama kali dibuat (mereka dapat berlangganan, tetapi langganan tidak diproses).

Tidak didukung untuk Oracle Publishers.

[ @independent_agent = ] N'independent_agent'

Menentukan apakah ada Agen Distribusi yang berdiri sendiri untuk publikasi ini. @independent_agent adalah nvarchar(5), dengan default false.

  • Jika true, ada Agen Distribusi yang berdiri sendiri untuk publikasi ini.
  • Jika false, publikasi menggunakan Agen Distribusi bersama, dan setiap database Penerbit/pasangan database Pelanggan memiliki satu Agen bersama.

[ @immediate_sync = ] N'immediate_sync'

Menentukan apakah file sinkronisasi untuk publikasi dibuat setiap kali Agen Rekam Jepret berjalan. @immediate_sync adalah nvarchar(5), dengan default false.

Jika true, file sinkronisasi dibuat atau dibuat ulang setiap kali Agen Rekam Jepret berjalan. Pelanggan dapat segera mendapatkan file sinkronisasi jika Agen Rekam Jepret telah selesai sebelum langganan dibuat. Langganan baru mendapatkan file sinkronisasi terbaru yang dihasilkan oleh eksekusi terbaru Agen Rekam Jepret. @independent_agent harus true agar @immediate_sync menjadi true. Jika false, file sinkronisasi dibuat hanya jika ada langganan baru. Anda harus memanggil sp_addsubscription untuk setiap langganan saat menambahkan artikel baru secara bertahap ke publikasi yang sudah ada. Pelanggan tidak dapat menerima file sinkronisasi setelah langganan hingga Agen Rekam Jepret dimulai dan selesai.

[ @enabled_for_internet = ] N'enabled_for_internet'

Menentukan apakah publikasi diaktifkan untuk Internet, dan menentukan apakah protokol transfer file (FTP) dapat digunakan untuk mentransfer file rekam jepret ke pelanggan. @enabled_for_internet adalah nvarchar(5), dengan default false. Jika true, file sinkronisasi untuk publikasi dimasukkan ke C:\Program Files\Microsoft SQL Server\MSSQL\MSSQL.x\Repldata\Ftp dalam direktori. Pengguna harus membuat Ftp direktori.

[ @allow_push = ] N'allow_push'

Menentukan apakah langganan push dapat dibuat untuk publikasi yang diberikan. @allow_push adalah nvarchar(5), dengan default true, yang memungkinkan langganan push pada publikasi.

[ @allow_pull = ] N'allow_pull'

Menentukan apakah langganan penarikan dapat dibuat untuk publikasi yang diberikan. @allow_pull adalah nvarchar(5), dengan default false. Jika false, langganan penarikan tidak diizinkan pada publikasi.

[ @allow_anonymous = ] N'allow_anonymous'

Menentukan apakah langganan anonim dapat dibuat untuk publikasi yang diberikan. @allow_anonymous adalah nvarchar(5), dengan default false. Jika true, @immediate_sync juga harus diatur ke true. Jika false, langganan anonim tidak diizinkan pada publikasi.

[ @allow_sync_tran = ] N'allow_sync_tran'

Menentukan apakah langganan yang segera diperbarui diizinkan pada publikasi. @allow_sync_tran adalah nvarchar(5), dengan default false. truetidak didukung untuk Oracle Publishers.

[ @autogen_sync_procs = ] N'autogen_sync_procs'

Menentukan apakah prosedur tersimpan sinkronisasi untuk memperbarui langganan dihasilkan di Publisher. @autogen_sync_procs adalah nvarchar(5), dan bisa menjadi salah satu nilai berikut.

Nilai Deskripsi
true Atur secara otomatis saat memperbarui langganan diaktifkan.
false Atur secara otomatis saat memperbarui langganan tidak diaktifkan atau untuk Penerbit Oracle.
NULL (default) Default ke true saat memperbarui langganan diaktifkan dan false saat memperbarui langganan tidak diaktifkan.

Catatan

Nilai yang disediakan pengguna untuk @autogen_sync_procsakan ditimpa tergantung pada nilai yang ditentukan untuk @allow_queued_tran dan @allow_sync_tran.

[ @retention = ] retensi

Periode retensi dalam jam untuk aktivitas langganan. @retention int, dengan default 336. Jika langganan tidak aktif dalam periode retensi, langganan akan kedaluwarsa dan dihapus. Nilainya bisa lebih besar dari periode retensi maksimum database distribusi yang digunakan oleh Publisher. Jika 0, langganan terkenal untuk publikasi tidak akan pernah kedaluwarsa dan dihapus oleh Agen Pembersihan Langganan Kedaluwarsa.

[ @allow_queued_tran = ] N'allow_queued_tran'

Mengaktifkan atau menonaktifkan antrean perubahan di Pelanggan hingga dapat diterapkan di Penerbit. @allow_queued_tran adalah nvarchar(5), dengan default false.

  • Jika false, perubahan di Pelanggan tidak diantrekan.
  • truetidak didukung untuk Oracle Publishers.

[ @snapshot_in_defaultfolder = ] N'snapshot_in_defaultfolder'

Menentukan apakah file rekam jepret disimpan di folder default. @snapshot_in_defaultfolder adalah nvarchar(5), dengan default true.

  • Jika true, file rekam jepret dapat ditemukan di folder default.
  • Jika false, file rekam jepret telah disimpan di lokasi alternatif yang ditentukan oleh @alt_snapshot_folder.

Lokasi alternatif dapat berada di server lain, pada drive jaringan, atau pada media yang dapat dilepas (seperti CD-ROM atau disk yang dapat dilepas). Anda juga dapat menyimpan file rekam jepret ke situs FTP, untuk diambil oleh Pelanggan di lain waktu. Parameter ini bisa benar dan masih memiliki lokasi dalam parameter @alt_snapshot_folder . Kombinasi ini menentukan bahwa file rekam jepret akan disimpan di lokasi default dan alternatif.

[ @alt_snapshot_folder = ] N'alt_snapshot_folder'

Menentukan lokasi folder alternatif untuk rekam jepret. @alt_snapshot_folder adalah nvarchar(255), dengan default NULL.

[ @pre_snapshot_script = ] N'pre_snapshot_script'

Menentukan penunjuk ke lokasi file .sql . @pre_snapshot_script adalah nvarchar(255), dengan default NULL. Agen Distribusi akan menjalankan skrip pra-rekam jepret sebelum menjalankan salah satu skrip objek yang direplikasi saat menerapkan rekam jepret pada Pelanggan. Skrip dijalankan dalam konteks keamanan yang digunakan oleh Agen Distribusi saat menyambungkan ke database langganan.

[ @post_snapshot_script = ] N'post_snapshot_script'

Menentukan penunjuk ke .sql lokasi file. @post_snapshot_script adalah nvarchar(255), dengan default NULL. Agen Distribusi akan menjalankan skrip pasca-rekam jepret setelah semua skrip objek dan data lain yang direplikasi telah diterapkan selama sinkronisasi awal. Skrip dijalankan dalam konteks keamanan yang digunakan oleh Agen Distribusi saat menyambungkan ke database langganan.

[ @compress_snapshot = ] N'compress_snapshot'

Menentukan bahwa rekam jepret yang ditulis ke lokasi @alt_snapshot_folder akan dikompresi ke dalam format Microsoft CAB. @compress_snapshot adalah nvarchar(5), dengan default false.

  • false menentukan bahwa rekam jepret tidak dikompresi.
  • true menentukan bahwa rekam jepret dikompresi.

File rekam jepret yang lebih besar dari 2 gigabyte (GB) tidak dapat dikompresi. File rekam jepret terkompresi tidak dikompresi di lokasi tempat Agen Distribusi berjalan; Langganan pull biasanya digunakan dengan rekam jepret terkompresi sehingga file tidak dikompresi di Pelanggan. Rekam jepret di folder default tidak dapat dikompresi.

[ @ftp_address = ] N'ftp_address'

Alamat jaringan layanan FTP untuk Distributor. @ftp_address adalah sysname, dengan default NULL. Menentukan di mana file rekam jepret publikasi berada untuk Agen Distribusi atau Agen Penggabungan pelanggan untuk diambil. Karena properti ini disimpan untuk setiap publikasi, setiap publikasi dapat memiliki @ftp_address yang berbeda. Publikasi harus mendukung penyebaran rekam jepret menggunakan FTP.

[ @ftp_port = ] ftp_port

Nomor port layanan FTP untuk Distributor. @ftp_port int, dengan default 21. Menentukan tempat file rekam jepret publikasi berada untuk Agen Distribusi atau Agen Penggabungan pelanggan untuk diambil. Karena properti ini disimpan untuk setiap publikasi, setiap publikasi dapat memiliki @ftp_port sendiri.

[ @ftp_subdirectory = ] N'ftp_subdirectory'

Menentukan tempat file rekam jepret tersedia untuk Agen Distribusi atau Agen Penggabungan pelanggan untuk diambil jika publikasi mendukung penyebaran rekam jepret menggunakan FTP. @ftp_subdirectory adalah nvarchar(255), dengan default NULL. Karena properti ini disimpan untuk setiap publikasi, setiap publikasi dapat memiliki @ftp_subdirctory sendiri atau memilih untuk tidak memiliki subdirektori, yang ditunjukkan dengan NULL nilai.

[ @ftp_login = ] N'ftp_login'

Nama pengguna yang digunakan untuk menyambungkan ke layanan FTP. @ftp_login adalah sysname, dengan default anonymous.

[ @ftp_password = ] N'ftp_password'

Kata sandi pengguna yang digunakan untuk menyambungkan ke layanan FTP. @ftp_password adalah sysname, dengan default NULL.

[ @allow_dts = ] N'allow_dts'

Menentukan bahwa publikasi mengizinkan transformasi data. Anda dapat menentukan paket DTS saat membuat langganan. @allow_dts adalah nvarchar(5), dengan default false, yang tidak mengizinkan transformasi DTS. Ketika @allow_dts benar, @sync_method harus diatur ke character atau concurrent_c.

truetidak didukung untuk Oracle Publishers.

[ @allow_subscription_copy = ] N'allow_subscription_copy'

Mengaktifkan atau menonaktifkan kemampuan untuk menyalin database langganan yang berlangganan publikasi ini. @allow_subscription_copy adalah nvarchar(5), dengan default false.

[ @conflict_policy = ] N'conflict_policy'

Menentukan kebijakan resolusi konflik diikuti ketika opsi pelanggan pembaruan antrean digunakan. @conflict_policy adalah nvarchar(100), dan bisa menjadi salah satu nilai berikut.

Nilai Deskripsi
pub wins Publisher memenangkan konflik.
sub reinit Menginisialisasi ulang langganan.
sub wins Pelanggan memenangkan konflik.
NULL (default) Jika NULL, dan publikasi adalah publikasi rekam jepret, kebijakan default menjadi sub reinit. Jika NULL dan publikasi bukan publikasi rekam jepret, defaultnya menjadi pub wins.

Tidak didukung untuk Oracle Publishers.

[ @centralized_conflicts = ] N'centralized_conflicts'

Menentukan apakah rekaman konflik disimpan di Publisher. @centralized_conflicts adalah nvarchar(5), dengan default NULL.

  • Jika true, rekaman konflik disimpan di Publisher.
  • Jika false, rekaman konflik disimpan di penerbit dan pelanggan yang menyebabkan konflik.

Tidak didukung untuk Oracle Publishers.

[ @conflict_retention = ] conflict_retention

Menentukan periode retensi konflik, dalam hari. Ini adalah periode waktu metadata konflik disimpan untuk replikasi transaksional peer-to-peer dan mengantri memperbarui langganan. @conflict_retention int, dengan default 14.

Tidak didukung untuk Oracle Publishers.

[ @queue_type = ] N'queue_type'

Menentukan jenis antrean mana yang digunakan. @queue_type adalah nvarchar(10), dan bisa menjadi salah satu nilai ini.

Nilai Deskripsi
sql Gunakan SQL Server untuk menyimpan transaksi.
NULL (default) Default ke sql, yang menentukan untuk menggunakan SQL Server untuk menyimpan transaksi.

Catatan

Dukungan untuk menggunakan Antrean Pesan Microsoft dihentikan. Menentukan nilai msmq akan menghasilkan peringatan, dan replikasi akan secara otomatis mengatur nilai ke sql.

Tidak didukung untuk Oracle Publishers.

[ @add_to_active_directory = ] N'add_to_active_directory'

Parameter ini tidak digunakan lagi dan hanya didukung untuk kompatibilitas skrip mundur. Anda tidak dapat lagi menambahkan informasi publikasi ke Microsoft Active Directory.

[ @logreader_job_name = ] N'logreader_job_name'

Nama pekerjaan agen yang ada. @logreader_job_name adalah sysname, dengan default NULL. Parameter ini hanya ditentukan ketika Agen Pembaca Log menggunakan pekerjaan yang ada alih-alih yang baru dibuat.

[ @qreader_job_name = ] N'qreader_job_name'

Nama pekerjaan agen yang ada. @qreader_job_name adalah sysname, dengan default NULL. Parameter ini hanya ditentukan ketika Agen Pembaca Antrean menggunakan pekerjaan yang ada alih-alih yang baru dibuat.

[ @publisher = ] N'publisher'

Menentukan penerbit non-SQL Server. @publisher adalah sysname, dengan default NULL.

@publisher tidak boleh digunakan saat menambahkan publikasi ke Penerbit SQL Server.

[ @allow_initialize_from_backup = ] N'allow_initialize_from_backup'

Menunjukkan apakah Pelanggan dapat menginisialisasi langganan ke publikasi ini dari cadangan daripada rekam jepret awal. @allow_initialize_from_backup adalah nvarchar(5), dan bisa menjadi salah satu nilai berikut:

Nilai Deskripsi
true Mengaktifkan inisialisasi dari cadangan.
false Menonaktifkan inisialisasi dari cadangan.
NULL (default) Default ke true untuk publikasi dalam topologi replikasi peer-to-peer dan false untuk semua publikasi lainnya.

Untuk informasi selengkapnya, lihat Menginisialisasi Langganan Transaksi tanpa Rekam Jepret.

Peringatan

Untuk menghindari data pelanggan yang hilang, saat menggunakan sp_addpublication dengan @allow_initialize_from_backup = N'true', selalu gunakan @immediate_sync = N'true'.

[ @replicate_ddl = ] replicate_ddl

Menunjukkan apakah replikasi skema didukung untuk publikasi. @replicate_ddl int, dengan default 1 untuk Penerbit SQL Server, dan 0 untuk Penerbit non-SQL Server.

  • 1 menunjukkan bahwa pernyataan bahasa definisi data (DDL) yang dijalankan di penerbit direplikasi.
  • 0 menunjukkan bahwa pernyataan DDL tidak direplikasi.

Replikasi skema tidak didukung untuk Penerbit Oracle.

Untuk informasi selengkapnya, lihat Membuat Perubahan Skema pada Database Publikasi.

Parameter @replicate_ddl dihormati saat pernyataan DDL menambahkan kolom. Parameter @replicate_ddl diabaikan saat pernyataan DDL mengubah atau menjatuhkan kolom karena alasan berikut.

  • Saat kolom dihilangkan, sysarticlecolumns harus diperbarui untuk mencegah pernyataan DML baru menyertakan kolom yang dihilangkan, yang akan menyebabkan agen distribusi gagal. Parameter @replicate_ddl diabaikan karena replikasi harus selalu mereplikasi perubahan skema.

  • Saat kolom diubah, jenis data sumber atau nullability mungkin telah berubah, menyebabkan pernyataan DML berisi nilai yang mungkin tidak kompatibel dengan tabel di pelanggan. Pernyataan DML tersebut dapat menyebabkan agen distribusi gagal. Parameter @replicate_ddl diabaikan karena replikasi harus selalu mereplikasi perubahan skema.

  • Saat pernyataan DDL menambahkan kolom baru, sysarticlecolumns tidak menyertakan kolom baru. Pernyataan DML tidak mencoba mereplikasi data untuk kolom baru. Parameter dihormati karena mereplikasi atau tidak mereplikasi DDL dapat diterima.

[ @enabled_for_p2p = ] N'enabled_for_p2p'

Memungkinkan publikasi digunakan dalam topologi replikasi peer-to-peer. @enabled_for_p2p adalah nvarchar(5), dengan default false. true menunjukkan bahwa publikasi mendukung replikasi peer-to-peer. Saat mengatur @enabled_for_p2p ke true, pembatasan berikut berlaku:

  • @allow_anonymous harus false.
  • @allow_dts harus false.
  • @allow_initialize_from_backup harus true.
  • @allow_queued_tran harus false.
  • @allow_sync_tran harus false.
  • @conflict_policy harus false.
  • @independent_agent harus true.
  • @repl_freq harus continuous.
  • @replicate_ddl harus 1.

Untuk informasi selengkapnya, lihat Peer-to-Peer - Replikasi Transaksional.

[ @publish_local_changes_only = ] N'publish_local_changes_only'

Diidentifikasi hanya untuk tujuan informasi. Tidak didukung. Kompatibilitas di masa mendatang tidak dijamin.

[ @enabled_for_het_sub = ] N'enabled_for_het_sub'

Memungkinkan publikasi untuk mendukung Pelanggan non-SQL Server. @enabled_for_het_sub adalah nvarchar(5), dengan default false. Nilai true berarti bahwa publikasi mendukung Pelanggan non-SQL Server. Saat @enabled_for_het_sub adalah true, pembatasan berikut berlaku:

  • @allow_initialize_from_backup harus false.
  • @allow_push harus true.
  • @allow_queued_tran harus false.
  • @allow_subscription_copy harus false.
  • @allow_sync_tran harus false.
  • @autogen_sync_procs harus false.
  • @conflict_policy harus NULL.
  • @enabled_for_internet harus false.
  • @enabled_for_p2p harus false.
  • @ftp_address harus NULL.
  • @ftp_subdirectory harus NULL.
  • @ftp_password harus NULL.
  • @pre_snapshot_script harus NULL.
  • @post_snapshot_script harus NULL.
  • @replicate_ddl harus 0.
  • @qreader_job_name harus NULL.
  • @queue_type harus NULL.
  • @sync_method tidak boleh native atau concurrent.

Untuk informasi selengkapnya, lihat Pelanggan Non-SQL Server.

[ @p2p_conflictdetection = ] N'p2p_conflictdetection'

Memungkinkan Agen Distribusi mendeteksi konflik jika publikasi diaktifkan untuk replikasi peer-to-peer. @p2p_conflictdetection adalah nvarchar(5), dengan default false. Untuk informasi selengkapnya, lihat Peer-to-Peer - Deteksi Konflik di Replikasi Peer-to-Peer.

[ @p2p_originator_id = ] p2p_originator_id

Menentukan ID untuk simpul dalam topologi peer-to-peer. @p2p_originator_id int, dengan default NULL. ID ini digunakan untuk deteksi konflik jika @p2p_conflictdetection diatur ke TRUE. Tentukan ID positif dan bukan nol yang belum digunakan dalam topologi. Untuk daftar ID yang digunakan, jalankan sp_help_peerconflictdetection.

[ @p2p_continue_onconflict = ] N'p2p_continue_onconflict'

Menentukan apakah Agen Distribusi terus memproses perubahan setelah konflik terdeteksi. @p2p_continue_onconflict adalah nvarchar(5), dengan default false.

Perhatian

Kami menyarankan agar 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.

[ @allow_partition_switch = ] N'allow_partition_switch'

Menentukan apakah ALTER TABLE...SWITCH pernyataan dapat dijalankan terhadap database yang diterbitkan. @allow_partition_switch adalah nvarchar(5), dengan default false. Untuk informasi selengkapnya, lihat Mereplikasi Tabel dan Indeks yang Dipartisi.

[ @replicate_partition_switch = ] N'replicate_partition_switch'

Menentukan apakah ALTER TABLE...SWITCH pernyataan yang dijalankan terhadap database yang diterbitkan harus direplikasi ke Pelanggan. @replicate_partition_switch adalah nvarchar(5), dengan default NULL. Opsi ini hanya valid jika @allow_partition_switch diatur ke TRUE.

[ @allow_drop = ] N'allow_drop'

Diidentifikasi hanya untuk tujuan informasi. Tidak didukung. Kompatibilitas di masa mendatang tidak dijamin.

[ @p2p_conflictdetection_policy = ] N'p2p_conflictdetection_policy'

Berlaku untuk: SQL Server 2019 (15.x) CU 13 dan versi yang lebih baru.

@p2p_conflictdetection_policy adalah nvarchar(12), dan bisa menjadi salah satu nilai berikut:

Nilai Deskripsi
originatorid (Default) Agen distribusi mendeteksi konflik dan memutuskan pemenang berdasarkan ID penanda, jika p2p_continue_onconflict = N'true'. Jika tidak, itu akan menimbulkan kesalahan.
lastwriter Agen distribusi mendeteksi konflik dan memutuskan pemenang berdasarkan tanggalwaktu penulis terakhir jika p2p_continue_onconflict = N'true'. Jika tidak, itu akan menimbulkan kesalahan.

Catatan

Ketika Anda menentukan originatorid, deteksi konflik sama dengan SQL Server 2019 (15.x) CU 12 dan versi yang lebih lama. Saat Anda menentukan lastwriter, SQL Server memungkinkan konflik diselesaikan secara otomatis berdasarkan tulisan terbaru.

Mengembalikan nilai kode

0 (berhasil) atau 1 (kegagalan).

Keterangan

sp_addpublication digunakan dalam replikasi rekam jepret dan replikasi transaksional.

Jika ada beberapa publikasi yang menerbitkan objek database yang sama, hanya publikasi dengan nilai 1 @replicate_ddl pernyataan replikasi ALTER TABLE, , ALTER VIEW, ALTER PROCEDURE, ALTER FUNCTIONdan ALTER TRIGGER DDL. Namun, ALTER TABLE DROP COLUMN pernyataan DDL direplikasi oleh semua publikasi yang menerbitkan kolom yang dihilangkan.

Dengan replikasi DDL diaktifkan (@replicate_ddl = 1) untuk publikasi, untuk membuat perubahan DDL nonreplikasi pada publikasi, sp_changepublication harus terlebih dahulu dijalankan untuk mengatur @replicate_ddl ke .0 Setelah pernyataan DDL yang tidak mereplikasi dikeluarkan, sp_changepublication dapat dijalankan lagi untuk mengaktifkan kembali replikasi DDL.

Contoh

-- To avoid storing the login and password in the script file, the values 
-- are passed into SQLCMD as scripting variables. 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".

DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks'; 
SET @publication = N'AdvWorksProductTran'; 
-- Windows account used to run the Log Reader and Snapshot Agents.
SET @login = $(Login); 
-- This should be passed at runtime.
SET @password = $(Password); 

-- Enable transactional or snapshot replication on the publication database.
EXEC sp_replicationdboption 
    @dbname=@publicationDB, 
    @optname=N'publish',
    @value = N'true';

-- Execute sp_addlogreader_agent to create the agent job. 
EXEC sp_addlogreader_agent 
    @job_login = @login, 
    @job_password = @password,
    -- Explicitly specify the use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;

-- Create a new transactional publication with the required properties. 
EXEC sp_addpublication 
    @publication = @publication, 
    @status = N'active',
    @allow_push = N'true',
    @allow_pull = N'true',
    @independent_agent = N'true';

-- Create a new snapshot job for the publication, using a default schedule.
EXEC sp_addpublication_snapshot 
    @publication = @publication, 
    @job_login = @login, 
    @job_password = @password,
    -- Explicitly specify the use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;
GO

Izin

Hanya anggota peran server tetap sysadmin atau peran database tetap db_owner yang dapat menjalankan sp_addpublication. Login autentikasi Windows harus memiliki akun pengguna dalam database yang mewakili akun pengguna Windows mereka. Akun pengguna yang mewakili grup Windows tidak cukup.