Üzerinde yayın Databases şema değişiklikleri yapma
Çoğaltma, şema değişiklikleri, yayımlanmış nesneler için çeşitli destekler.When you make any of the following schema changes on the appropriate published object at a Microsoft SQL Server Publisher, that change is propagated by default to all SQL Server Subscribers:
TABLO DEĞİŞTİRME
kilit yükseltme küme tablo ALTER kullanılmamalıdır, şema değişikliği çoğaltma etkinleştirilirse ve etkileşimli bir topoloji içerir. SQL Server 2005 veya SQL Server Compact 3.5 VIEW Subscribers.ALTER
YORDAMI DEĞİŞTİRME
İŞLEVİNİ DEĞİŞTİRME
TETİKLEYİCİ DEĞİŞTİRME
veri tanımlama dili [DDL] Tetikleyicileri yinelenemez için ALTER TRIGGER yalnızca veri düzenleme Dil [DML] Tetikleyicileri kullanılabilir.
Important Note: |
---|
Tablolar için şema değişikliklerini kullanılarak yapılmalıdır. Transact-SQL veya SQL Server Yönetim Nesneleri (SMO). Şema değişiklikleri, ne zaman yapılır SQL Server Management Studio, Management Studio bırakma ve tabloyu yeniden dener. Yayımlanmış nesneler bırakamazsınız, bu nedenle, şema değişikliği başarısız. |
Dağıtım aracısını veya Birleştirme Aracısı çalıştığında işlem çoğaltma ve birleştirme çoğaltma, şema değişiklikleri artımlı olarak yayılır.Yeni anlık görüntü çoğaltması çoğaltması çoğaltması Abone tarafında uygulandığında, anlık görüntü çoğaltması çoğaltması çoğaltma işlemi için şema değişiklikleri yayılır.anlık görüntü çoğaltması çoğaltması Çoğaltmada şemasını yeni bir kopyasını her saat eşitleme abone için gönderilir.Bu nedenle, tüm şema değişiklikleri daha önce yayımlanmış nesneler (yalnızca yukarıda listelenenler) ile her eşitleme otomatik olarak yayılır.
Ekleme ve makaleleri yayınları ' kaldırma hakkında daha fazla bilgi için bkz: Makaleleri için ve bırakma makaleleri varolan yayınlar ekleme.
Şema değişiklikleri çoğaltmak için
Yukarıdaki şema değişiklikleri, varsayılan olarak çoğaltılır.Şema değişiklikleri, çoğaltma devre dışı bırakma hakkında daha fazla bilgi için aşağıdaki konulara bakın:
SQL Server Management Studio: Nasıl Yapılır: (SQL Server Management Studio'yu) şema değişiklikleri çoğaltma
Çoğaltma Transact-SQL programlama: Nasıl Yapılır: Şema değişiklikleri (çoğaltma Transact-SQL programlama) çoğaltma
Şema değişiklikleri ile ilgili konuları
Şema değişiklikleri çoğaltma yapılırken, aşağıdaki konuları göz önünde bulundurun.
Genel konuları
Şema değişiklikleri tarafından belirlenen sınırlamalara tabidir Transact-SQL. Örneğin, ALTER tablo, ALTER birincil anahtar sütunlarını izin vermiyor.
Veri türü eşleştirme, yalnızca ilk anlık görüntü için gerçekleştirilir.Şema değişiklikleri, veri türleri önceki sürümlerini eşlenmez.Örneğin, deyim ALTER TABLE ADD datetime2 column kullanılır SQL Server 2008, veri türü için çevrilmiş nvarchar için SQL Server 2005 Abonelerin. Bazı durumlarda, şema değişiklikleri yayımcı engellendi.
yayın şema değişikliklerini yayılmasını izin verecek şekilde ayarlanmışsa, şema değişiklikleri, ilgili şema seçeneği yayındaki bir makale için ayarlanma şekli bağımsız olarak yayılır.Olmayan bir tablo makaleye yabancı anahtar kısıtlamalarını çoğaltmak, ancak sonra yabancı anahtar yayımcı tabloya ekler bir ALTER TABLE komut vermek için seçin, örneğin, yabancı anahtar abone tabloya eklenir.Bunu önlemek için , ALTER tablo komutunu yayınlamadan önce şema değişikliklerini yayılmasını devre dışı bırakın.
Şema değişiklikleri, yalnızca yayımcıya, (aboneleri yeniden yayımlama da dahil) aboneleri en altında yapılmalıdır.Birleştirme çoğaltma abone adresindeki şema değişikliklerini engeller.Işlem çoğaltma değişiklikleri engellemez, ancak değişiklikleri çoğaltma başarısız olmasına neden olabilir.
Varsayılan olarak, abonelerine bulaşan republishing bir abonelik için bulaşan değişiklikler var.
Şemada başvuru nesneleri veya abone değil ancak yayımcıya varolan kısıtlamaları değiştirirseniz, şema değişikliği yayımcı başarılı olur, ancak abone üzerinde başarısız olur.
Abone yabancı anahtar eklerken başvurulan tüm nesnelerde, ilgili nesnenin yayımcı olarak aynı ad ve sahibi olmalıdır.
Açıkça eklemek, silmek veya dizinleri değiştirme desteklenmiyor.(Örneğin, birincil anahtar kısıtlaması) kısıtlamaları için örtülü olarak oluşturulmuş dizinleri desteklenir.
Değiştirme veya çoğaltma tarafından yönetilen kimlik sütunlarının bırakarak desteklenmiyor.Kimlik sütunlarının otomatik yönetimi hakkında daha fazla bilgi için bkz: Kimlik sütunları çoğaltılıyor.
(Yakınsama anılacaktır) sırasında yayımcı ve abone olan verilerde farklı sağladığından nondeterministic işlevleri içeren bir şema değişikliklerini desteklemiyor.Örneğin yayımcı konumunda aşağıdaki komutu yayınlayın: ALTER TABLE SalesOrderDetail ADD OrderDate DATETIME DEFAULT GETDATE(), komut için abone yinelenmiş ve yürütülen değerleri farklıdır.Nondeterministic işlevleri hakkında daha fazla bilgi için bkz: Deterministic ve Nondeterministic işlevler.
Kısıtlamalar açıkça adlandırılmış olması önerilir.Bir kısıtlama açıkça, adlı değil SQL Server bir ad, kısıtlamanın oluşturur ve bu adları, yayımcı ve her abone farklı olacaktır. Bu, şema değişiklikleri çoğaltma işlemi sırasında sorunlara neden olabilir.Örneğin, Yayımcı tarafında sütun bırakın ve bağımlı bir kısıtlama kesildiğinde, çoğaltma kısıtlamayı, Abone tarafında bırak dener.Kısıtlamanın adını farklı olduğundan abone konumunda bırakma başarısız olur.Bir kısıtlama adlandırma sorunu nedeniyle eşitleme başarısız olursa, el ile sınırlamayı, Abone tarafında bırakın ve sonra birleştirme aracı yeniden çalıştırın.
Çoğaltma için tablo yayımladıysanız, yayın anlık görüntü görüntü zaten sütunu değiştirmek için oluşturulduysa, XML veri türü için bu tablodaki bir sütun değiştirmek mümkün değildir, çoğaltma kaldırmalısınız.Daha fazla bilgi için bkz: Çoğaltma kaldırılıyor.
Sütun ekleme
Bir varolan sütun bir tabloya yeni sütun Ekle ve yayın, ALTER TABLE'ı yürütmek <Tablo> EKLEME <Sütun>. Varsayılan olarak, sütun, daha sonra tüm abonelerine çoğaltılır.sütun null değerlere izin vermek veya varsayılan kısıtlama eklemek gerekir.Sütun ekleme hakkında daha fazla bilgi için bu konudaki "Birleştirme çoğaltma" bölümüne bakın.
Bir tabloya yeni sütun Ekle ve o sütundaki varolan bir de dahil yayın çoğaltma şema değişikliklerini devre dışı bırakmak ve ALTER TABLE'ı yürütmek <Tablo> EKLEME <Sütun>.
Varolan sütun varolan bir yayına eklemek için kullanın. sp_articlecolumn (Transact-SQL), sp_mergearticlecolumn (Transact-SQL), veya yayın özellikleri- <yayın> iletişim kutusu.
Daha fazla bilgi için bkz: Nasıl Yapılır: Tanımlamak ve (çoğaltma Transact-SQL programı) bir sütun Süzgeci Değiştir ve Nasıl Yapılır: Tanımlamak ve bir sütun süzgecini (SQL Server Management Studio'yu) Değiştir. Bunun yeniden için bir abonelik gerektirir.
Kimlik sütun için yayımlanmış ekleme tablo sütun için abone çoğaltıldığında, yakınsama sağladığından, desteklenmiyor.Kimliği değerleri sütun Yayımcı tarafında etkilenen bir tablo için satır fiziksel olarak depolanır siparişteki bağlıdır.Satırları farklı Abone tarafında depolanmış olabilir; bu nedenle, kimlik sütun değeri aynı satırlar için farklı olabilir.
Sütunları siliniyor
Varolan bir yayına sütun bırakın ve yayımcı adresindeki tablodan sütun bırakın için ALTER TABLE yürütün. <Tablo> BIRAKMA <Sütun>. Varsayılan olarak, sütun sonra gelen kesildiğinde tablo tüm abonelere adresindeki.
Varolan bir yayına sütun bırakın, ancak sütunda tutmak için tablo Yayımcı tarafında kullanın. sp_articlecolumn (Transact-SQL), sp_mergearticlecolumn (Transact-SQL), veya yayın özellikleri- <yayın> iletişim kutusu.
Daha fazla bilgi için bkz: Nasıl Yapılır: Tanımlamak ve (çoğaltma Transact-SQL programı) bir sütun Süzgeci Değiştir ve Nasıl Yapılır: Tanımlamak ve bir sütun süzgecini (SQL Server Management Studio'yu) Değiştir. Bu işlem, oluşturulacak yeni bir anlık görüntü gerektirecektir.
Kesilmesine sütun, filtre yan tümceleri kullanılan makale veritabanındaki herhangi bir yayın.
Yayımlanmış bir makaleye sütun bırakarak, herhangi bir kısıtlamalar, dizinler veya veritabanı etkileyebilecek bir sütunun özelliklerini dikkate.Örneğin:
Çoğaltma tarafından kullanıldığından işlem yayınlarda makalelerinden birincil anahtar olarak kullanılan sütunlar bırakamazsınız.
Çoğaltma tarafından kullanıldığından makalelerinden birleştirme yayımları veya güncelleştirme abonelikler, destekleyen bir işlem yayınlardaki makalelerinden mstran_repl_version sütun rowguid sütun bırakamazsınız.
Dizin değişikliklerini abonelerine yayılır: Yayımcı tarafında sütun bırakın ve bağımlı bir dizin de çıkarılır, dizin açılan çoğaltılmaz. Böylece için abone yayımcıdan çoğaltıldığında, sütunun açılan başarılı, dizin Abone tarafında yayımcı, en sütun silmeden önce bırakma.Bir dizinde abone nedeniyle eşitleme başarısız olursa, dizini el ile olarak bırakın ve sonra birleştirme aracı yeniden çalıştırın.
Sınırlamaları, bırakma için izin vermek için açıkça adlı olmalıdır.Daha fazla bilgi için bu konu "Genel ana hatlarını" bölümüne bakın.
Işlem çoğaltma
Şema değişiklikleri, önceki sürümlerini çalıştıran abonelerine yayılır SQL Server, ancak DDL deyimini, yalnızca abone adresindeki sürüm sözdizimi içermesi gerekir.
Abone verileri yeniden yayımlar, yalnızca desteklenen şema değişiklikleri ekleme ve sütun siliniyor.Yayımcı bu değişiklikleri yapan kullanma sp_repladdcolumn (Transact-SQL) ve sp_repldropcolumn (Transact-SQL) ALTER tablo DDL sözdizimi yerine.
Şema değişiklikleri için olmayan yayılır-SQL Server Abonelerin.
Şema değişiklikleri olmayan gelen yayılır-SQL Server Yayımcılar.
Tablo olarak çoğaltılır, dizin oluşturulmuş görünümler değişiklik yapamazsınız.Dizin oluşturulmuş görünümler, dizin oluşturulmuş görünümler değiştirilebilir, ancak bunları değiştirme bunları, dizin oluşturulmuş görünümler yerine normal görünüm olmasına neden olacak şekilde çoğaltılan'nı tıklatın.
yayın hemen güncelleştirme olanağı veya abonelikler güncelleştirme sıraya, sistem quiesced şema değişiklikleri yapmadan önce olması gerekir: yayımlanmış tablosundaki tüm etkinliklerin, yayımcı ve aboneleri durdurulmalı ve veri değişiklikleri tüm düğümlere dağıtılmasını gerekir. Sonra şema değişiklikleri tüm düğümlere bulaşan, aktiviteyi yayımlanmış tabloları üzerinde devam edebilirsiniz.
yayın bir eşler arası topolojide, sistem quiesced şema değişiklikleri yapmadan önce olması gerekir.Daha fazla bilgi için bkz: Nasıl Yapılır: Quiesce bir çoğaltma topolojisi (çoğaltma Transact-SQL programlama).
Bir tablo ve eşleme için bir zaman damgası sütun eklemek için tüm etkin abonelikler yeniden bu makale binary(8) için zaman damgası neden olur.
birleştirme çoğaltma
Birleştirme çoğaltması, şema değişiklikleri nasıl işleyeceğini yayın uyumluluk tarafından küme düzey, ve rapor anlık görüntü görüntü görüntüsünü doğal mod (varsayılan) veya karakter modu ayarlayın:
Şema değişiklikleri çoğaltmak için , yayın uyumluluk düzeyini en az olmalı 90RTM.Aboneleri önceki sürümlerini çalıştırıyorsanız SQL Server ya da uyumluluk düzey kullanabileceğiniz 90RTM küçüktür sp_repladdcolumn (Transact-SQL) ve sp_repldropcolumn (Transact-SQL) için ekleyebilir ve sütun bırakın. Ancak, bu yordamları itiraz.
Varolan bir makale, içinde kullanılmaya başlanan bir veri türüne sahip bir sütun eklemeyi denerseniz SQL Server 2008, SQL Server Aşağıdaki davranış oluşur:
100RTM, yerel bir anlık görüntü
100RTM, karakter anlık görüntü
Tüm diğer uyumluluk düzeyleri
hierarchyid
Değişiklik izin ver
blok değiştirme
blok değiştirme
geography ve geometry
Değişiklik izin ver
Değişiklik izin ver1
blok değiştirme
filestream
Değişiklik izin ver
blok değiştirme
blok değiştirme
date, time, datetime2, ve datetimeoffset
Değişiklik izin ver
Değişiklik izin ver1
blok değiştirme
1 SQL Server Compact aboneleri, bu veri türlerini abone dönüştürün.
yayın uyumluluğu hakkında daha fazla bilgi için "Uyumluluk düzey için birleştirme yayınları" bölümüne bakın... Bir çoğaltma topolojisi SQL Server birden çok sürümünü kullanma.
Bir şema değişikliği (örneğin, bir tablo Abone tarafında kullanılamıyor başvuran yabancı anahtar eklemesini kaynaklanan hata) uygulanırken bir hata ortaya çıkarsa, eşitleme başarısız olur ve aboneliğin yeniden gerekir.
Bir şema değişikliği bir sütunda yer alan bir birleştirmek süzgeç veya parametreli hale getirilmiş bir süzgeç yapılırsa, tüm abonelikleri yeniden başlatmak ve rapor anlık görüntü görüntü görüntüsünü yeniden oluşturmanız gerekir.
Birleştirme çoğaltma, şema değişiklikleri, sorun giderme sırasında atlamak için saklı yordamlar sağlar.Daha fazla bilgi için bkz: sp_markpendingschemachange (Transact-SQL) ve sp_enumeratependingschemachanges (Transact-SQL).