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

Çoğaltma, şema değişiklikleri yayımlanmış nesneler için geniş bir yelpazesini destekler. Aşağıdaki şema değişiklikleri uygun yaptığınızda yayımlanmış nesnede bir Microsoft  SQL ServerYayınevi, değişikliği tüm varsayılan yayılır SQL Serveraboneleri:

  • ALTER TABLE

  • Şema değişikliği çoğaltma etkinse ve bir topoloji içeriyorsa alter table set kilit ETKİNLEŞMESİNİ kullanılmamalıdır SQL Server 2005ya SQL Server Compact 3.5Subscribers.ALTER görünümü

  • ALTER YORDAM

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

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

    Veri tanımlama dili [ddl] Tetikleyiciler yinelenemez çünkü alter TETIKLEYICI yalnızca veri düzenleme dili [dml] Tetikleyiciler için kullanılabilir.

Önemli notÖnemli

Şema değişiklikleri tabloları kullanarak yapılmalıdır Transact-SQLya SQL ServerManagement Objects (smo). Ne zaman şema değişiklikleri yapılmış SQL Server Management Studio, Management Studioaçılır ve tabloyu yeniden dener. Yayımlanmış nesneler bırakamazsınız, bu nedenle şema değişikliği başarısız olur.

Dağıtım aracısını 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 bir anlık görüntü abone adresindeki uygulandığında, anlık görüntü çoğaltma için şema değişiklikleri yayılır. Anlık görüntü çoğaltma, saat eşitleme gerçekleşir abone her şema yeni bir kopyası gönderilir. Bu nedenle, tüm şema değişiklikleri önceden yayımlanmış nesneler (sadece Yukarıda listelenenler) ile her eşitleme otomatik olarak yayılır.

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

Ş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 bkz: Şema değişiklikleri çoğaltmak.

Şema değişiklikleri hakkında önemli noktalar

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

Genel hususlar

  • Şema değişiklikleri olan getirdiği herhangi bir kısıtlamaya Transact-SQL. Örneğin, alter table alter birincil anahtar sütunları için izin vermez.

  • Veri türü eşleştirme 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şlenmez. Örneğin, eğer deyimi ALTER TABLE ADD datetime2 columnkullanılan SQL Server 2012, veri türü için tercüme değil nvarchariçin SQL Server 2005aboneleri. Bazı durumlarda, şema değişiklikleri yayımcı üzerinde engellenir.

  • Yayını şema değişiklikleri yayılmasını sağlamak için ayarlanırsa, şema değişiklikleri nasıl ilgili şema seçenek yayını bir makale için ayarlanır bakılmaksızın yayılır. Örneğin, tablo makale için yabancı anahtar kısıtlamalarını çoğaltır, ama sonra sorun yabancı anahtar tablosu yayımcı adresindeki ekler bir alter table komutu seçerseniz, abone tablosu yabancı anahtar eklenir. Bunu önlemek için şema değişiklikleri yayma alter table komutu veren önce devre dışı bırakın.

  • Şema değişiklikleri, yalnızca değil (aboneleri yeniden yayınlama dahil) aboneleri yayımcı adresindeki yapılmalıdır. Birleştirme çoğaltma abone adresindeki şema değişiklikleri önler. Işlem çoğaltma değişiklikleri engellemez, ancak değişiklikleri çoğaltma başarısız olmasına neden olabilir.

  • Republishing Abone yayılma değişiklikleri kendi abonelerine yayılma varsayılan olarak.

  • Şema başvuru nesneleri 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 olmalıdır.

  • Açıkça ekleme, bırakma 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ı otomatik yönetimi hakkında daha fazla bilgi için bkz: Kimlik sütunları çoğaltma.

  • (Yakınsaması adlandırılır) de Publisher ve abone veri farklı sağladığından nondeterministic işlevleri içeren şema değişiklikleri desteklenmez. Örneğin, Publisher aşağıdaki komutu çalıştırın: ALTER TABLE SalesOrderDetail ADD OrderDate DATETIME DEFAULT GETDATE(), komut için abone çoğaltılan ve idam değerleri farklı. Nondeterministic işlevler hakkında daha fazla bilgi için bkz: Deterministik ve Nondeterministic işlevler.

  • Bu kısıtlamaları açıkça adlandırılmış önerilir. Kısıtlama açıkça değil ise, SQL Serverbir ad kısıtlaması oluşturur ve bu adlar yayımcı ve her abone üzerinde farklı olacak. Bu şema değişiklikleri çoğaltma sırasında sorunlara neden olabilir. Örneğin, yayımcı adresindeki sütun bırakın ve bağımlı bir kısıtlama düştü, çoğaltma abone adresindeki kısıtlamayı bırak dener. Kısıtlamanın adı farklı olduğundan abone açılan başarısız olur. Bir kısıtlama adlandırma sorunu nedeniyle eşitleme başarısız olursa, el ile abone adresindeki kısıtlamayı bırak ve Birleştirme Aracısı'nı yeniden çalıştırın.

  • Tablo çoğaltma için yayımlanan, bu yayın anlık görüntü zaten sütunu değiştirmek için oluşturulduysa o tablo XML veri türü sütununda değiştirmek mümkün değildir, önce çoğaltmayı kaldırmanız gerekir.

  • READ UNCOMMITTED desteklenen yalıtım düzeyi ddl yayımlanmış bir tabloda yaparken değil.

Sütun ekleme

  • Tabloya yeni bir sütun eklemek ve o sütundaki varolan bir yayına eklemek için alter table idam <masa> add <sütun>. Varsayılan olarak, sütun daha sonra tüm aboneleri çoğaltılır. Sütun null değerlere izin vermek veya default kısıtlaması eklemek gerekir. Sütun ekleme hakkında daha fazla bilgi için bkz: "birleştirme çoğaltma" Bu konu bölümünde.

  • Tabloya yeni bir sütun eklemek ve o sütundaki varolan bir yayına olmadığı için şema değişiklikleri çoğaltma devre dışı bırakır ve alter table yürütün <masa> add <sütun>.

  • Varolan bir yayına varolan bir sütun eklemek için sp_articlecolumn (Transact-sql), sp_mergearticlecolumn (Transact-sql), ya da Yayını özellikleri - <yayın > iletişim kutusu.

    Daha fazla bilgi için, bkz. Tanımla ve sütun filtresi değiştirme. Bu işlem gerektirir abonelikleri yeniden.

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

Sütun siliniyor

  • Varolan yayından bir sütun bırakın ve yayımcı tabloda sütun bırakın, alter table yürütün <masa> bırak <sütun>. Varsayılan olarak, sütun sonra tüm aboneleri tablosundan bırakılır.

  • Varolan bir yayına bir sütun bırakın, ancak yayımcı adresindeki tablosundaki sütun korumak için sp_articlecolumn (Transact-sql), sp_mergearticlecolumn (Transact-sql), ya da Yayını özellikleri - <yayın > iletişim kutusu.

    Daha fazla bilgi için, bkz. Tanımla ve sütun filtresi değiştirme. Bu oluşturulacak yeni bir anlık görüntü gerektirecek.

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

  • Yayımlanmış bir makaleye sütun bırakarak hiçbir kısıtlamaları, dizinleri veya veritabanı etkileyebilecek sütunun özelliklerini dikkate alırlar. Örneğin:

    • Çoğaltma tarafından kullanıldığından işlem yayınlarda makaleler bir birincil anahtar kullanılan sütunları bırakamazsınız.

    • Başvurursanız bırakamazsınız rowguidbirleştirme yayımları makalelerinde sütundan veya mstran_repl_versionçoğaltma tarafından kullanıldığından güncelleştirme abonelikleri destekleyen işlem yayımları makalelerinde sütundan.

    • Dizin değişikliklerini değil abonelerine yayılma: Yayımcı tarafında bir sütun bırakın ve bağımlı bir dizin bırakılan, dizin bırakma değil çoğaltılır. Böylece abone için yayımcı çoğaltıldığında sütun açılan başarılı yayımcı adresindeki sütun bırakarak önce Abone tarafında dizin bırakmak. Dizin abone nedeniyle eşitleme başarısız olursa, el ile dizin bırakın ve Birleştirme Aracısı'nı yeniden çalıştırın.

    • Bırakma için izin kısıtlamaları açıkça adlı olmalıdır. Daha fazla bilgi için bkz: "genel değerlendirmesi" bölümünde bu konuda.

Işlem çoğaltma

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

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

  • Şema değişiklikleri olmayan - SQL Server abonelerine çoğaltılır.

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

  • Dizin oluşturulmuş görünümler tabloları olarak çoğaltılan değişiklik yapamazsınız. Dizinlenmiş görünümler çoğaltılan dizin oluşturulmuş görünümler değiştirilebilir, ancak bunları değiştirerek bunları düzenli Gösterim yerine, dizin oluşturulmuş görünümler olmak neden olur.

  • Yayını hemen güncelleştirme destekler veya abonelikleri güncelleştirme sıraya, sistem sessiz moda şema değişiklikleri yapmadan önce olmalıdır: Publisher ve aboneleri yayımlanmış tablosundaki tüm aktivite durdurulmalı ve veri değişiklikleri tüm düğümlere dağıtılmasını gerekir. Şema değişiklikleri tüm düğümlere yayılır sonra etkinlik yayımlanmış tabloları üzerinde devam edebilirsiniz.

  • Yayını bir eşler arası topoloji ise, sistem şema değişiklikleri yapmadan önce sessiz moda alınması gerekir. Daha fazla bilgi için, bkz. Quiesce çoğaltma topolojisini (çoğaltma Transact-sql programlama).

  • Zaman damgası sütun bir tablo ve eşleme eklemek için tüm etkin abonelikleri yeniden makaleyi binary(8) için zaman damgası neden olur.

Çoğaltma Birleştir

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

    • Şema değişiklikleri çoğaltmak için yayını uyumluluk düzeyini en az olmalıdır 90RTM. Aboneleri önceki sürümlerini çalıştırıyorsanız, SQL Serverveya uyumluluk düzeyini kullanabilirsiniz 90RTM azdır sp_repladdcolumn (Transact-sql)ve sp_repldropcolumn (Transact-sql)ekleyin ve sütunlar bırak. Ancak, bu yordamları onaylanmaz.

    • Yılında tanıtılan veri türüne sahip bir sütun için varolan bir makale eklemeye çalışırsanız SQL Server 2008, SQL Serveraşağıdaki davranış vardır:

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

      100RTM, karakter anlık

      Tüm diğer Uyumluluk düzeyleri

      hierarchyid

      İzin

      Blok değiştirme

      Blok değiştirme

      geography ve geometry

      İzin

      İzin1

      Blok değiştirme

      filestream

      İzin

      Blok değiştirme

      Blok değiştirme

      date, time, datetime2, and datetimeoffset

      İzin

      İzin1

      Blok değiştirme

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

  • (Örneğin, bir tablo Abone tarafında kullanılamıyor başvuran yabancı anahtar ekleme kaynaklanan bir hata) şema değişikliği uygulanırken bir hata ortaya çıkarsa, eşitleme başarısız olur ve abonelik yeniden gerekir.

  • Şema değişikliği bir birleşim filtre veya parametreli filtre dahil bir sütun yapılırsa, tüm abonelikleri yeniden başlatmak ve anlık görüntüsünü yeniden gerekir.

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

Ayrıca bkz.

Başvuru

ALTER TABLE (Transact-SQL)

alter VIEW (Transact-sql)

alter procedure (Transact-sql)

alter FUNCTION (Transact-sql)

alter TETIKLEYICI (Transact-sql)

Kavramlar

Verileri ve veritabanı nesnelerini Yayımla

Özel şema değişiklikleri yansıtmak için işlemsel yordamları yeniden