Symptom
Anta att du använder Microsoft SQL Server 2012 eller SQL Server 2014. När du kör Remote BLOB Storage (RBS) Maintainer misslyckas RBS Maintainer-verktyget och du får följande felmeddelande:
Obs
Starta underhållsansvariga.
Starta skräpinsamling.
Starta referenssökning.
Referensskanningen är klar för den här databasen.
Skannade 113 blobbar. Borttagna 0 blobbar i intervallet 0x000000000000000000000000(exklusivt) till 0x00000000000000b600000002(inklusive).
Uppgiften är slutförd. Bearbetade 1 arbetsenheter totalt. 0 Arbetsenheter var ofullständiga.
Starta spridning av borttagning.
Inget arbete är tillgängligt för tillfället.
Andra klienter, processer eller trådar kanske arbetar med andra uppgifter.
Hoppa över den aktuella arbetsenheten på grund av ett fel. Mer information finns i RBS-underhållsloggen.
[..]
Uppgiften är slutförd. Bearbetade 102 arbetsenheter totalt. 101 arbetsenheter var ofullständiga. Behövde ta bort 0 blobbar. Lyckades ta bort 0 blobbar, 0 blobbar hittades inte i blobarkivet.
Uppgiften är slutförd.
Uppgiften är slutförd.
När du använder Profiler för att spåra problemet får du följande felmeddelande:
Obs
Msg 50000, nivå 16, tillstånd 0, procedur rbs_sp_rethrow_error, rad 38
RBS-fel. Ursprungligt fel: nummer 535, allvarlighetsgrad 16, tillstånd 0, procedur rbs_sp_count, rad 52,
Meddelande: Funktionen datumdiff resulterade i ett spill. Antalet datumdelar som avgränsar två datum-/tidsinstanser är för stort. Försök att använda datediff med en mindre exakt datepart.
Orsak
Det här problemet beror på att en fråga som kontrollerar tiden sedan den senaste körningen kan spilla när den konverterar ett värde till millisekunder. Det gör att frågan misslyckas och uppgiften avslutas utan att data bearbetas.
Lösning
Lösningen på det här problemet finns i den senaste nedladdningen av funktionspaket för RBS.msi. Om du redan har en befintlig installation av RBS rekommenderar vi att du kör skriptet i avsnittet "Tillfällig lösning" för att tillfälligt åtgärda problemet.
Ladda ned funktionspaketet Microsoft SQL Server 2014 Service Pack 2 (SP2)
Ladda ned funktionspaketet Microsoft SQL Server 2012 Service Pack 4 (SP4)
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 felsökningssteg:
I SSMS öppnar du skriptet från steg 3 och ansluter sedan till den SQL Server instans som är värd för RBS-klientdatabasen som du vill tillämpa korrigeringen på.
Ersätt strängen "your_RBS_client_database" med namnet på RBS-klientdatabasen i skriptet.
Kör skriptet för att tillämpa korrigeringen.
Använd [your_RBS_client_database]
gåom object_id(N'mssqlrbs_resources.rbs_sp_count') inte är Null
Släpp procedur mssqlrbs_resources.rbs_sp_count
gåskapa procedur 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
)
Som framgår av
börjaFörkunna @type Tinyint,
@secondsUsed bit,
@seconds rörlighetdeklarera @maxDays heltal = 10;
om det inte finns (
select * from mssqlrbs_resources.rbs_internal_counters
där operation = @operation och objekt = @object och beskrivning = @description
)
raiserror (N'Internt fel i RBS. Försök att räkna den ogiltiga prestandaräknaren. Räknare: <%d>.<%d>.<%s>."
16, 101, @operation, @object, @description)välja
@type = typ,
@secondsUsed = seconds_used
från
mssqlrbs_resources.rbs_internal_counters
där
operation = @operation och
objekt = @object och
beskrivning = @descriptionom @object != 0
börja
om @value är null
raiserror (N'Internt fel i RBS. Värdet har inte angetts för prestandaräknaren <%d>.<%d>.<%s>."
16, 103, @operation, @object, @description)
endom @secondsUsed = 1
börja
Om (@start_time är null)
raiserror (N'Internt fel i RBS. Starttid har inte angetts för prestandaräknaren <%d>.<%d>.<%s>."
16, 102, @operation, @object, @description)SET @end\_time = ISNULL(@end_time, GetUTCDATE())
Om (@start_time >@end\_time)
raiserror (N'Internt fel i RBS. Starttiden är efter sluttiden. Räknare: <%d>.<%d>.<%s>."
16, 104, @operation, @object, @description)If (DateDiff(dag, @start\_time, @end\_time)>= @maxDays)
börja
SET = CONVERT @seconds (float, datediff(second, @start\_time, @end\_time))
end
annars
börja
SET = CONVERT @seconds (FLOAT, DATEDIFF(MILLISECOND, @start\_time, @end\_time)) / 1000
end
enduppdatera mssqlrbs_resources.rbs_internal_counters
ange
antal = antal + 1,
värde = värde + @value,
squared_value = squared_value + fyrkant(@value),
min_value = kasus
när min_value är null då @value
när (@value < min_value) då @value
annars min_value
slutet,
max_value = kasus
när max_value är null då @value
när (@value > max_value) då @value
annars max_value
slutet,
last_value = @value,
sekunder = sekunder + @seconds,
squared_seconds = squared_seconds + fyrkant(@seconds),
min_seconds = kasus
när min_seconds är null då @seconds
När (@seconds < min_seconds) då @seconds
annars min_seconds
slutet,
max_seconds = kasus
när max_seconds är null då @seconds
när (@seconds > max_seconds) då @seconds
annars max_seconds
slutet,
last_seconds = @seconds,
last_update_time = getutcdate(),
last_message = @message
där
operation = @operation och
objekt = @object och
beskrivning = @descriptionend
gå
Status
Microsoft har bekräftat att detta är ett problem i de Microsoft-produkter som anges i avsnittet "Gäller".