İşlem çoğaltmayı yapılandırırken hata 1205
Bu makale, SQL Server'de işlem çoğaltmayı yapılandırırken oluşan bir sorunu çözmenize yardımcı olur.
Özgün ürün sürümü: SQL Server
Özgün KB numarası: 2674882
Belirtiler
Aşağıdaki senaryoyu inceleyin:
- İşlem çoğaltmayı SQL Server yapılandırabilirsiniz.
- İşlem çoğaltma topolojisi birkaç yayımcıdan oluşur.
- Yayımcılar verileri aynı abone veritabanına çoğaltır.
- Dağıtım aracıları sürekli olarak çalışır veya sık sık zamanlamaya göre çalışır. Örneğin, dağıtım aracıları dakikada bir çalıştırılır.
Bu senaryoda dağıtım aracıları bir kilitlenme senaryosunda yer alabilir ve kilitlenme kurbanı olarak seçilebilir. Bu sorun oluştuğunda, aşağıdakine benzer bir hata iletisi alabilirsiniz:
Hata 1205
İşlem (İşlem Kimliği %d) başka bir işlemle %.*ls kaynaklarında kilitlenmeye neden oldu ve kilitlenme kurbanı olarak seçildi. İşlemi yeniden çalıştırın.
Kilitlenme bilgilerini SQL Server Hata Günlüğü'ne yeniden yönlendirmek için izleme bayrağı 1222'yi etkinleştirirseniz, aşağıdakilerden birine benzer bir hata iletisi alırsınız:
-
update MSreplication_subscriptions set transaction_timestamp = cast(@P1 as binary(15)) + cast(case datalength(transaction_timestamp) when 16 thenull(substring(transaction_timestamp, 16, 1), 0) else 0 end as binary(1)), "time" = where UPPER(publisher) = @P2 UPPER(@P3) and publisher_db = @P4 and publication = and subscription_type = @P5 0
-
update MSreplication_subscriptions set transaction_timestamp = cast(@P1 as binary(15)) + cast(substring(transaction_timestamp, 16, 1) ikili(1)), "time" = @P2 where UPPER(publisher) = UPPER(@P3) and publisher_db = @P4 and publication = and subscription_type = @P5 0 ve (substring(transaction_timestamp, 16, 1) = 0 veya datalength(transaction_timestamp) 16) <
Neden
Sayı sistemi tablosu için MSreplication_subscriptions
satır sayısı tahmini yanlışsa bu sorun oluşur. Rowcount tahmini yanlışsa, SQL Server veritabanı altyapısı veritabanını güncelleştirmek için yanlış bir yöntem kullanabilir.
Not
Genellikle doğru rowcount tahmini, veritabanındaki abonelik sayısına eşittir. Abonelik Akışları özelliğini kullanırsanız, satır sayısı tahmini, her abonelik için yapılandırılmış akış sayısıyla çarpılan abonelik sayısına eşittir.
Çözüm
Bu sorunu gidermek için aşağıdaki yöntemlerden birini kullanın:
Yöntem 1: komutunu kullanın
DBCC UPDATEUSAGE
.Bu sorunu çözmek için yanlış rowcount değerini güncelleştirin. Bunu yapmak için aşağıdaki komutu çalıştırın:
DBCC UPDATEUSAGE (**subscriber_database_name** **,**'MSreplication_subscriptions') WITH COUNT_ROWS
Not
Komut
DBCC UPDATEUSAGE
, tablodaki her bölüm için satırlar, kullanılan sayfalar, ayrılmış sayfalar, yaprak sayfalar ve veri sayfası sayıları için doğru değerleri belirler. Bu değerler doğruysa,DBCC UPDATEUSAGE
komut veri döndürmez. Yanlış değerler bulunur ve düzeltilirse,DBCC UPDATEUSAGE
güncelleştirilen satırları ve sütunları döndürür.Yöntem 2: deyimini
ALTER INDEX
kullanın.Bu sorunu çözmek için tabloyla ilişkili dizinleri yeniden derleyin
MSreplication_subscriptions
. Bunu yapmak için aşağıdaki deyimi kullanın:ALTER INDEX ALL ON [dbo].[MSreplication_subscriptions] REBUILD
Daha fazla bilgi
Belirtiler bölümünde bahsedilen sorun oluştuğunda, sistem tablosu için MSreplication_subscriptions
satır sayısı tahmini 4.294.967.296 kadar yüksek olabilir. Satır sayısı değerini denetlemek için aşağıdaki yöntemlerden birini kullanın.
Yöntem 1: SQL Server Management Studio kullanın.
Sistem tablosunun satır sayısı değerini denetlemek üzere SQL Server Management Studio kullanmak için
MSreplication_subscriptions
şu adımları izleyin:- SQL Server Management Studio başlatın ve abone sunucusu örneğine bağlanın.
- Veritabanları'nı genişletin ve sonra abone veritabanını genişletin.
- Tablolar'ı ve ardından Sistem Tabloları'yı genişletin.
- Dbo'ya sağ tıklayın. MSreplication_subscriptions ve ardından Özellikler'i seçin.
- Depolama'yı seçin ve satır sayısı alanındaki satır sayısı değerini doğrulayın.
Yöntem 2: Sorgu deyimi kullanın.
Sistem tablosunun satır sayısı değerini denetlemek için
MSreplication_subscriptions
aşağıdaki sorguyu çalıştırın:SELECT rows, * FROM sys.partitions WHERE object_id = object_id('MSreplication_subscriptions')
Başvurular
- Kilitlenmeleri algılama ve sonlandırma hakkında daha fazla bilgi için bkz. Kilitlenmeleri Algılama ve Sonlandırma
- Deyimi hakkında
ALTER
daha fazla bilgi için bkz . Transact-SQL deyimleri - Komut hakkında
DBCC UPDATEUSAGE
daha fazla bilgi için bkz. DBCC UPDATEUSAGE (Transact-SQL)
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin