Aracılığıyla paylaş


SQL Server 2016'da "Saklı yordam hedef tablonun şemasını değiştirdiğinden INSERT EXEC başarısız oluyor" hatası

Bu makale, Sorgu Veri Deposu özelliğini kullanan bir veritabanındaki saklı yordam düzenli aralıklarla başarısız olduğundan oluşan bir sorunu geçici olarak çözmenize yardımcı olur.

Özgün ürün sürümü: SQL Server 2016
Özgün KB numarası: 4465511

Belirtiler

Aşağıdaki senaryoyu değerlendirin:

  • Sorgu Veri Deposu özelliğini kullanan bir Microsoft SQL Server 2016 veritabanınız var.

  • Söz dizimini kullanarak INSERT...EXEC başka bir saklı yordama çağrı yapan bir saklı yordamınız vardır.

  • Sorgu Veri Deposu özelliği, yapılandırılan boyut üst sınırına yükseldikçe otomatik temizlemeyi düzenli aralıklarla çalıştırır. Ayrıca, Sorgu Veri Deposu durumu olarak READ_WRITE READ_ONLYdeğişir.

Bu senaryoda, üst saklı yordam yürütmesi düzenli aralıklarla başarısız olur ve aşağıdakine benzer bir hata iletisi alırsınız:

Msg 556, Düzey 16, State 2, Line LineNumber
Saklı yordam hedef tablonun şemasını değiştirdiğinden INSERT EXEC başarısız oldu.

Neden

Otomatik temizleme işlemi planı Sorgu Veri Deposu'nun dışına boşaltır. Sorgu Veri Deposu'nda plan eksik olduğundan sorgu yeniden derleme işlemiyle karşılaşır. Ancak, plan yordam önbelleğinde hala mevcuttur. Tasarım gereği, yeniden derleme işlemi gerçekleştiğinde SQL Server alt yordamın yinelenen yürütülmesini önlemek için 556 hatasını oluşturur. Böyle bir yinelenen işlem, yanlış sonuçların döndürülmesine neden olabilir.

Çözüm

SQL Server 2016 için Hizmet Paketi bilgileri

Bu sorun, SQL Server için aşağıdaki hizmet paketinde düzeltildi:

SQL Server 2016 için Service Pack 3

SQL Server hizmet paketleri hakkında:

Hizmet paketleri birikmelidir. Her yeni hizmet paketi, yeni düzeltmelerle birlikte önceki hizmet paketlerinde bulunan tüm düzeltmeleri içerir. Bu hizmet paketi için en son hizmet paketini ve en son toplu güncelleştirmeyi uygulamanızı öneririz. En son hizmet paketini yüklemeden önce önceki bir hizmet paketini yüklemeniz gerekmez. En son hizmet paketi ve en son toplu güncelleştirme hakkında daha fazla bilgi için aşağıdaki makaledeki Tablo 1'e bakın:

SQL Server ve bileşenlerinin sürüm, sürüm ve güncelleştirme düzeyini belirleme

Geçici çözüm

Bu soruna geçici bir çözüm bulmak için aşağıdaki adımları uygulayın:

  1. Sorgu Veri Deposu'nun boyutunu artırın. Bu, Sorgu Veri Deposu'nun planı temizleme ve işletim moduna girme READ_ONLY sıklığını veya olasılığını azaltır.

  2. Hata 556'yı yakalamak için kodunuza hata işleme ekleyin ve sorguyu yeniden gönderin INSERT EXEC .

  3. Sorgu Veri Deposu konumundan READ_ONLYdurumuna döndüğünde yordam önbelleğini READ_WRITE temizleyin.

Ek bilgi

Microsoft SQL Server 2017'de Sorgu Veri Deposu'nda yapılan değişiklikler nedeniyle bu sorun SQL Server 2017'de oluşmaz.