Symptomen
Stel dat u Microsoft SQL Server 2012 of SQL Server 2014 gebruikt. Wanneer u Remote BLOB Storage (RBS) Maintainer uitvoert, mislukt het hulpprogramma RBS Maintainer en wordt het volgende foutbericht weergegeven:
Opmerking
Onderhoudstaken starten.
Beginnen met het ophalen van afval.
Referentiescan starten.
De verwijzingsscan voor deze database is voltooid.
113 blobs gescand. 0 blobs verwijderd in het bereik van 0x000000000000000000000000(exclusief) tot 0x00000000000000b600000002(inclusief).
Deze taak is beëindigd. In totaal 1 werkeenheden verwerkt. 0 Werkeenheden waren onvolledig.
Doorgifte van verwijderen starten.
Er is op dit moment geen werk beschikbaar.
Andere clients, processen of threads werken momenteel mogelijk aan andere taken.
De huidige werkeenheid overslaan vanwege een fout. Zie het logboek voor RBS-onderhoud voor meer informatie.
[..]
Deze taak is beëindigd. In totaal 102 werkeenheden verwerkt. 101 werkeenheden waren onvolledig. 0 blobs moeten worden verwijderd. Het verwijderen van 0 blobs is gelukt. Er zijn 0 blobs niet gevonden in het blobarchief.
Deze taak is beëindigd.
Deze taak is beëindigd.
Wanneer u Profiler gebruikt om het probleem te traceren, ontvangt u het volgende foutbericht:
Opmerking
Msg 50000, Level 16, State 0, Procedure rbs_sp_rethrow_error, Line 38
RBS-fout. Oorspronkelijke fout: Getal 535, Ernst 16, Toestand 0, Procedure rbs_sp_count, regel 52,
Bericht: De functie datediff heeft een overloop opgeleverd. Het aantal dateparts tussen twee datum/tijd-exemplaren is te groot. Probeer datediff te gebruiken met een minder nauwkeurig datumdeel.
Oorzaak
Dit probleem doet zich voor omdat een query die de tijd controleert sinds de laatste uitvoering, kan overlopen wanneer een waarde wordt geconverteerd naar milliseconden. Dit zorgt ervoor dat de query mislukt en de taak wordt beëindigd zonder dat de gegevens worden verwerkt.
Oplossing
De oplossing voor dit probleem is beschikbaar in de meest recente feature pack-download voor RBS.msi. Als u al een bestaande installatie van RBS hebt, raden wij u aan het script uit te voeren dat wordt geleverd in de sectie 'Tijdelijke oplossing' om het probleem tijdelijk op te lossen.
Het functiepakket van Microsoft SQL Server 2014 Service Pack 2 (SP2) downloaden
Het Microsoft SQL Server 2012 Service Pack 4 (SP4) feature pack downloaden
Tijdelijke oplossing
Als u een bestaande installatie van RBS op SQL Server 2012 of SQL Server 2014 hebt waarvoor de oplossing niet is geïnstalleerd, kunt u de volgende tijdelijke oplossing gebruiken:
Open in SSMS het script uit stap 3 en maak vervolgens verbinding met het SQL Server-exemplaar waarin de RBS-clientdatabase wordt gehost waarop u de correctie wilt toepassen.
Vervang in het script de tekenreeks 'your_RBS_client_database' door de werkelijke naam van de RBS-clientdatabase.
Voer het script uit om de oplossing toe te passen.
Gebruik [your_RBS_client_database]
gaals object_id(N'mssqlrbs_resources.rbs_sp_count') niet null is
procedure voor weghalen mssqlrbs_resources.rbs_sp_count
gacreate procedure mssqlrbs_resources.rbs_sp_count (
@operation kleinste,
@object smallint = 0,
@value bigint = null,
@start_time datetime = null,
@end_time datetime = null,
@description sysname = N'',
@message nvarchar(max) = null
)
net zo
beginnen@type declareer tinyint,
@secondsUsed beetje,
@seconds zwevend maken@maxDays declareer int = 10;
indien niet bestaat (
select * from mssqlrbs_resources.rbs_internal_counters
waarbij bewerking = @operation en object = @object en beschrijving = @description
)
raiserror (N'Internal error in RBS. Poging om ongeldige prestatiemeteritems mee te tellen. Teller: <%d>.<%d>.<%s>.",
16, 101, @operation, @object, @description)selecteren
@type = type,
@secondsUsed = seconds_used
uit
mssqlrbs_resources.rbs_internal_counters
waarbij
bewerking = @operation and
object = @object and
Beschrijving = @descriptionals @object != 0
beginnen
if @value is null
raiserror (N'Internal error in RBS. Waarde niet opgegeven voor prestatiemeteritem <%d>.<%d>.<%s>.",
16, 103, @operation, @object, @description)
endALS @secondsUsed = 1
beginnen
ALS (@start_time NULL IS)
raiserror (N'Internal error in RBS. Begintijd niet opgegeven voor prestatiemeteritem <%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. De begintijd valt na de eindtijd. Teller: <%d>.<%d>.<%s>.",
16, 104, @operation, @object, @description)if (datediff(dag, @start\_time, @end\_time)>= @maxDays)
beginnen
set @seconds = convert(float, datediff(seconde, @start\_time, @end\_time))
end
anders
beginnen
set @seconds = convert(float, datediff(milliseconde, @start\_time, @end\_time)) / 1000
end
endupdate mssqlrbs_resources.rbs_internal_counters
instellen
aantal = aantal + 1,
waarde = waarde + @value,
squared_value = squared_value + kwadraat(@value),
min_value = case
Als min_value null is, dan @value
Wanneer (@value < min_value) Then @value
anders min_value
einde,
max_value = case
Als max_value null is, dan @value
Wanneer (@value > max_value) Then @value
anders max_value
einde,
last_value = @value,
seconden = seconden + @seconds,
squared_seconds = squared_seconds + kwadraat(@seconds),
min_seconds = case
Als min_seconds null is, dan @seconds
wanneer (@seconds < min_seconds) dan @seconds
anders min_seconds
einde,
max_seconds = case
Als max_seconds null is, dan @seconds
Wanneer (@seconds > max_seconds) Then @seconds
anders max_seconds
einde,
last_seconds = @seconds,
last_update_time = getutcdate(),
last_message = @message
waarbij
bewerking = @operation and
object = @object and
Beschrijving = @descriptionend
ga
Status
Microsoft heeft bevestigd dat dit een probleem is bij de Microsoft-producten die worden vermeld in het gedeelte 'Van toepassing op'.