PATAISYMAS: Klaida paleidus RBS Maintainer „SQL Server“ 2012 arba „SQL Server“ 2014

Taikoma
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)

Požymiai

Tarkime, kad naudojate "Microsoft „SQL Server“ 2012" arba „SQL Server“ 2014. Kai vykdote nuotolinio didelių dvejetainių objektų saugojimo (RBS) priežiūros priemonę, RBS priežiūros įrankis neveikia ir gaunate šį klaidos pranešimą:

Pastaba

Prižiūrėtojo užduočių pradžia.
    Šiukšlių surinkimo pradžia.
        Paleidžiamas nuorodų nuskaitymas.
            Šios duomenų bazės nuorodų nuskaitymas baigtas.
            Nuskenuota 113 blobs. Panaikinta 0 dvejetainių objektų nuo 0x000000000000000000000000(išimtinai) iki 0x00000000000000b600000002(imtinai).
        Ši užduotis baigta. Iš viso apdorota 1 darbo vienetai. 0 Darbo vienetai buvo neišsamūs.
        Pradedamas naikinimo platinimas.
            Šiuo metu nėra darbo.
            Kiti klientai, procesai ar gijos šiuo metu gali atlikti kitas užduotis.
            Praleidžiamas dabartinis darbo vienetas dėl klaidos. Daugiau informacijos ieškokite RBS prižiūrėtojo žurnale.
    [..]
        Ši užduotis baigta. Iš viso apdorota 102 darbo vienetai. 101 Darbo vienetai buvo neužbaigti. Reikia panaikinti 0 dvejetainių objektų. Pavyko ištrinti 0 dvejetainių objektų, dvejetainių objektų parduotuvėje nerasta 0 dvejetainių objektų.
    Ši užduotis baigta.
Ši užduotis baigta.

Kai naudojate "Profiler" problemai sekti, gaunate tokį klaidos pranešimą:

Pastaba

MSG 50000, 16 lygis, 0 būsena, rbs_sp_rethrow_error procedūra, 38 eilutė
RBS klaida. Pradinė klaida: skaičius 535, sunkumas 16, būsena 0, procedūra rbs_sp_count, 52 eilutė,
Pranešimas: Dėl funkcijos datediff atsirado perpilda. Datos dalių, skiriančių du datos / laiko egzempliorius, skaičius yra per didelis. Pabandykite naudoti datediff su ne tokia tikslia datepart.

Priežastis

Ši problema kyla todėl, kad užklausa, kuri tikrina laiką nuo paskutinio vykdymo, gali būti perpildyta, kai konvertuoja reikšmę į milisekundes. Dėl to užklausa nepavyksta ir užduotis baigiama neapdorojant duomenų.

Sprendimas

Šios problemos sprendimas pasiekiamas naujausiame funkcijų pakete, skirtame RBS.msi. Jei jau turite esamą RBS įdiegtį, rekomenduojame paleisti scenarijų, pateiktą skyriuje "Sprendimo būdas", kad laikinai išspręstumėte problemą.

Atsisiųskite "Microsoft „SQL Server“ 2014 Service Pack 2" (SP2) funkcijų paketą
        
         Atsisiųskite "Microsoft „SQL Server“ 2012" 4 pakeitimų paketo (SP4) funkcijų paketą

Sprendimo būdas

Jei turite RBS įdiegtą "„SQL Server“ 2012" arba "„SQL Server“ 2014", kurioje pataisa neįdiegta, galite atlikti šiuos sprendimo būdus:

  1. SSMS atidarykite scenarijų iš 3 veiksmo ir prisijunkite prie „SQL Server“ egzemplioriaus, kuriame yra RBS kliento duomenų bazė, kuriai norite taikyti pataisą.

  2. Scenarijuje pakeiskite eilutę "your_RBS_client_database" faktiniu RBS kliento duomenų bazės pavadinimu.

  3. Paleiskite scenarijų, kad pritaikytumėte pataisą.

    Naudokite [your_RBS_client_database]
    grįžti

    if object_id(N'mssqlrbs_resources.rbs_sp_count') is not null
        Drop Procedure mssqlrbs_resources.rbs_sp_count
    grįžti

    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
    )
    kaip
    pradėti

        deklaruoti @type tinyint,
                @secondsUsed bitas,
                @seconds plūduriuojantis

        deklaruoti @maxDays int = 10;

        jei nėra (
            Pasirinkti * iš mssqlrbs_resources.rbs_internal_counters
                where operation = @operation and object = @object and description = @description
        )
            raiserror (N'Vidinė klaida RBS. Bandykite suskaičiuoti neleistiną efektyvumo skaitiklį. Skaitiklis: <%d>.<%d>.<%s>.',
                16, 101, @operation, @object, @description)

        pasirinkti
                @type = tipas,
                @secondsUsed = seconds_used
            nuo
                mssqlrbs_resources.rbs_internal_counters
            kur:
                operacija = @operation ir
                objektas = @object and
                description = @description

        jei @object != 0
        pradėti
            if @value is null
                raiserror (N'Vidinė klaida RBS. Nenurodyta efektyvumo skaitiklio <%d> reikšmė.<%d>.<%s>.',
                    16, 103, @operation, @object, @description)
        pabaiga

        jei @secondsUsed = 1
        pradėti
            Jei (@start_time is null)
                raiserror (N'Vidinė klaida RBS. Veikimo skaitiklio <%d> pradžios laikas nenurodytas.<%d>.<%s>.',
                    16, 102, @operation, @object, @description)

            set @end\_time = isnull(@end_time, getutcdate())

            jei (@start_time >@end\_time)
                raiserror (N'Vidinė klaida RBS. Pradžios laikas yra po pabaigos laiko. Skaitiklis: <%d>.<%d>.<%s>.',
                    16, 104, @operation, @object, @description)

            if (datediff(day, @start\_time@end\_time)>, =@maxDays)
            pradėti
                 @seconds set = convert(float, datediff(second, @start\_time,@end\_time))
            pabaiga
            kitu atveju
            pradėti
                SET @seconds = CONVERT(float, DateDiff(millisecond, @start\_time, @end\_time)) / 1000
            pabaiga
        pabaiga

        atnaujinti mssqlrbs_resources.rbs_internal_counters
            nustatyti
                count = count + 1,
                value = value + @value,
                squared_value = squared_value + kvadratas(@value),
                min_value = case
                                Kai min_value yra Null, tada @value
                                kai (@value < min_value) tada @value
                                kitu atveju min_value
                            pabaiga,
                max_value = case
                                Kai max_value yra neapibrėžta @value
                                kai (@value > max_value) tada @value
                                kitu atveju max_value
                            pabaiga,
                last_value = @value,
                sekundės = sekundės + , @seconds
                squared_seconds = squared_seconds + kvadratas(@seconds),
                min_seconds = case
                                Kai min_seconds yra Null, tada @seconds
                                kai (@seconds < min_seconds) tada @seconds
                                kitu atveju min_seconds
                            pabaiga,
                max_seconds = case
                                Kai max_seconds yra neapibrėžta reikšmė, tada @seconds
                                kai (@seconds > max_seconds) tada @seconds
                                kitu atveju max_seconds
                            pabaiga,
                last_seconds = @seconds,
                last_update_time = getutcdate(),
                last_message = @message
            kur:
                operacija = @operation ir
                objektas = @object and
                description = @description

    pabaiga
    grįžti

Būsena

„„Microsoft““ patvirtino, kad tai yra „„Microsoft““ produktų, išvardytų dalyje „Taikoma“, problema.