İş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:

    1. SQL Server Management Studio başlatın ve abone sunucusu örneğine bağlanın.
    2. Veritabanları'nı genişletin ve sonra abone veritabanını genişletin.
    3. Tablolar'ı ve ardından Sistem Tabloları'yı genişletin.
    4. Dbo'ya sağ tıklayın. MSreplication_subscriptions ve ardından Özellikler'i seçin.
    5. 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