Problembeschreibung
Gehen Sie davon aus, dass Sie Microsoft SQL Server 2012 oder SQL Server 2014 verwenden. Wenn Sie den RSP-Betreuer (Remote BLOB Storage) ausführen, schlägt das Tool RBS Maintainers fehl, und die folgende Fehlermeldung wird angezeigt:
Starten der Betreueraufgaben. Starten der Garbage Collection Starten des Referenz Scans Der Verweis Scan ist für diese Datenbank abgeschlossen. Gescannte 113-BLOBs. Gelöschte 0-BLOBs im Bereich von 0x000000000000000000000000 (exklusiv) bis 0x00000000000000b600000002 (inklusive). Diese Aufgabe wurde beendet. Verarbeitet 1 Arbeitseinheiten gesamt. 0 Arbeitseinheiten waren unvollständig. Starten der Löschweitergabe Zurzeit steht keine Arbeit zur Verfügung. Andere Clients, Prozesse oder Threads arbeiten möglicherweise derzeit an anderen Aufgaben. Die aktuelle Arbeitseinheit wird aufgrund eines Fehlers übersprungen. Weitere Informationen finden Sie im RBS-Betreuer-Protokoll. [..] Diese Aufgabe wurde beendet. Verarbeitete 102-Arbeitseinheiten insgesamt. 101-Arbeitseinheiten waren unvollständig. Erforderlich, um 0-BLOBs zu löschen. Erfolgreich beim Löschen von 0-BLOBs, 0-BLOBs wurden im BLOB-Speicher nicht gefunden. Diese Aufgabe wurde beendet. Diese Aufgabe wurde beendet.
Wenn Sie Profiler verwenden, um das Problem nachzuverfolgen, wird die folgende Fehlermeldung angezeigt:
Msg 50000, Ebene 16, Zustand 0, Prozedur rbs_sp_rethrow_error, Fehler "Zeile 38RBS. Ursprünglicher Fehler: Zahl 535, Schweregrad 16, Zustand 0, Prozedur rbs_sp_count, Zeile 52, Meldung: die DateDiff-Funktion führte zu einem Überlauf. Die Anzahl der dateparts, die zwei Datums-und Uhrzeit Instanzen voneinander trennen, ist zu groß. Versuchen Sie, DateDiff mit einem ungenaueren datepart-Punkt zu verwenden.
Ursache
Dieses Problem tritt auf, weil eine Abfrage, die die Zeit seit der letzten Ausführung überprüft, Überlauf kann, wenn Sie einen Wert in Millisekunden umwandelt. Dies bewirkt, dass die Abfrage fehlschlägt und die Aufgabe beendet wird, ohne dass die Daten verarbeitet werden.
Fehlerbehebung
Der Fix für dieses Problem ist im neuesten Feature Pack-Download für RBS. msi verfügbar. Wenn Sie bereits über eine vorhandene RBS-Installation verfügen, empfehlen wir, dass Sie das Skript ausführen, das im Abschnitt "Problemumgehung" bereitgestellt wird, um das Problem vorübergehend zu beheben.
Herunterladen des Microsoft SQL Server 2014 Service Pack 2 (SP2)-Funktionspaketsherunterladen des Microsoft SQL Server 2012 Service Pack 4 (SP4)-Funktionspakets
Problemumgehung
Wenn Sie über eine vorhandene RBS-Installation auf SQL Server 2012 oder SQL Server 2014 verfügen, auf der das Update nicht installiert ist, können Sie die folgenden Problem Umgehungs Schritte ausführen:
-
Öffnen Sie in SSMS das Skript aus Schritt 3, und stellen Sie dann eine Verbindung mit der SQL Server-Instanz her, die die RBS-Clientdatenbank hostet, auf die Sie den Fix anwenden möchten.
-
Ersetzen Sie im Skript die Zeichenfolge "your_RBS_client_database" durch den tatsächlichen Namen der RBS-Clientdatenbank.
-
Führen Sie das Skript aus, um den Fix anzuwenden.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 hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel genannten Microsoft-Produkten handelt.