Gejala
Asumsikan Anda menggunakan Microsoft SQL Server 2012 atau SQL Server 2014. Saat Anda menjalankan Pengelola Penyimpanan BLOB Jarak Jauh (RBS), alat Pengelola RBS gagal, dan Anda akan menerima pesan kesalahan berikut:
Catatan
Memulai tugas Pengelola.
Memulai Pengumpulan Sampah.
Memulai pemindaian referensi.
Pemindaian Referensi selesai untuk database ini.
Memindai 113 gumpalan. Menghapus 0 blob dalam rentang 0x000000000000000000000000(eksklusif) hingga 0x00000000000000b600000002(inklusif).
Tugas ini telah berakhir. Memproses total 1 unit kerja. 0 Unit kerja tidak lengkap.
Memulai propagasi penghapusan.
Tidak ada pekerjaan yang tersedia saat ini.
Klien, proses, atau utas lain mungkin sedang mengerjakan tugas lain.
Melewatkan unit kerja saat ini karena kesalahan. Untuk informasi selengkapnya, lihat log Pengelola RBS.
[..]
Tugas ini telah berakhir. Memproses total 102 unit kerja. 101 unit kerja tidak lengkap. Diperlukan untuk menghapus 0 blob. Berhasil menghapus 0 blob, 0 blob tidak ditemukan di blob store.
Tugas ini telah berakhir.
Tugas ini telah berakhir.
Saat menggunakan Profiler untuk melacak masalah, Anda akan mendapatkan pesan kesalahan berikut:
Catatan
Msg 50000, Level 16, Status 0, Prosedur rbs_sp_rethrow_error, Baris 38
Kesalahan RBS. Kesalahan Asli: Nomor 535, Tingkat Keparahan 16, Status 0, Prosedur rbs_sp_count, Baris 52,
Pesan: Fungsi datediff mengakibatkan luapan udara. Jumlah bagian tanggal yang memisahkan dua instans tanggal/waktu terlalu besar. Coba gunakan datediff dengan datepart yang kurang tepat.
Penyebab
Masalah ini terjadi karena kueri yang memeriksa waktu sejak eksekusi terakhir dapat meluap ketika mengonversi nilai menjadi milidetik. Hal ini menyebabkan kueri gagal dan tugas berakhir tanpa memproses data.
Resolusi
Perbaikan untuk masalah ini tersedia di unduhan paket fitur terbaru untuk RBS.msi. Jika Anda sudah memiliki penginstalan RBS, kami sarankan Anda menjalankan skrip yang disediakan di bagian "Solusi" untuk memperbaiki masalah untuk sementara.
Unduh Paket Fitur Microsoft SQL Server 2014 Service Pack 2 (SP2)
Unduh Paket Fitur Microsoft SQL Server 2012 Paket Layanan 4 (SP4)
Solusi
Jika Anda sudah memiliki penginstalan RBS di SQL Server 2012 atau SQL Server 2014 yang belum menginstal perbaikan, Anda dapat menggunakan langkah-langkah solusi berikut:
Di SSMS, buka skrip dari langkah 3, lalu sambungkan ke instans SQL Server yang menghosting database klien RBS tempat Anda ingin menerapkan perbaikan.
Dalam skrip, ganti string "your_RBS_client_database" dengan nama sebenarnya database klien RBS.
Jalankan skrip untuk menerapkan perbaikan.
Gunakan [your_RBS_client_database]
Pergijika object_id(N'mssqlrbs_resources.rbs_sp_count') bukan null
Prosedur DROP mssqlrbs_resources.rbs_sp_count
PergiMembuat prosedur mssqlrbs_resources.rbs_sp_count (
@operation smallint,
@object smallint = 0,
@value bigint = null,
@start_time tanggalwaktu = null,
@end_time datetime = null,
@description sysname = N'',
@message nvarchar(max) = null
)
sebagai
mulainyatakan @type tinyint,
@secondsUsed bit,
@seconds mengambangnyatakan @maxDays int = 10;
Jika tidak ada (
Pilih * dari mssqlrbs_resources.rbs_internal_counters
where operation = @operation and object = @object and description = @description
)
raiserror (N'Kesalahan internal di RBS. Mencoba menghitung penghitung performa yang tidak valid. Penghitung: <%d>.<%d>.<%s>.',
16, 101, @operation, , @object@description)Pilih
@type = jenis,
@secondsUsed = seconds_used
dari
mssqlrbs_resources.rbs_internal_counters
di mana
operasi = @operation dan
objek = @object dan
deskripsi = @descriptionif @object != 0
mulai
if @value null
raiserror (N'Kesalahan internal di RBS. Nilai tidak ditentukan untuk penghitung <kinerja %d>.<%d>.<%s>.',
16, 103, @operation, , @object@description)
endif @secondsUsed = 1
mulai
if (@start_time adalah null)
raiserror (N'Kesalahan internal di RBS. Waktu mulai tidak ditentukan untuk penghitung <kinerja %d>.<%d>.<%s>.',
16, 102, @operation, , @object@description)set @end\_time = isnull(@end_time, getutcdate())
if (@start_time >@end\_time)
raiserror (N'Kesalahan internal di RBS. Waktu mulai adalah setelah waktu selesai. Penghitung: <%d>.<%d>.<%s>.',
16, 104, @operation, , @object@description)if (datediff(day, @start\_time, = @end\_time)>@maxDays)
mulai
set @seconds = convert(float, datediff(second, @start\_time, @end\_time))
end
else
mulai
set @seconds = convert(float, datediff(milidetik, @start\_time, @end\_time)) / 1000
end
endperbarui mssqlrbs_resources.rbs_internal_counters
atur
count = count + 1,
Nilai = Nilai + @value,
squared_value = squared_value + persegi(@value),
min_value = huruf besar
ketika min_value null maka @value
ketika (@value < min_value) lalu @value
Else min_value
akhir,
max_value = kasus
ketika max_value null maka @value
ketika (@value > max_value) lalu @value
else max_value
akhir,
last_value = @value,
detik = detik + @seconds,
squared_seconds = squared_seconds + persegi(@seconds),
min_seconds = huruf besar
ketika min_seconds null maka @seconds
ketika (@seconds < min_seconds) lalu @seconds
Else min_seconds
akhir,
max_seconds = huruf besar
Ketika max_seconds null maka @seconds
ketika (@seconds > max_seconds) lalu @seconds
Else max_seconds
akhir,
last_seconds = @seconds,
last_update_time = getutcdate(),
last_message = @message
di mana
operasi = @operation dan
objek = @object dan
deskripsi = @descriptionend
Pergi
Status
Microsoft telah mengonfirmasi bahwa ini adalah masalah dalam produk Microsoft sebagaimana tercantum di bagian "Berlaku untuk".