Işlem çoğaltma ile ilgili konuları
Bir dizi ile ilgili konuları vardır işlem çoğaltma:
Hareket günlük alanı.
Dağıtım veritabanı için disk alanı.
Yayımlanan her tablo için birincil anahtar.
Tetikler.
(LOB) büyük nesne veri türleri.
Güncellenebilir abonelik (bunlar kullanılıyorsa).Güncellenebilir abonelik için ilgili konular hakkında daha fazla bilgi için bkz:Işlem çoğaltması için güncelleştirilebilir abonelikleri.
Hareket günlük alanı
İşlemsel kopyalama kullanarak yayımlanacak her veritabanı için işlem günlüğü ayrılan yeterli olması gerekir.Günlük kayıtları için taşınmıştır kadar kesildi çünkü yayımlanan veritabanının işlem günlüğü günlük daha yeri benzer bir yayınlanmamış veritabanının gerektirebilir dağıtım veritabanı.
Dağıtım veritabanı kullanılabilir durumda değilse veya işlem günlüğü, Günlük Okuma Aracısı çalışmıyor, bir yayın veritabanı ne kadar devam eder.Dağıtım veritabanı için teslim eski yayımlanan hareket geçmiş günlük kesilmiş olamaz.Önerilir, küme otomatik olarak işlem günlüğü dosyasının büyümesine, bu durumda günlük barındırabilir.Daha fazla bilgi için bkz: DATABASE (Transact-SQL) CREATE ve ALTER DATABASE Transact-SQL).
Ayarlamanızı öneririzzaman uyumlu yedek ile up. seçeneği distribution veritabanında karşılık gelen hareketler kadar yayın veritabanı günlüğünün kesilmesi geciktirir Dağıtım veritabanı yedeği Bu yayın veritabanında daha büyük bir işlem günlüğü neden olabilir.Bu seçenek hakkında daha fazla bilgi için bkz:Yedekleme ve anlık görüntü ve işlem çoğaltma geri yükleme stratejileri.
Dağıtım veritabanı için disk alanı
Yinelenen hareketleri dağıtım veritabanında depolamak için yeterli disk alanı olduğundan emin olun:
anlık görüntü yapmayın, hemen aboneleri için kullanılabilir dosyalar (olduğu varsayılan değer): hareket için tüm abonelere yinelenen veya saklama dönemi ulaşıldı, hangisi daha kısa kadar kadar depolandığı.
Bir işlemsel yayım ve anlık görüntü dosyaları aboneleri için kullanılabilir hemen marka oluşturuyorsanız: hareket için tüm abonelere yinelenen veya anlık görüntü aracı çalışır ve yeni bir anlık görüntü oluşturur, hangisi daha uzun kadar kadar depolandığı. anlık görüntü Agent çalışır arasında geçen süreyi büyük bir varsayılan 72 saat olan yayın için maksimum dağıtım saklama süresi, saklama dönemi eski hareketleri dağıtım veritabanından kaldırılır.Daha fazla bilgi için bkz:Abonelik bitiş ve etkinliğini kaldırmayı.
Rapor anlık görüntü görüntü görüntüsünü aboneleri için hemen kullanılabilmesi, yeni abonelere yayın erişimi hızını artırır, ancak seçenek daha fazla disk depolama Dağıtım veritabanı için neden olabilir.Ayrıca, yeni bir anlık görüntü anlık görüntü aracı her çalıştığında oluşturulan gelir.Seçeneği kullanılırsa, yalnızca yeni bir abonelik varsa, yeni bir anlık görüntü oluşturulur.
Yayımlanan her tablo için birincil anahtarları
Tüm tablolar olarak işlem yayımlanan çoğaltma bildirilen birincil anahtar içermelidir.Varolan tablolar hazır yayımlama için birincil anahtar kullanarak bir ekleyerekTransact-SQLdeyimALTER tablo (Transact-SQL).
Tetikleyicileri
Tetikleyici bir abonelik veritabanı kullanırken aşağıdaki sorunlardan biri dikkat edin:
Varsayılan tetikleyici ON ayarlanması XACT_ABORT ile çalıştırın.Bir deyim içinde bir tetikleyici dağıtım aracı abone en değişiklikler uygulanıyor sırasında hataya neden olur, değişikliklerin tüm toplu iş iş iş, yerine tek tek ifade başarısız olur.Kullanabileceğiniz işlemsel kopyalama-SkipErrors parametre hataları. neden ifadeleri atlamak için dağıtım aracı If-SkipErrors XACT_ABORT ON ile kullanılır, değişiklikler tüm toplu iş iş bir neden, bir hata. atlanır XACT_ABORT gerekli sürece küme tetikleyiciler, ON olarak önerilir, küme kullanıyorsanız, kapalı,-SkipErrors parametre. Devre dışı seçeneğini ayarlamak içinSET XACT_ABORT OFFTetikleyici tanımı.XACT_ABORT, daha fazla bilgi için bkz:küme XACT_ABORT (Transact-SQL).Hakkında daha fazla bilgi için-SkipErrors parametre, bkz: Işlem çoğaltma hatalar atlanıyor..
Açık hareketler abone sırasında Tetikleyiciler hariç öneririz.İşlem çoğaltma kullanan ağ gidiş-dönüş, böylece performans geliştirme azaltmak için işlem grubu oluşturma hareket yapar.ROLLBACK deyim, Tetikleyiciler Abone tarafında eklenirse, toplu hareket iptal ve 266 sunucu hatası olabilir oluşturuldu (yürütmek bir yürütmek veya ROLLBACK TRANSACTION deyim eksik olduğunu sonra işlem sayısı.Önceki Sayısı = % ld, geçerli sayısı = % ld.).Toplu iş komutları birden fazla hareketleri içerebilir veya Yayımcı tarafında büyük bir işlemin parçası olarak, bu nedenle hareketleri geri işlem bütünlüğünü olumsuz etkileyebilir.
Açık hareketleri dahil, tetikleyici tüm yürütme tablolarda karşılık gelen BEGIN TRANSACTION deyimlerini sahip olduğundan emin olun.Karşılık gelen bir BEGIN TRANSACTION olmadan bir yürütme satır değişiklikleri işlemsel olmayan bir uygulama için abone olur.Ayrıca, dağıtım aracı sunucu hatası 266 karşılaşır ve böylece, yeniden uygulayabilirsiniz bir hareket veya toplu iş komutu geri almak çalışır, daha sonra bir hata oluşur.Aracı, önceden uygulanmış olan komutlar geçerli girişiminde bulunduğunda, yinelenen anahtar hata neden olur.
Tetikleyiciler hakkında daha fazla bilgi için bkz:Sınırlamaları, kimlik ve Tetikleyicileri NOT ile denetlemek IÇIN çoğaltma.
Büyük nesne (LOB) veri türleri
İşlem çoğaltma LOB sütunlarda kısmi güncelleştirmeler yapar ve yayımlama LOB'lar destekler: LOB sütun güncelleştirilirse, yalnızca değişen veri bölümü, tüm veriler sütuna. yerine yinelenen
Yayımlanan tablonun bir LOB'lar varsa, aşağıdaki Dağıtım Aracısı parametreleri kullanmayı göz önünde bulundurun: -UseOledbStreaming, -OledbStreamThresholdve -PacketSize . En basit şekilde küme bu parametreleri olan başlıklı Distribution Agent'in profili kullanacak biçimdeDağıtım profili OLEDB akış için.Daha fazla bilgi için bkz:Çoğaltma aracısı profilleri.Bu önceden tanımlanmış profil ek olarak bir aracı profili oluşturmanız veya değiştirmeniz veya komut satırı parametresi belirtebilirsiniz.Daha fazla bilgi için, bkz:
Nasıl Yapılır: Çoğaltma aracısı Profiles (SQL Server Management Studio'yu) ile çalışma
Nasıl Yapılır: Çoğaltma aracısı Profiles (çoğaltma Transact-SQL programı) ile çalışma
metin, ntext ve görüntü veri türleri
Çoğaltma işlemitext,ntextveimageveri türü bir işlemsel yayım olduğu için bir dizi dikkat edilmesi gereken noktalar.Öneririz, veri türlerini kullanmakvarchar(max),nvarchar(max),varbinary(max)yerinetext,ntext, andimageveri türleri, sırasıyla.
Gerekiyorsa kullanıntext,ntext, orimage, aşağıdakilerden biri olabilir:
Açık hareketler WRITETEXT ve UPDATETEXT alınmış.
Günlüğe kaydedilen metin işlemleri ile günlük seçeneği ile yayımlanan tablolarda WRITETEXT ve UPDATETEXT kullanarak çoğaltılabilir.LOG WITH seçeneği gerekir çünkü işlemsel kopyalama hareket günlüğündeki değişiklikleri izler.
UPDATETEXT işlemleri yalnızca, tüm abonelere çalıştırıyorsanız kullanılabilirSQL Server.WRITETEXT işlemleri UPDATE deyimleri yinelenir, bunlar da olmayan ile kullanılacak şekilde-SQL ServerAboneler.
Yapılandırılabilir bir parametreen fazla metin çoğaltma boyututext, ntext, varchar(max), en büyük boyutunu (bayt cinsinden) kontrol nvarchar(max), ve imageveriler çoğaltılabilir.Bu desteği verir: ODBC sürücüleri ve OLE DB sağlayıcıları; örneklerini SQL Server Database Engineiçin bu veri türlerinden değerleri işlemek olamaz ve sistem kaynağı (sanal bellek) kısıtlamaları var. dağıtıcılarısütun bu veri türlerinden biriyle yayımlanır ve bir INSERT, UPDATE, WRITETEXT veya UPDATETEXT işlemi çalıştırmak yapılandırılan sınırı, işlem başarısız aşıyor.
Usesp_configure (Transact-SQL)Sistem saklı yordam içinen fazla metin çoğaltma boyutu parametre.
Zaman yayımlamatext,ntext, veimagesütun, metin işaretçisi alınan UPDATETEXT veya WRITETEXT işlem olarak (ve okuma repeatability ile) aynı işlem içinde.Örneğin, etmez metin işaretçisi bir hareket içinde almak ve başka bir programda kullanmak.Bu taşınmış ve geçersiz olur.
Alınan metin işaretçisi, ayrıca, metin işaretçisi ile işaret metnin konumunu değiştirmek herhangi bir işlemi gerçekleştirmelisiniz. (birincil güncelleştirme gibi anahtar), önce UPDATETEXT veya WRITETEXT deyimi yürütme.
UPDATETEXT ve WRITETEXT işlemleri çoğaltılacak verileri kullanarak, önerilen yöntem budur:
Hareket başlar.
Yalıtım düzey READ YİNELENEBİLİR ile TEXTPTR() işlevini kullanarak metin işaretçisi edinin.
Metin işaretçisi UPDATETEXT veya WRITETEXT işlemi kullanın.
Hareket yürütme.
Not
Aynı işlemde metin işaretçisi almak, değişiklikleri Yayımcı tarafında kullanılabilir, ancak değişiklikleri aboneleri için yayımlanmaz.
Örneğin:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ BEGIN TRAN DECLARE @mytextptr varbinary(16) SELECT @mytextptr = textptr(Notes) FROM Employees WHERE EmployeeID = '7' IF @mytextptr IS NOT NULL BEGIN UPDATETEXT Employees.Notes @mytextptr 0 NULL 'Terrific job this review period.' -- Dummy update to fire trigger that will update metadata and ensure the update gets propagated to other Subscribers. UPDATE Employees -- Set value equal to itself. SET Notes = Notes WHERE EmployeeID = '7' END COMMIT TRAN SET TRANSACTION ISOLATION LEVEL READ COMMITTED
Not
Bu örnek Northwind veritabanının varsayılan olarak yüklenen dayanır.Bu veritabanı yükleme hakkında bilgi için bkz:Northwind ve pubs örnek veritabanları at Microsoftmerkezi.
Dikkat etmeniz gereken, abone veritabanları boyutlandırma değil, metin işaretçisi için çoğaltılantext,ntext, veimagesütunlar gerekir başlatılan abone tablolarda bile, bunlar başlatılamadı Yayımcı.Sonuç olarak, hertext,ntext, veimageabone için eklenen sütunun tablo içeriği yok. olsalar bile, en az 43 bayt veritabanı depolama görev dağılımı ile tüketir