Symptomy

Załóżmy, że korzystasz z programu Microsoft SQL Server 2012 lub SQL Server 2014. Po uruchomieniu programu do zarządzania zdalnym magazynem obiektów BLOB (SPZ) narzędzie do konserwacji struktury SPZ kończy się niepowodzeniem i jest wyświetlany następujący komunikat o błędzie:

Rozpoczynanie zadań związanych z konserwacją. Uruchamianie kolekcji garbage. Rozpoczynanie skanowania odwołań. W tej bazie danych ukończono skanowanie odwołań. Przeskanowano 113 obiektów BLOB. Usunięto 0 obiektów blob z zakresu 0x000000000000000000000000 (z wyłączeniem) do 0x00000000000000b600000002 (włącznie). To zadanie zostało zakończone. Łączna liczba przetworzonych jednostek roboczych: 1. 0 jednostki robocze były niepełne. Rozpoczynanie propagacji usuwania. Obecnie nie są dostępne żadne prace. Inni Klienci, procesy lub wątki mogą obecnie pracować nad innymi zadaniami. Pomijanie bieżącej jednostki współpracy z powodu błędu. Aby uzyskać więcej informacji, zobacz Dziennik konserwacji struktury SPZ. [..] To zadanie zostało zakończone. Łączna liczba jednostek roboczych 102. 101 jednostki pracy były niekompletne. Potrzebne do usunięcia 0 obiektów BLOB. Pomyślnie usunięto 0 obiektów blob, nie odnaleziono 0 obiektów BLOB w magazynie obiektów BLOB. To zadanie zostało zakończone. To zadanie zostało zakończone.

W przypadku śledzenia problemu za pomocą profilera jest wyświetlany następujący komunikat o błędzie:

Msg 50000, poziom 16, stan 0, rbs_sp_rethrow_error procedura, błąd 38RBS wiersza. Oryginalny błąd: numer 535, ważność: 16, stan 0, rbs_sp_count procedura, linia 52, komunikat: funkcja DateDiff spowodowała przepełnienie. Liczba okresów rozdzielających dwa wystąpienia daty/godziny jest zbyt duża. Spróbuj użyć funkcji DateDiff z mniej dokładnym parametrem DatePart.

Przyczyna

Ten problem jest spowodowany tym, że zapytanie sprawdzające czas, przez jaki ostatnie wykonanie może przekroczyć, gdy konwertuje wartość do milisekund. Powoduje to, że kwerenda kończy się niepowodzeniem, a zadanie kończy się bez przetwarzania danych.

Rozwiązanie

Poprawka dotycząca tego problemu jest dostępna w najnowszym dodatku Feature Pack do pobrania dla SPZ. msi. Jeśli już masz istniejącą instalację SPZ, zalecamy uruchomienie skryptu podanego w sekcji "Obejście", aby tymczasowo rozwiązać ten problem.

Pobieranie pakietu funkcji dodatku Service Pack 2 (SP2) dla programu Microsoft SQL server 2014 Pobierz pakiet Feature Pack 4 (SP4) dla programu microsoft SQL Server 2012

Obejście

Jeśli masz istniejącą instalację SPZ na serwerze SQL Server 2012 lub SQL Server 2014, na którym nie zainstalowano tej poprawki, możesz wykonać następujące czynności obejściowe:

  1. W programie SSMS Otwórz skrypt z kroku 3, a następnie połącz się z wystąpieniem programu SQL Server obsługującym bazę danych klienta SPZ, do której chcesz zastosować poprawkę.

  2. W skrypcie Zamień ciąg "your_RBS_client_database" na rzeczywistą nazwę bazy danych klienta SPZ.

  3. Uruchom skrypt, aby zastosować poprawkę.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

Stan

Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych w sekcji "dotyczy".

Potrzebna dalsza pomoc?

Rozwijaj swoje umiejętności
Poznaj szkolenia
Uzyskuj nowe funkcje w pierwszej kolejności
Dołącz do niejawnych testerów firmy Microsoft

Czy te informacje były pomocne?

Jaka jest jakość tłumaczenia?
Co wpłynęło na Twoje wrażenia?

Dziękujemy za opinię!

×