sp_changemergearticle (T-SQL)

Berlaku untuk:SQL Server

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

Konvensi sintaks transact-SQL

Sintaks

sp_changemergearticle
    [ @publication = ] N'publication'
    , [ @article = ] N'article'
    [ , [ @property = ] N'property' ]
    [ , [ @value = ] N'value' ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]
[ ; ]

Argumen

[ @publication = ] N'publikasi'

Nama publikasi tempat artikel ada. @publication adalah sysname, tanpa default.

[ @article = ] N'article'

Nama artikel yang akan diubah. @article adalah sysname, tanpa default.

[ @property = ] N'property'

Properti yang akan diubah untuk artikel dan publikasi yang diberikan. @property adalah sysname, dan bisa menjadi salah satu nilai yang tercantum dalam tabel berikut.

[ @value = ] N'value'

Nilai baru untuk properti yang ditentukan. @value adalah nvarchar(2000), dan bisa menjadi salah satu nilai yang tercantum dalam tabel berikut.

Tabel ini menjelaskan properti artikel dan nilai untuk properti tersebut.

Properti Nilai Deskripsi
allow_interactive_resolver true Mengaktifkan penggunaan resolver interaktif untuk artikel.
false Menonaktifkan penggunaan resolver interaktif untuk artikel.
article_resolver Penyelesai kustom untuk artikel. Hanya berlaku untuk artikel tabel.
check_permissions (bitmap) 0x00 Izin tingkat tabel tidak dicentang.
0x10 Izin tingkat tabel dicentang di Penerbit sebelum pernyataan INSERT yang dibuat di Pelanggan diterapkan di Penerbit.
0x20 Izin tingkat tabel dicentang di Penerbit sebelum pernyataan UPDATE yang dibuat di Pelanggan diterapkan di Penerbit.
0x40 Izin tingkat tabel dicentang di Penerbit sebelum pernyataan DELETE di Pelanggan diterapkan di Penerbit.
column_tracking true Mengaktifkan pelacakan tingkat kolom. Hanya berlaku untuk artikel tabel.

Catatan: Pelacakan tingkat kolom tidak dapat digunakan saat menerbitkan tabel dengan lebih dari 246 kolom.
false Menonaktifkan pelacakan tingkat kolom dan meninggalkan deteksi konflik di tingkat baris. Hanya berlaku untuk artikel tabel.
compensate_for_errors true Tindakan kompensasi dilakukan ketika kesalahan terjadi selama sinkronisasi. Untuk informasi selengkapnya, lihat sp_addmergearticle.
false Mengkompensasi tindakan tidak dilakukan, yang merupakan perilaku default. Untuk informasi selengkapnya, lihat sp_addmergearticle.

Penting: Meskipun data di baris yang terpengaruh mungkin tampak tidak konvergensi, segera setelah Anda mengatasi kesalahan apa pun, perubahan dapat diterapkan, dan data menyatu. Jika tabel sumber untuk artikel sudah diterbitkan di publikasi lain, maka nilainya compensate_for_errors harus sama untuk kedua artikel.
creation_script Jalur dan nama skrip skema artikel opsional yang digunakan untuk membuat artikel di database langganan.
delete_tracking true Pernyataan DELETE direplikasi, yang merupakan perilaku default.
false Pernyataan DELETE tidak direplikasi.

Penting: Pengaturan delete_tracking untuk false menghasilkan non-konvergensi, dan baris yang dihapus perlu dihapus secara manual.
description Entri deskriptif untuk artikel.
destination_owner Nama pemilik objek dalam database langganan, jika bukan dbo.
identity_range bigint yang menentukan ukuran rentang yang akan digunakan saat menetapkan nilai identitas baru jika artikel telah identityrangemanagementoption diatur ke auto atau auto_identity_range diatur ke true. Hanya berlaku untuk artikel tabel. Untuk informasi selengkapnya, lihat bagian "Gabungkan Replikasi" di Kolom Identitas Replikasi.
identityrangemanagementoption manual Menonaktifkan manajemen rentang identitas otomatis. Menandai kolom identitas menggunakan NOT FOR REPLICATION untuk mengaktifkan penanganan rentang identitas manual. Untuk informasi selengkapnya, lihat Mereplikasi Kolom Identitas.
none Menonaktifkan semua manajemen rentang identitas.
logical_record_level_conflict_detection true Konflik terdeteksi jika perubahan dilakukan di mana saja dalam catatan logis. Memerlukan yang logical_record_level_conflict_resolution diatur ke true.
false Deteksi konflik default digunakan seperti yang ditentukan oleh column_tracking.
logical_record_level_conflict_resolution true Seluruh rekor logis yang menang menimpa rekor logis yang kalah.
false Baris yang menang tidak dibatasi ke catatan logis.
partition_options 0 Pemfilteran untuk artikel bersifat statis atau tidak menghasilkan subset data unik untuk setiap partisi, yaitu partisi "tumpang tindih".
1 Partisi tumpang tindih, dan pembaruan DML yang dibuat di Pelanggan tidak dapat mengubah partisi tempat baris berada.
2 Pemfilteran untuk artikel menghasilkan partisi yang tidak tumpang tindih, tetapi beberapa Pelanggan dapat menerima partisi yang sama.
3 Pemfilteran untuk artikel menghasilkan partisi yang tidak tumpang tindih yang unik untuk setiap langganan.

Catatan: Jika Anda menentukan nilai 3 untuk partition_options, hanya ada satu langganan untuk setiap partisi data dalam artikel tersebut. Jika langganan kedua dibuat, di mana kriteria pemfilteran langganan baru diselesaikan ke partisi yang sama dengan langganan yang ada, langganan yang ada akan dihilangkan.
pre_creation_command none Jika tabel sudah ada di Pelanggan, tidak ada tindakan yang diambil.
delete Mengeluarkan penghapusan berdasarkan klausa WHERE di filter subset.
drop Menghilangkan tabel sebelum membuatnya kembali.
truncate Memotong tabel tujuan.
processing_order int yang menunjukkan urutan pemrosesan artikel dalam publikasi gabungan.
pub_identity_range bigint yang menentukan ukuran rentang yang dialokasikan untuk Pelanggan dengan langganan server jika artikel telah identityrangemanagementoption diatur ke auto atau auto_identity_range diatur ke true. Rentang identitas ini dicadangkan untuk pelanggan penerbitan ulang untuk dialokasikan ke Pelanggannya sendiri. Hanya berlaku untuk artikel tabel. Untuk informasi selengkapnya, lihat bagian "Gabungkan Replikasi" di Kolom Identitas Replikasi.
published_in_tran_pub true Artikel juga diterbitkan dalam publikasi transaksi.
false Artikel juga tidak diterbitkan dalam publikasi transaksi.
resolver_info Digunakan untuk menentukan informasi tambahan yang diperlukan oleh penyelesai kustom. Beberapa Pemecah Masalah Microsoft memerlukan kolom yang disediakan sebagai input ke pemecah masalah. resolver_info adalah nvarchar(255), dengan default NULL. Untuk informasi selengkapnya, lihat Konflik Replikasi Penggabungan Tingkat Lanjut - Pemecah Masalah Berbasis COM.
schema_option (bitmap) Untuk informasi selengkapnya, lihat bagian Keterangan nanti di artikel ini.
0x00 Menonaktifkan pembuatan skrip oleh Agen Rekam Jepret dan menggunakan skrip yang disediakan di creation_script.
0x01 Menghasilkan skrip pembuatan objek (CREATE TABLE, CREATE PROCEDURE, dan sebagainya).
0x10 Menghasilkan indeks berkluster yang sesuai.
0x20 Mengonversi jenis data yang ditentukan pengguna ke jenis data dasar di Pelanggan. Opsi ini tidak dapat digunakan saat ada batasan CHECK atau DEFAULT pada kolom jenis yang ditentukan pengguna (UDT), jika kolom UDT adalah bagian dari kunci utama, atau jika kolom komputasi mereferensikan kolom UDT.
0x40 Menghasilkan indeks nonclustered yang sesuai.
0x80 Termasuk integritas referensial yang dinyatakan pada kunci primer.
0x100 Mereplikasi pemicu pengguna pada artikel tabel, jika ditentukan.
0x200 Mereplikasi batasan KUNCI ASING. Jika tabel yang direferensikan bukan bagian dari publikasi, semua batasan KUNCI ASING pada tabel yang diterbitkan tidak direplikasi.
0x400 Mereplikasi batasan CHECK.
0x800 Mereplikasi default.
0x1000 Mereplikasi kolatasi tingkat kolom.
0x2000 Mereplikasi properti yang diperluas yang terkait dengan objek sumber artikel yang diterbitkan.
0x4000 Mereplikasi kunci unik jika ditentukan pada artikel tabel.
0x8000 Menghasilkan pernyataan ALTER TABLE saat batasan pembuatan skrip.
0x10000 Mereplikasi batasan CHECK sebagai NOT FOR REPLICATION sehingga batasan tidak diberlakukan selama sinkronisasi.
0x20000 Mereplikasi batasan KUNCI ASING sebagai BUKAN UNTUK REPLIKASI sehingga batasan tidak diberlakukan selama sinkronisasi.
0x40000 Mereplikasi grup file yang terkait dengan tabel atau indeks yang dipartisi.
0x80000 Mereplikasi skema partisi untuk tabel yang dipartisi.
0x100000 Mereplikasi skema partisi untuk indeks yang dipartisi.
0x200000 Mereplikasi statistik tabel.
0x400000 Mereplikasi Pengikatan default
0x800000 Mereplikasi Pengikatan aturan
0x1000000 Mereplikasi indeks teks lengkap
0x2000000 Koleksi skema XML yang terikat ke kolom xml tidak direplikasi.
0x4000000 Mereplikasi indeks pada kolom xml .
0x8000000 Buat skema apa pun yang belum ada pada pelanggan.
0x10000000 Mengonversi kolom xml menjadi ntext pada Pelanggan.
0x20000000 Mengonversi jenis data objek besar (nvarchar(max), varchar(max), dan varbinary(max)) yang diperkenalkan di SQL Server 2005 (9.x) ke jenis data yang didukung pada SQL Server 2000 (8.x).
0x40000000 Mereplikasi izin.
0x80000000 Coba hilangkan dependensi ke objek apa pun yang bukan bagian dari publikasi.
0x100000000 Gunakan opsi ini untuk mereplikasi atribut FILESTREAM, jika ditentukan pada kolom varbinary(max ). Jangan tentukan opsi ini jika Anda mereplikasi tabel ke Pelanggan SQL Server 2005 (9.x). Mereplikasi tabel yang memiliki kolom FILESTREAM ke Pelanggan SQL Server 2000 (8.x) tidak didukung, terlepas dari bagaimana opsi skema ini diatur. Lihat opsi 0x800000000terkait .
0x200000000 Mengonversi jenis data tanggal dan waktu (tanggal, waktu, datetimeoffset, dan datetime2) yang diperkenalkan di SQL Server 2008 (10.0.x) ke jenis data yang didukung pada versi SQL Server sebelumnya.
0x400000000 Mereplikasi opsi kompresi untuk data dan indeks. Untuk informasi selengkapnya, lihat Pemadatan data.
0x800000000 Atur opsi ini untuk menyimpan data FILESTREAM pada grup filenya sendiri di Pelanggan. Jika opsi ini tidak diatur, data FILESTREAM disimpan di grup file default. Replikasi tidak membuat grup file; oleh karena itu, jika Anda mengatur opsi ini, Anda harus membuat grup file sebelum menerapkan rekam jepret di Pelanggan. Untuk informasi selengkapnya tentang cara membuat objek sebelum Anda menerapkan rekam jepret, lihat Menjalankan Skrip Sebelum dan Sesudah Rekam Jepret Diterapkan.

Lihat opsi 0x100000000terkait .
0x1000000000 Mengonversi jenis yang ditentukan pengguna (UDT) common language runtime (CLR) menjadi varbinary(max) sehingga kolom jenis UDT dapat direplikasi ke Pelanggan yang menjalankan SQL Server 2005 (9.x).
0x2000000000 Mengonversi tipe data hierarkis ke varbinary(maks) sehingga kolom jenis hierarkiid dapat direplikasi ke Pelanggan yang menjalankan SQL Server 2005 (9.x). Untuk informasi selengkapnya tentang cara menggunakan kolom hierarkiid dalam tabel yang direplikasi, lihat referensi metode jenis data hierarki.
0x4000000000 Mereplikasi indeks yang difilter pada tabel. Untuk informasi selengkapnya tentang indeks yang difilter, lihat Membuat indeks yang difilter.
0x8000000000 Mengonversi jenis data geografi dan geometri menjadi varbinary(max) sehingga kolom jenis ini dapat direplikasi ke Pelanggan yang menjalankan SQL Server 2005 (9.x).
0x10000000000 Mereplikasi indeks pada kolom jenis geografi dan geometri.
NULL Sistem secara otomatis membuat opsi skema yang valid untuk artikel.
status active Skrip pemrosesan awal untuk menerbitkan tabel dijalankan.
unsynced Skrip pemrosesan awal untuk menerbitkan tabel dijalankan lain kali Agen Rekam Jepret berjalan.
stream_blob_columns true Pengoptimalan aliran data digunakan saat mereplikasi kolom objek besar biner. Namun, fungsionalitas replikasi penggabungan tertentu, seperti rekaman logis, masih dapat mencegah pengoptimalan aliran digunakan. stream_blob_columns diatur ke true ketika FILESTREAM diaktifkan. Ini memungkinkan replikasi data FILESTREAM untuk berkinerja optimal dan mengurangi pemanfaatan memori. Untuk memaksa artikel tabel FILESTREAM agar tidak menggunakan streaming blob, atur stream_blob_columns ke false.

Penting: Mengaktifkan pengoptimalan memori ini mungkin merusak performa Agen Penggabungan selama sinkronisasi. Opsi ini hanya boleh digunakan saat mereplikasi kolom yang berisi megabyte data.
false Pengoptimalan tidak digunakan saat mereplikasi kolom objek besar biner.
subscriber_upload_options 0 Tidak ada batasan pembaruan yang dilakukan pada Pelanggan dengan langganan klien; perubahan diunggah ke Publisher. Mengubah properti ini mungkin mengharuskan Pelanggan yang ada diinisialisasi ulang.
1 Perubahan diizinkan di Pelanggan dengan langganan klien, tetapi tidak diunggah ke Publisher.
2 Perubahan tidak diizinkan di Pelanggan dengan langganan klien.
subset_filterclause Klausa WHERE yang menentukan pemfilteran horizontal. Hanya berlaku untuk artikel tabel.

Penting: Untuk alasan performa, sebaiknya Anda tidak menerapkan fungsi ke nama kolom dalam klausa filter baris berparameter, seperti LEFT([MyColumn]) = SUSER_SNAME(). Jika Anda menggunakan HOST_NAME dalam klausa filter dan mengambil alih nilai HOST_NAME, Anda mungkin harus mengonversi jenis data dengan menggunakan CONVERT. Untuk informasi selengkapnya tentang praktik terbaik untuk kasus ini, lihat bagian "Mengganti nilai HOST_NAME() di Filter Berparameter - Filter Baris Berparameter.
threshold Nilai persentase yang digunakan untuk Pelanggan yang menjalankan SQL Server Compact atau versi SQL Server yang lebih lama. threshold mengontrol saat Agen Penggabungan menetapkan rentang identitas baru. Ketika persentase nilai yang ditentukan dalam ambang digunakan, Agen Penggabungan membuat rentang identitas baru. Digunakan saat identityrangemanagementoption diatur ke auto atau auto_identity_range diatur ke true. Hanya berlaku untuk artikel tabel. Untuk informasi selengkapnya, lihat bagian "Gabungkan Replikasi" di Kolom Identitas Replikasi.
verify_resolver_signature 1 Tanda tangan digital pada resolver kustom diverifikasi untuk menentukan apakah itu dari sumber tepercaya.
0 Tanda tangan digital pada pemecah masalah kustom tidak diverifikasi untuk menentukan apakah itu dari sumber tepercaya.
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 penggabungan 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 berarti bahwa perubahan pada artikel penggabungan dapat menyebabkan rekam jepret tidak valid, dan jika ada langganan yang memerlukan rekam jepret baru, memberikan izin agar rekam jepret yang ada ditandai sebagai usang dan rekam jepret baru yang 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 penggabungan 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 berarti bahwa perubahan pada artikel penggabungan menyebabkan langganan yang ada diinisialisasi ulang, dan memberikan izin untuk reinitialisasi langganan terjadi.

Lihat bagian Keterangan untuk properti yang, saat diubah, mengharuskan semua langganan yang ada diinisialisasi ulang.

Mengembalikan nilai kode

0 (berhasil) atau 1 (kegagalan).

Keterangan

sp_changemergearticle digunakan dalam replikasi penggabungan.

Karena sp_changemergearticle digunakan untuk mengubah properti artikel yang awalnya ditentukan dengan menggunakan sp_addmergearticle, lihat sp_addmergearticle untuk informasi selengkapnya tentang properti ini.

Mengubah properti berikut mengharuskan rekam jepret baru dibuat, dan Anda harus menentukan nilai 1 untuk parameter @force_invalidate_snapshot :

  • check_permissions
  • column_tracking
  • destination_owner
  • pre_creation_command
  • schema_options
  • subset_filterclause

Mengubah properti berikut mengharuskan langganan yang ada diinisialisasi ulang, dan Anda harus menentukan nilai 1 untuk parameter @force_reinit_subscription :

  • check_permissions
  • column_tracking
  • destination_owner
  • pre_creation_command
  • identityrangemanagementoption
  • subscriber_upload_options
  • subset_filterclause
  • creation_script
  • schema_option
  • logical_record_level_conflict_detection
  • logical_record_level_conflict_resolution

Saat Anda menentukan nilai 3 untuk partition_options, metadata dibersihkan setiap kali Agen Penggabungan berjalan dan rekam jepret yang dipartisi kedaluwarsa lebih cepat. Saat menggunakan opsi ini, Anda harus mempertimbangkan untuk mengaktifkan rekam jepret partisi yang diminta pelanggan. Untuk informasi selengkapnya, lihat Membuat Rekam Jepret untuk Publikasi Gabungan dengan Filter Berparameter.

Saat mengatur column_tracking properti, jika tabel sudah diterbitkan dalam publikasi gabungan lainnya, pelacakan kolom harus sama dengan nilai yang digunakan oleh artikel yang ada berdasarkan tabel ini. Parameter ini khusus untuk artikel tabel saja.

Jika beberapa publikasi menerbitkan artikel berdasarkan tabel yang mendasar yang sama, mengubah delete_tracking properti atau compensate_for_errors properti untuk satu artikel menyebabkan perubahan yang sama dilakukan pada artikel lain yang didasarkan pada tabel yang sama.

Jika akun masuk/pengguna Publisher yang digunakan oleh proses penggabungan tidak memiliki izin tabel yang benar, perubahan yang tidak valid dicatat sebagai konflik.

Ketika Anda mengubah nilai schema_option, sistem tidak melakukan pembaruan bitwise. Ini berarti bahwa ketika Anda mengatur schema_option menggunakan sp_changemergearticle, pengaturan bit yang ada mungkin dinonaktifkan. Untuk mempertahankan pengaturan yang ada, Anda harus melakukan & (Bitwise AND) antara nilai yang Anda tetapkan dan nilai schema_optionsaat ini , yang dapat ditentukan dengan menjalankan sp_helpmergearticle.

Perhatian

Ketika Anda banyak (mungkin ratusan) artikel dalam publikasi dan Anda menjalankan sp_changemergearticle untuk salah satu artikel, mungkin perlu waktu lama untuk menyelesaikan eksekusi.

Tabel opsi skema yang valid

Tabel berikut ini menjelaskan nilai yang diizinkan schema_option , bergantung pada jenis artikel.

Jenis artikel Nilai opsi skema
func schema only 0x01 dan 0x2000
indexed view schema only 0x01, , 0x0400x0100, 0x2000, 0x40000, , 0x1000000dan0x200000
proc schema only 0x01 dan 0x2000
table Semua opsi.
view schema only 0x01, , 0x0400x0100, 0x2000, 0x40000, , 0x1000000dan0x200000

Contoh

DECLARE @publication AS sysname;
DECLARE @article AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @article = N'SalesOrderHeader';

-- Enable column-level conflict tracking.
-- Changing this property requires that existing subscriptions
-- be reinitialized and that a new snapshot be generated.
USE [AdventureWorks2022]
EXEC sp_changemergearticle 
  @publication = @publication,
  @article = @article, 
  @property = N'column_tracking', 
  @value = N'true',
  @force_invalidate_snapshot = 1,
  @force_reinit_subscription = 1;
GO

Izin

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