Simptomi
Pretpostavimo da koristite Microsoft SQL Server 2012 ili SQL Server 2014. Kada pokrenete Remote BLOB Storage (RBS) Maintainer, alat za održavanje RBS-a ne funkcionira i prikazuje se sljedeća poruka o pogrešci:
Napomena
Pokretanje zadataka održavatelja.
Pokretanje odvoza smeća.
Pokretanje pregleda referenci.
Pregled referenci dovršen je za ovu bazu podataka.
Skenirano 113 blobova. Izbrisane su 0 blobova u rasponu od 0x000000000000000000000000(isključivo) do 0x00000000000000b600000002(uključivo).
Zadatak je završio. Ukupno obrađena 1 radna jedinica. 0 Radne jedinice bile su nedovršene.
Pokretanje propagacije brisanja.
Trenutno ne postoji nijedan rad.
Možda drugi klijenti, procesi ili niti trenutno rade na drugim zadacima.
Preskakanje trenutne jedinice rada zbog pogreške. Dodatne informacije potražite u zapisniku održavatelja RBS-a.
[..]
Zadatak je završio. Obrađene ukupno 102 radne jedinice. 101 radna jedinica bila je nedovršena. Potrebno je za brisanje 0 blobova. Uspjelo je brisanje 0 blobova, 0 blobova nije pronađeno u spremištu blobova.
Zadatak je završio.
Zadatak je završio.
Kada problem pratite pomoću profilera, prikazuje vam se sljedeća poruka o pogrešci:
Napomena
poruka 50000, razina 16, stanje 0, postupak rbs_sp_rethrow_error, redak 38
RBS pogreška. Izvorna pogreška: broj 535, ozbiljnost problema 16, stanje 0, procedura rbs_sp_count, redak 52,
Poruka: Funkcija datediff uzrokovala je prelijevanje. Broj dijelova datuma koji odjeljuju dvije instance datuma/vremena je prevelik. Pokušajte koristiti datediff s manje preciznim dijelom datuma.
Uzrok
Taj se problem pojavljuje jer upit koji provjerava vrijeme od posljednjeg izvršavanja može prekoračiti kada vrijednost pretvori u milisekunde. Zbog toga upit ne uspijeva i zadatak završava bez obrade podataka.
Rješenje
Rješenje tog problema dostupno je u preuzimanju najnovijeg paketa značajki za RBS.msi. Ako već imate postojeću instalaciju RBS-a, preporučujemo da pokrenete skriptu navedenu u odjeljku "Zaobilazno rješenje" da biste privremeno riješili problem.
Preuzimanje paketa značajki za Microsoft SQL Server 2014 Service Pack 2 (SP2)
Preuzimanje paketa značajki za Microsoft SQL Server 2012 Service Pack 4 (SP4)
Zaobilazno rješenje
Ako imate postojeću instalaciju RBS-a u sustavu SQL Server 2012 ili SQL Server 2014 na kojoj nije instaliran popravak, možete koristiti sljedeće korake iz zaobilaznog rješenja:
U SSMS-u otvorite skriptu iz trećeg koraka, a zatim se povežite s instancom sustava SQL Server koja hostira bazu podataka RBS klijenta na koju želite primijeniti popravak.
U skripti zamijenite niz "your_RBS_client_database" stvarnim nazivom klijentske baze podataka RBS-a.
Pokrenite skriptu da biste primijenili popravak.
Koristite [your_RBS_client_database]
Idite naako object_id(N'mssqlrbs_resources.rbs_sp_count') is not null
Procedura ispuštanja mssqlrbs_resources.rbs_sp_count
Idite nacreate 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
)
kao što je
početakdeclare @type tinyint,
@secondsUsed bit,
@seconds floatdeclare @maxDays int = 10;
ako ne postoji (
select * from mssqlrbs_resources.rbs_internal_counters
gdje je operacija = @operation and object = @object and description = @description
)
raiserror (N'interna pogreška u RBS-u. Pokušaj brojanja brojača performansi koji nije valjan. Brojač: <%d>.<%d>.<%s>.',
16, 101, @operation, , @object@description)odabir
@type = vrsta,
@secondsUsed = seconds_used
iz
mssqlrbs_resources.rbs_internal_counters
pri čemu su
operacija = @operation i
objekt = @object i
Opis = @descriptionako @object je != 0
početak
ako @value je null
raiserror (N'interna pogreška u RBS-u. Vrijednost nije navedena za brojač <performansi %d>.<%d>.<%s>.',
16, 103, @operation, @object, @description)
krajako @secondsUsed = 1
početak
if (@start_time je null)
raiserror (N'interna pogreška u RBS-u. Vrijeme početka nije navedeno za brojač <performansi %d>.<%d>.<%s>.',
16, 102, @operation, @object, @description)set @end\_time = isnull(@end_time, getutcdate())
if (@start_time >@end\_time)
raiserror (N'interna pogreška u RBS-u. Vrijeme početka je nakon završetka. Brojač: <%d>.<%d>.<%s>.',
16, 104, @operation, @object, @description)if (DATEDIFF(dan, @start\_time, @end\_time)>= @maxDays)
početak
SET @seconds = CONVERT(FLOAT; DATEDIFF(sekunda; @start\_time; ; @end\_time))
kraj
inače
početak
SET @seconds = CONVERT(FLOAT, DATEDIFF(milisekunda, @start\_time, @end\_time)) / 1000
kraj
krajupdate mssqlrbs_resources.rbs_internal_counters
postavljanje
broj = broj + 1,
Vrijednost = vrijednost + @value,
squared_value = squared_value + kvadrat(@value),
min_value = velika i mala slova
Kada je min_value null, tada je vrijednost @value
kada (@value < min_value) tada @value
Else min_value
kraj,
max_value = velika i mala slova
Kada je max_value null tada @value
kada (@value > max_value) tada @value
Else max_value
kraj,
last_value = @value,
sekunde = sekunde + @seconds,
squared_seconds = squared_seconds + kvadrat(@seconds),
min_seconds = velika i mala slova
Kada je min_seconds null, tada je vrijednost @seconds
kada (@seconds < min_seconds) tada @seconds
Else min_seconds
kraj,
max_seconds = velika i mala slova
Kada je max_seconds null, tada @seconds
kada (@seconds > max_seconds) tada @seconds
Else max_seconds
kraj,
last_seconds = , @seconds
last_update_time = getutcdate(),
last_message = @message
pri čemu su
operacija = @operation i
objekt = @object i
Opis = @descriptionkraj
Idite na
Status
Microsoft je potvrdio da je to problem u Microsoftovim proizvodima koji su navedeni u odjeljku „Odnosi se na“.