Belirtiler
Microsoft SQL Server 2012 veya SQL Server 2014 kullandığınızı varsayalım. Uzak BLOB depolama (KÇY) bakımcı 'yı çalıştırdığınızda, KÇY Bakımcı aracı başarısız olur ve aşağıdaki hata iletisini alırsınız:
Bakımcı görevleri başlatılıyor. Çöp toplama başlatılıyor. Başvuru taraması başlatılıyor. Bu veritabanında başvuru taraması tamamlandı. Taranan 113 blob 'ları. 0x000000000000000000000000 (özel) ile 0x00000000000000b600000002 (dahil) aralığında 0 BLOB silindi. Bu görev sona erdi. 1 çalışma birimi toplamı işlendi. 0 çalışma birimi tamamlanmadı. Yayılmayı silme başlatılıyor. Şu anda kullanılabilir iş yok. Diğer istemciler, işlemler veya iş parçacıkları başka görevlerde çalışıyor olabilir. Bir hata nedeniyle geçerli iş birimi atlanıyor. Daha fazla bilgi için KÇY Bakımcı günlüğüne bakın. [..] Bu görev sona erdi. İşlenen 102 çalışma birimi toplamı. 101 çalışma birimleri tamamlanmadı. 0 BLOB 'ları silmek için gereklidir. 0 BLOB 'ları siliniyor, Blob deposunda 0 BLOB bulunamadı. Bu görev sona erdi. Bu görev sona erdi.
Sorunu izlemek için profil oluşturucusunu kullanırken, aşağıdaki hata iletisini alırsınız:
İleti 50000, düzey 16, durum 0, yordam rbs_sp_rethrow_error, satır 38KÇY hatası. Özgün hata: sayı 535, önem 16, durum 0, yordam rbs_sp_count, çizgi 52, Ileti: DateDiff işlevi taşma ile sonuçlandı. İki tarih/saat örneğini ayıran dateparts sayısı çok büyük. DateDiff 'i daha hassas bir datepart ile kullanmayı deneyin.
Neden
Bu sorun, bir değeri milisaniyeye dönüştürürken son yürütmenin taşmasından bu yana geçen zamanı denetleyen bir sorgu nedeniyle oluşur. Bu, sorgunun başarısız olmasına ve görevin verileri işlemeden sonlandırılmasına neden olur.
Çözüm
Bu sorunla ilgili düzeltme, KÇY. msi için en son özellik paketi indirmede kullanılabilir. Zaten bir KÇY yüklemenize sahipseniz, sorunu geçici olarak çözmek için "geçici çözüm" bölümünde sağlanan komut dosyasını çalıştırmanızı öneririz.
MICROSOFT SQL server 2014 Service Pack 2 (SP2) özellik paketiniINDIRINmicrosoft SQL Server 2012 Service Pack 4 (SP4) özellik paketini indirin
Geçici Çözüm
SQL Server 2012 veya SQL Server 2014 üzerinde düzeltmenin yüklü olmadığı bir RBS yüklemesi varsa, aşağıdaki geçici çözüm adımlarını kullanabilirsiniz:
-
SSMS 'de, adım 3 ' ten komut dosyasını açın ve düzeltmeyi uygulamak istediğiniz KÇY istemci veritabanına ev sahipliği yapan SQL Server örneğine bağlanın.
-
Betikte, "your_RBS_client_database" dizesini KÇY istemci veritabanının gerçek adıyla değiştirin.
-
Düzeltmeyi uygulamak için komut dosyasını çalıştırır.use [your_RBS_client_database]go if object_id(N'mssqlrbs_resources.rbs_sp_count') is not null drop procedure mssqlrbs_resources.rbs_sp_countgo create procedure mssqlrbs_resources.rbs_sp_count ( @operation smallint, @object smallint = 0, @value bigint = null, @start_time datetime = null, @end_time datetime = null, @description sysname = N'', @message nvarchar(max) = null)asbegin declare @type tinyint, @secondsUsed bit, @seconds float declare @maxDays int = 10; if not exists ( select * from mssqlrbs_resources.rbs_internal_counters where operation = @operation and object = @object and description = @description ) raiserror (N'Internal error in RBS. Attempt to count invalid performance counter. Counter: <%d>.<%d>.<%s>.', 16, 101, @operation, @object, @description) select @type = type, @secondsUsed = seconds_used from mssqlrbs_resources.rbs_internal_counters where operation = @operation and object = @object and description = @description if @object != 0 begin if @value is null raiserror (N'Internal error in RBS. Value not specified for performance counter <%d>.<%d>.<%s>.', 16, 103, @operation, @object, @description) end if @secondsUsed = 1 begin if (@start_time is null) raiserror (N'Internal error in RBS. Start time not specified for performance counter <%d>.<%d>.<%s>.', 16, 102, @operation, @object, @description) set @end_time = isnull(@end_time, getutcdate()) if (@start_time > @end_time) raiserror (N'Internal error in RBS. Start time is after end time. Counter: <%d>.<%d>.<%s>.', 16, 104, @operation, @object, @description) if (datediff(day, @start_time, @end_time) >= @maxDays) begin set @seconds = convert(float, datediff(second, @start_time, @end_time)) end else begin set @seconds = convert(float, datediff(millisecond, @start_time, @end_time)) / 1000 end end update mssqlrbs_resources.rbs_internal_counters set count = count + 1, value = value + @value, squared_value = squared_value + square(@value), min_value = case when min_value is null then @value when (@value < min_value) then @value else min_value end, max_value = case when max_value is null then @value when (@value > max_value) then @value else max_value end, last_value = @value, seconds = seconds + @seconds, squared_seconds = squared_seconds + square(@seconds), min_seconds = case when min_seconds is null then @seconds when (@seconds < min_seconds) then @seconds else min_seconds end, max_seconds = case when max_seconds is null then @seconds when (@seconds > max_seconds) then @seconds else max_seconds end, last_seconds = @seconds, last_update_time = getutcdate(), last_message = @message where operation = @operation and object = @object and description = @description endgo
Durum
Microsoft bu sorunun "Uygulandığı öğe" bölümünde listelenen Microsoft ürünlerinde bulunduğunu onaylamıştır.