Проблемы
Предположим, что вы используете Microsoft SQL Server 2012 или SQL Server 2014. При запуске средства обслуживания для хранения удаленных BLOB-файлов (СДРес) средство обслуживания СДРес завершает работу с ошибкой, и появляется следующее сообщение об ошибке:
Запуск задач обслуживания. Начинается сбор мусора. Начинается проверка ссылок. Проверка ссылок для этой базы данных завершена. Отсканированные большие двоичные объекты 113. Удаляются 0 больших двоичных объектов в диапазоне 0x000000000000000000000000 (Exclusive) до 0x00000000000000b600000002 (включительно). Эта задача завершена. Обработано 1 единиц рабочего количества. 0 единиц трудозатрат не завершены. Начало распространения удаления. В настоящее время нет доступных операций. Другие клиенты, процессы или потоки могут в настоящее время работать над другими задачами. Текущая единица работы пропускается из-за ошибки. Дополнительные сведения можно найти в журнале обслуживания СДРес. [..] Эта задача завершена. Обработано единиц трудозатрат в 102. 101 незавершенные единицы работы. Требуется для удаления 0 больших двоичных объектов. Удаление 0 больших двоичных объектов завершилось, но в хранилище больших двоичных объектов не было найдено 0 больших двоичных объектов. Эта задача завершена. Эта задача завершена.
При использовании профилировщика для отслеживания проблемы появляется следующее сообщение об ошибке:
Сообщение 50000, уровень 16, состояние 0, процедура rbs_sp_rethrow_error, строка 38RBS Error. Исходная ошибка: число 535, серьезность 16, состояние 0, процедура rbs_sp_count, строка 52, сообщение: функция DateDiff привела к переполнению. Количество дат, разделенных двумя экземплярами даты и времени, слишком велико. Попробуйте использовать DATEDIFF с менее точным набором функций.
Причина
Эта проблема возникает из-за того, что запрос, который проверяет время с момента последнего выполнения, может преобразовываться при преобразовании значения в миллисекунды. Это приведет к сбою запроса и завершению задачи без обработки данных.
Решение
Исправление для этой проблемы доступно в последней загрузке пакета дополнительных компонентов для СДРес. msi. Если у вас уже есть установленная версия СДРес, рекомендуется запустить сценарий, указанный в разделе Временное решение, чтобы временно устранить проблему.
Загрузка пакета дополнительных компонентов Microsoft SQL server 2014 с пакетом обновления 2 (SP2) загрузить пакет дополнительных компонентов microsoft SQL Server 2012 с пакетом обновления 4 (SP4)
Обходное решение
Если на сервере SQL Server 2012 или SQL Server 2014 уже установлен компонент СДРес, вы можете воспользоваться приведенными ниже инструкциями по устранению проблемы.
-
В среде SSMSE Откройте сценарий из шага 3, а затем подключитесь к экземпляру SQL Server, на котором размещена база данных клиента СДРес, к которой вы хотите применить исправление.
-
В сценарии замените строку "your_RBS_client_database" фактическим именем базы данных клиента СДРес.
-
Запустите сценарий, чтобы применить исправление.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
Статус
Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе "Применяется к".