JAVÍTÁS: Hiba az RBS Maintainer futtatásakor az SQL Server 2012-ben vagy az SQL Server 2014-ben

Hatókör
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)

Tünetek

Feltételezzük, hogy Microsoft SQL Server 2012-t vagy SQL Server 2014-et használ. A távoli blobtároló (RBS) karbantartó futtatásakor az RBS karbantartó eszköz futtatása sikertelen volt, és a következő hibaüzenet jelenik meg:

Megjegyzés

Fenntartói feladatok indítása.
    A szemétgyűjtés indítása.
        A referenciavizsgálat indítása.
            Az adatbázis referenciavizsgálata befejeződött.
            113 blobot vizsgáltunk be. Törölt 0 blobot a 0x000000000000000000000000(kizárólagos) és 0x00000000000000b600000002(a végpontokat is beleértve) tartományból.
        Ez a tevékenység befejeződött. Feldolgozott 1 munkaegység összesen. 0 A munkamennyiség hiányos volt.
        Törlésterjesztés indítása.
            Jelenleg nem érhető el munka.
            Előfordulhat, hogy más ügyfelek, folyamatok vagy szálak jelenleg más feladatokon dolgoznak.
            Az aktuális munkaegység kihagyása hiba miatt. További információért tekintse meg az RBS karbantartó naplóját.
    [..]
        Ez a tevékenység befejeződött. Feldolgozva: összesen 102 munkaegység. 101 munkaegység hiányos volt. 0 blob törléséhez van szükség. 0 blobot sikerült törölni, 0 blob nem található a blobtárolóban.
    Ez a tevékenység befejeződött.
Ez a tevékenység befejeződött.

Amikor a Profiler segítségével végzi a probléma nyomon követését, a következő hibaüzenet jelenik meg:

Megjegyzés

Msg 50000, Level 16, State 0, Procedure rbs_sp_rethrow_error, Line 38
RBS hiba. Eredeti hiba: 535-ös szám, 16-os súlyosság, 0. állapot, rbs_sp_count. eljárás, 52. sor,
Üzenet: A datediff függvény túlcsordulást eredményezett. Túl sok dátumrész választ el egymástól két dátum/idő előfordulást. Próbálja meg kevésbé pontos datediff paranccsal használni a datediff függvényt.

Ok

A problémát az okozza, hogy az utolsó végrehajtás óta eltelt időt ellenőrző lekérdezés túlcsordulhat, amikor egy értéket ezredmásodpercre alakít. Ennek következtében a lekérdezés meghiúsul, és a feladat az adatok feldolgozása nélkül befejeződik.

Megoldás

A probléma javítását a RBS.msi legújabb funkciócsomagjának letöltése tartalmazza. Ha már rendelkezik RBS telepítéssel, javasoljuk, hogy futtassa a "Kerülő megoldás" című szakaszban ismertetett parancsfájlt a probléma ideiglenes megoldásához.

A Microsoft SQL Server 2014 Service Pack 2 (SP2) funkciócsomag letöltése
        
         A Microsoft SQL Server 2012 Service Pack 4 (SP4) funkciócsomag letöltése

Kerülő megoldás

Ha az SQL Server 2012-re vagy SQL Server 2014-re telepített RBS-sel rendelkezik, amelyre még nincs telepítve a javítás, kövesse az alábbi kerülő megoldási lépéseket:

  1. Az SSMS-ben nyissa meg a 3. lépésben létrehozott parancsfájlt, majd csatlakozzon ahhoz az SQL Server-példányhoz, amely azt az RBS-ügyféladatbázist üzemelteti, amelyre alkalmazni szeretné a javítást.

  2. A parancsfájlban cserélje le a "your_RBS_client_database" karakterláncot az RBS ügyféladatbázis tényleges nevére.

  3. Futtassa a parancsprogramot a javítás alkalmazásához.

    [your_RBS_client_database] használata
    ugrás

    ha object_id(N'mssqlrbs_resources.rbs_sp_count') értéke nem null
        DROP eljárás mssqlrbs_resources.rbs_sp_count
    ugrás

    Létrehozási eljárás 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
    )
    Ahogy
    kezd

        deklarálja @type a tinyint,
                @secondsUsed bit,
                @seconds lebegtetés

        declare @maxDays int = 10;

        Ha nem létezik (
            select * from mssqlrbs_resources.rbs_internal_counters
                where operation = and @operation object = @object and description = @description
        )
            raiserror (N'Belső hiba az RBS-ben. Érvénytelen teljesítményszámláló számlálásának kísérlete. Számláló: <%d>.<%d>.<%s>.",
                16, 101, @operation, @object, @description)

        kiválasztás
                @type = típus,
                @secondsUsed = seconds_used
            Készlet:
                mssqlrbs_resources.rbs_belső_számlálók
            ahol
                operation = @operation and
                object = @object and
                description = @description

        ha @object != 0
        kezd
            if @value is null
                raiserror (N'Belső hiba az RBS-ben. A(z) %d> teljesítményszámlálóhoz <nincs megadva az érték.<%d>.<%s>.",
                    16, 103, @operation, @object, @description)
        vége

        Ha @secondsUsed = 1
        kezd
            HA (@start_time null)
                raiserror (N'Belső hiba az RBS-ben. A(z) %d> teljesítményszámlálóhoz <nincs megadva kezdő időpont.<%d>.<%s>.",
                    16, 102, @operation, @object, @description)

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

            HA (@start_time >@end\_time)
                raiserror (N'Belső hiba az RBS-ben. A kezdő időpont a befejezési időpont után esik. Számláló: <%d>.<%d>.<%s>.",
                    16, 104, @operation, @object, @description)

            HA (DateDiff(nap, @start\_time, = @end\_time)>@maxDays)
            kezd
                set @seconds = convert(lebegtetés; dátum.diff(második; @start\_time; @end\_time))
            vége
            máskülönben
            kezd
                set @seconds = convert(float; datediff(ezredmásodperc, @start\_time, / @end\_time)) 1000)
            vége
        vége

        Frissítés mssqlrbs_resources.rbs_internal_counters
            beállítás
                count = count + 1,
                Érték = Érték + , @value
                squared_value = squared_value + négyzet(@value),
                min_value = case
                                Ha a min_value Null akkor: @value
                                Mikor (@value < min_value), majd @value
                                különben min_value
                            végére,
                max_value = case
                                Ha max_value Null akkor: @value
                                Mikor (@value > max_value), majd @value
                                különben max_value
                            végére,
                last_value = , @value
                másodperc = másodperc + , @seconds
                squared_seconds = squared_seconds + négyzet(@seconds),
                min_seconds = case
                                Ha a min_seconds Null akkor: @seconds
                                When (@seconds < min_seconds) Then @seconds
                                különben min_seconds
                            végére,
                max_seconds = case
                                Ha max_seconds Null akkor: @seconds
                                Mikor (@seconds > max_seconds), majd @seconds
                                máskülönben max_seconds
                            végére,
                last_seconds = , @seconds
                last_update_time = getutcdate(),
                last_message = @message
            ahol
                operation = @operation and
                object = @object and
                description = @description

    vége
    ugrás

Állapot

A Microsoft megerősítette, hogy ez egy olyan probléma a Microsoft-termékekben, amely az „Érintett szolgáltatás“ című szakaszban van felsorolva.