Yayını veritabanları üzerinde şeması değişiklikler yapma

Çoğaltma destekleyen bir wide aralık şema değişikliklerinin yayımlanmış nesneler için.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 ETKİNLEŞMESİNİ AYARLAMAK tablo alter kullanılmamalıdır, şema değişikliği çoğaltma etkinse ve bir topoloji içerir, SQL Server 2005 veya SQL Server Compact 3.5 Subscribers.ALTER görünümü

  • YORDAMI DEĞİŞTİRME

  • İŞLEVİNİ DEĞİŞTİRME

  • TETİKLEYİCİ DEĞİŞTİRME

    Tetikleyici DEĞİŞTİRMEK, yalnızca kullanılabilir veri işleme dili [dml] veri Tanım Dili [ddl] Tetikleyiciler çoğaltılan çünkü tetikler.

Önemli notÖnemli

Tablo için şema değişikliklerini kullanarak sunulmalıdır Transact-SQL veya SQL Server Yönetim Nesneleri (smo).Ne zaman şema değişiklikleri yapıldı SQL Server Management Studio, Management Studio bağlanmayı denediğinde bırakın ve yeniden tablo.Yayımlanmış nesneler bırakamazsınız, bu nedenle şema değişikliği başarısız olur.

Dağıtım Aracısı veya Birleştirme Aracısı çalıştığında, işlem çoğaltma ve birleştirme çoğaltması için şema değişiklikleri kademeli 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çin şema değişiklikleri yayılır.anlık görüntü çoğaltması çoğaltması içinde çoğaltma, her saat senkronizasyon abone şemasını yeni bir kopyası gönderilir.Bu nedenle, tüm şema değişiklikleri önceden yayımlanmış nesneler (değil sadece yukarıda) ile her eşitleme otomatik olarak yayılır.

Ekleme ve makaleleri yayınları ' kaldırma hakkında daha fazla bilgi için bkz: Varolan yayınlar için makaleleri ve bırakma makaleleri ekleme.

Şema değişiklikleri çoğaltmak için

Yukarıdaki şema değişiklikleri varsayılan olarak yinelenir.Şema değişiklikleri çoğaltma devre dışı bırakma hakkında daha fazla bilgi için aşağıdaki konulara bakın:

Şema değişiklikleri için dikkat edilmesi gereken noktalar

Şema değişiklikleri çoğaltılıyor olduğunda, aşağıdaki konuları göz önünde bulundurun.

Genel konular

  • Şema değişiklikleri olan tarafından belirlenen sınırlamalara tabi Transact-SQL.Örneğin, alter table, alter birincil anahtar sütunları için izin vermez.

  • Veri türü eşlemesi yalnızca ilk anlık görüntü için gerçekleştirilir.Şema değişiklikleri önceki sürümleri veri türleri için eşleştirilir.Örneğin, deyim 'deALTER TABLE ADD datetime2 column kullanılan SQL Server 2008, veri türü için çevrilmiş değil nvarchar için SQL Server 2005 aboneleri.Bazı durumlarda, şema değişiklikleri yayımcı üzerinde bloke edilir.

  • yayın şema değişiklikleri yayılmasını sağlamak için ayarlanmışsa, şema değişiklikleri nasıl ilgili şema seçeneği küme olursa olsun yayılır bir makale yayında.Örneğin, değil bir tablo makale için yabancı anahtar kısıtlamalarını çoğaltmak, ancak daha sonra yabancı anahtar tablosu yayımcı adresindeki ekler bir alter table komutu vermek için seçerseniz, yabancı anahtar abone adresindeki tabloya eklenir.Bunu önlemek için alter table komutu veren önce şema değişiklikleri yayılmasını devre dışı bırakın.

  • Yalnızca aboneleri (dahil aboneleri yeniden yayınlama) adresindeki yayımcı adresindeki şema değişiklikleri yapılması gerekir.Birleştirme çoğaltma abone adresindeki şema değişiklikleri önler.İşlemsel kopyalama Değişliklerini engellemez, ancak değişiklikleri çoğaltma başarısız olmasına neden olabilir.

  • Republishing abone için yayılma değişiklikleri kendi aboneleri yayılma varsayılan olarak.

  • Şema nesneleri başvuruları veya yayımcı ancak abone varolan kısıtlamaları değiştirirseniz, şema değişikliği yayımcı üzerinde başarılı olur, ancak abone üzerinde başarısız olur.

  • Yabancı anahtar eklerken başvurulan tüm nesneler üzerinde abone yayımcı üzerinde karşılık gelen nesne olarak aynı adı ve sahibi olması gerekir.

  • Açıkça ekleme, bırakma veya dizinleri değiştirme desteklenmiyor.Kısıtlamaları (gibi birincil anahtar kısıtlaması) 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ı otomatik yönetimi hakkında daha fazla bilgi için bkz: Kimlik sütunları çoğaltılıyor.

  • (Yakınsaması adlandırılır) adresindeki Yayımcı ve abone olan verilerin farklı sağladığından FUNCTION işlevleri içeren şema değişiklikleri desteklenmez.Örneğin, Yayımcı adresindeki aşağıdaki komutu çalıştırın: ALTER TABLE SalesOrderDetail ADD OrderDate DATETIME DEFAULT GETDATE(), komut için abone çoğaltılan ve yürütülen farklı değerlerdir.FUNCTION işlevleri hakkında daha fazla bilgi için bkz: Deterministic ve FUNCTION işlevleri.

  • Kısıtlamaları açıkça adlandırılmış olması önerilir.Bir kısıtlama açıkça adlı, SQL Server bir ad kısıtlaması için oluşturur ve bu adları Yayımcı ve her abone. üzerinde farklıBu şema değişiklikleri çoğaltma sırasında sorunlara neden olabilir.Örneğin, Yayımcı tarafında bir sütun bırakın ve bağımlı bir kısıtlaması bırakılan, çoğaltma Abone tarafında kısıtlaması bırakma girişiminde bulunur.Abone adresindeki açılan kısıtlamanın adını farklı olduğu için başarısız olur.Bir kısıtlama adlandırma sorunu nedeniyle eşitleme başarısız olursa, el ile Abone tarafında kısıtlaması bırakma ve Merge Agent yeniden çalıştırın.

  • Çoğaltma için bir tablo yayımladıysanız, bunu değiştirmek mümkün değildir bir sütun bu tablodaki yayın anlık görüntü zaten değiştirmek için oluşturulduysa xml veri türü için sütun, ilk çoğaltma kaldırmanız gerekir.Daha fazla bilgi için bkz: Çoğaltma kaldırma.

Sütun ekleme

  • Tabloya yeni bir sütun eklemek ve varolan bir de o sütun eklemek için yayın, alter table yürütmek <Tablo> Ekle <sütun>.Varsayılan olarak, sütun, daha sonra tüm aboneleri ç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 bkz: "Merge Replication" Bu bölümde.

  • Tabloya yeni bir sütun eklemek ve o sütundaki varolan bir de dahil yayın, şema değişiklikleri çoğaltma devre dışı bırakın ve sonra alter table yürütmek <Tablo> Ekle <sütun>.

  • Varolan bir yayına varolan bir sütun 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ımla ve sütun filtresi (çoğaltma Transact-SQL programlama) değiştirme ve Nasıl yapılır: Tanımla ve sütun filtresi (SQL Server Management Studio'yu) değiştirme.Bu abonelikleri yeniden gerektirir.

  • Sütun için abone çoğaltıldığında yakınsaması içinde neden olabileceği için yayımlanmış bir tablo için kimlik sütunu ekleme, desteklenmiyor.Değerler kimlik sütunu içinde etkilenen tablo için satır fiziksel olarak saklanır siparişte Yayımcı tarafında bağlıdır.Satır Abone tarafında farklı şekilde depolanmış olabilir; Bu nedenle değeri kimlik sütunu aynı satırlar için farklı olabilir.

Sütun bırakma

  • Varolan bir gelen bir sütun silmek için yayın ve Yayımcı tablodan sütun bırakın, alter table yürütmek <Tablo> bırak <sütun>.Varsayılan olarak, sütun sonra gelen düşer tablo tüm aboneleri adresindeki.

  • Varolan bir yayına bir sütun bırakın, ancak sütun korumak için tablo Yayımcı tarafında kullanmak 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ımla ve sütun filtresi (çoğaltma Transact-SQL programlama) değiştirme ve Nasıl yapılır: Tanımla ve sütun filtresi (SQL Server Management Studio'yu) değiştirme.Bu oluşturulacak yeni bir anlık görüntü gerektirecek.

  • Sütun kesilmesini herhangi filtre yan tümceleri kullanılamaz makale veritabanındaki herhangi bir yayın.

  • Bir sütun yayımlanmış bir bırakarak, makale, herhangi bir kısıtlama, dizinler veya veritabanı etkileyen sütunun özelliklerini dikkate alın.Örneğin:

    • Sütunları birincil anahtar işlem yayınlarda makalelerinden kullanılan çoğaltma tarafından kullanıldığından bırakamazsınız.

    • Bırakamazsınız, rowguid sütun gelen birleştirme yayımları makalelerinde veya mstran_repl_version sütun bunlar çoğaltma. tarafından kullanıldığından güncelleştirme abonelikleri destekleyen işlem yayınlarda makalelerinden

    • Dizin değişiklikler abonelere dağıtılır: Yayımcı tarafında bir sütun bırakın ve bağımlı bir dizin bırakılan, dizin bırakma çoğaltılmaz.Sütun bırakma için abone yayımcıdan çoğaltıldığında başarılı olduğunu Yayımcı adresindeki sütun bırakılmadan önce Abone tarafında dizin bırakma.Nedeniyle abone adresindeki bir dizin eşitleme başarısız olursa, dizini el ile bırakın ve Merge Agent yeniden çalıştırın.

    • Kısıtlamalar için bırakma izin vermek için açıkça adlı olmalıdır.Daha fazla bilgi için bkz: "Genel değerlendirmeleri" daha önce bu bölümde.

İşlemsel kopyalama

  • Şema değişiklikleri için önceki sürümlerini çalıştıran aboneleri yayılma SQL Server, ddl deyim yalnızca abone. sürüm tarafından desteklenen sözdizimi içermesi gerekir, ancak

    Abone verileri yeniden yayımlar, yalnızca desteklenen şema değişiklikleri ekleyerek bırakarak ve bir sütun.Bu değişiklikleri yayımcı üzerinde yapılması gereken kullanarak sp_repladdcolumn (Transact-sql) ve sp_repldropcolumn yordamları (Transact-sql) yerine tablo ddl değiştirme sözdizimi.

  • Şema değişiklikleri olmayan - sql aboneleri çoğaltılır.

  • Şema değişiklikleri değil yayılma alanından olmayan-SQL Server Publishers.

  • Tablo olarak çoğaltılan dizin oluşturulmuş görünümler verilmemelidir.Dizin oluşturulmuş görünümler değiştirilebilir, ancak bunları değiştirme bunları normal görünüm yerine, dizin oluşturulmuş görünümler hale gelmesine neden olacak şekilde çoğaltılmış görünümler dizine.

  • yayın abonelikleri güncelleştirme sıraya veya anında güncelleme destekler, sistem şema değişiklikleri yapmadan önce sessiz modda olmalıdır: yayımlanan tüm faaliyete tablo Yayımcı ve aboneleri ve bekleyen tüm düğümlere değişikliklerin yayılma veri durdurulması gerekir.Şema değişiklikleri tüm düğümlere dağıtıldıktan sonra yayımlanmış tabloları üzerinde etkinlik devam edebilirsiniz.

  • Önceki sürümleri SQL Server eşler arası topoloji yapmadan önce sessiz modda olması için gerekli yayınlarda. şema değişiklikleri sql Server 2008 ile başlayarak, bu quiesce yayın için hiçbir uzun gerekli dışında başka bir yerde bu bölümde açıklandığı gibi olur.

  • Bir tablo için bir zaman damgası sütun ekleyerek ve zaman damgası binary(8) nedenleri için eşleme makale için tüm etkin abonelikleri yeniden için.

Çoğaltma Birleştir

  • Nasıl birleştirme çoğaltma tanıtıcıları şema değişiklikleri yayın uyumluluk düzey tarafından belirlenir ve doğal mod (varsayılan) veya karakter modu anlık görüntü küme olup olmadığı:

    • Şema değişiklikleri çoğaltmak için yayın uyumluluk düzey en az olmalıdır 90RTM.Önceki sürümlerini çalıştıran aboneleri, SQL Server veya Uyumluluk düzey kullanabileceğiniz 90RTM azdır sp_repladdcolumn (Transact-sql) ve sp_repldropcolumn yordamları (Transact-sql) add ve drop sütun.Ancak, bu yordamları kaldırılmıştır.

    • Varolan bir makale içinde sunulan bir veri türüne sahip bir sütun eklemek çalışırsanız, SQL Server 2008, SQL Server aşağıdaki davranış vardır:

      100RTM, yerel anlık görüntü

      100RTM, karakter anlık görüntü görüntü

      Tüm diğer uyumluluk düzeyleri

      hierarchyid

      Değişiklik izin

      Blok değiştirme

      Blok değiştirme

      geography ve geometry

      Değişiklik izin

      Değiştirilmesine izin1

      Blok değiştirme

      filestream

      Değişiklik izin

      Blok değiştirme

      Blok değiştirme

      date, time, datetime2, and datetimeoffset

      Değişiklik izin

      Değiştirilmesine izin1

      Blok değiştirme

      1 Bu veri türlerini abone adresindeki sql Server Compact aboneleri dönüştürün.

    yayın Uyumluluk hakkında daha fazla bilgi için "Uyumluluk düzeyi için birleştirme yayınları" konusuna bakın. Bölüm'de sql Server birden çok sürümünü kullanarak bir çoğaltma topolojisi içinde.

  • (Bir tablo Abone tarafında yok başvuran yabancı anahtar eklemesini kaynaklanan bir hata) bir şema değişikliği uygulanırken bir hata ortaya çıkarsa, eşitleme başarısız olur ve abonelik yeniden gerekir.

  • Bir sütun üzerinde bir şema değişikliği yapılırsa, katılan bir birleştirmek filtresi veya parametreli filtre tüm abonelikleri yeniden başlatmak ve anlık görüntü görüntü yeniden oluşturmanız gerekir.

  • Birleştirme çoğaltma sorun giderme sırasında şema değişiklikleri atlamak için saklı yordamlar sağlar.Daha fazla bilgi için bkz: sp_markpendingschemachange (Transact-sql) ve sp_enumeratependingschemachanges (Transact-sql).

Değişiklik Geçmişi

Güncelleştirilmiş içerik

İşlemsel kopyalama için dikkat etmeniz gereken eklenen; eşler arası topoloji her şema değişikliği için sessiz modda olması gerekmez.