MEMPERBAIKI: Kesalahan saat Anda menjalankan RBS Maintainer di SQL Server 2012 atau SQL Server 2014

Berlaku Untuk
SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Service Pack 2 - duplicate (do not use)

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:

  1. Di SSMS, buka skrip dari langkah 3, lalu sambungkan ke instans SQL Server yang menghosting database klien RBS tempat Anda ingin menerapkan perbaikan.

  2. Dalam skrip, ganti string "your_RBS_client_database" dengan nama sebenarnya database klien RBS.

  3. Jalankan skrip untuk menerapkan perbaikan.

    Gunakan [your_RBS_client_database]
    Pergi

    jika object_id(N'mssqlrbs_resources.rbs_sp_count') bukan null
        Prosedur DROP mssqlrbs_resources.rbs_sp_count
    Pergi

    Membuat 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
    mulai

        nyatakan @type tinyint,
                @secondsUsed bit,
                @seconds mengambang

        nyatakan @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 = @description

        if @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)
        end

        if @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
        end

        perbarui 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 = @description

    end
    Pergi

Status

Microsoft telah mengonfirmasi bahwa ini adalah masalah dalam produk Microsoft sebagaimana tercantum di bagian "Berlaku untuk".