Symptom

Anta att du använder Microsoft SQL Server 2012 eller SQL Server 2014. När du kör tjänsten Remote BLOB Storage (RBS) behålls inte verktyget RBS-underhåll och du får följande fel meddelande:

Starta underhålls aktiviteter. Startar skräp insamling. Startar referens sökning. Referens sökning är klar för den här databasen. Skannade 113-blob. Borttagna 0 blobbar i intervallet 0x000000000000000000000000 (exklusivt) till 0x00000000000000b600000002 (inklusive). Uppgiften har avslut ATS. 1 arbets enheter totalt. 0 arbets enheter var ofullständiga. Påbörja borttagning av spridningen. Inget arbete är tillgängligt för närvarande. Andra klienter, processer eller trådar kan arbeta med andra aktiviteter just nu. Hoppa över den aktuella arbets enheten på grund av ett fel. Mer information finns i loggen för RBS-underhåll. [..] Uppgiften har avslut ATS. Bearbetade arbets enheter totalt för 102. 101 arbets enheter var ofullständiga. Behövs för att ta bort 0 blobbar. Det gick inte att ta bort 0 blobbar, 0 blobbar hittades inte i BLOB-arkivet. Uppgiften har avslut ATS. Uppgiften har avslut ATS.

När du använder profileraren för att spåra problemet får du följande fel meddelande:

Msg 50000, Level 16, State 0, procedur rbs_sp_rethrow_error, Line 38RBS error. Ursprungligt fel: nummer 535, allvarlighets grad 16, tillstånd 0, procedur rbs_sp_count, rad 52, meddelande: funktionen DateDiff orsakade spill. Antalet DatumDel som avgränsar två datum/tid-instanser är för stora. Försök använda DateDiff med en mindre exakt DatumDel.

Orsak

Det här problemet beror på att en fråga som kontrollerar tiden sedan den senaste körningen kan spilla när ett värde konverteras till millisekunder. Det här orsakar att frågan Miss lyckas och att uppgiften avslutas utan att data bearbetas.

Lösning

Korrigeringen för det här problemet är tillgänglig i den senaste versionen av Feature Pack för RBS. msi. Om du redan har en befintlig installation av RBS rekommenderar vi att du kör skriptet i "lösning" för att tillfälligt åtgärda problemet.

Ladda ned Microsoft SQL server 2014 Service Pack 2 (SP2) Feature Pack Ladda ned microsoft SQL Server 2012 Service Pack 4 (SP4) Feature Pack

Lösning

Om du har en befintlig installation av RBS på SQL Server 2012 eller SQL Server 2014 som inte har korrigeringen installerad kan du använda följande lösnings steg:

  1. I SSMS öppnar du skriptet från steg 3 och ansluter sedan till SQL Server-instansen med den RBS-klient databas som du vill tillämpa korrigeringen på.

  2. I skriptet ersätter du strängen "your_RBS_client_database" med det faktiska namnet på RBS-klientens databas.

  3. Kör skriptet för att tillämpa korrigeringen.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

Status

Microsoft har bekräftat att det här är ett problem i Microsoft-produkterna som nämns i "gäller".

Behöver du mer hjälp?

Utöka dina kunskaper

UTFORSKA UTBILDNING >

Få nya funktioner först

ANSLUT TILL MICROSOFT INSIDERS >

Hade du nytta av den här informationen?

Hur nöjd är du med språkkvaliteten?
Vad påverkade din upplevelse?

Tack för din feedback!

×