Sintomas
Suponha que você esteja usando o Microsoft SQL Server 2012 ou o SQL Server 2014. Quando você executa o mantenedor do armazenamento de BLOB Remoto (RBS), a ferramenta de mantenedor do RBS falha e você recebe a seguinte mensagem de erro:
Iniciando tarefas do mantenedor. Iniciando a coleta de lixo. Iniciando a verificação de referência. A verificação de referência está completa para este banco de dados. BLOBs digitalizados do 113. BLOBs 0 excluídos no intervalo de 0x000000000000000000000000 (exclusivo) a 0x00000000000000b600000002 (inclusivo). Esta tarefa foi encerrada. Um total de 1 unidade de trabalho foi processado. 0 unidades de trabalho estavam incompletas. Iniciando a propagação da exclusão. Nenhum trabalho está disponível no momento. Outros clientes, processos ou threads podem estar trabalhando em outras tarefas no momento. Ignorando a unidade de trabalho atual devido a um erro. Para obter mais informações, consulte o log do mantenedor do RBS. [..] Esta tarefa foi encerrada. Total de 102 unidades de trabalho processadas. 101 unidades de trabalho estavam incompletas. Necessário para excluir BLOBs 0. Êxito na exclusão de BLOBs 0, 0 BLOBs não foram encontrados no repositório de BLOB. Esta tarefa foi encerrada. Esta tarefa foi encerrada.
Ao usar o gerador de perfil para rastrear o problema, você recebe a seguinte mensagem de erro:
MSG 50000, nível 16, estado 0, procedimento rbs_sp_rethrow_error, erro de 38RBS de linha. Erro original: número 535, severidade 16, estado 0, procedimento rbs_sp_count, linha 52, mensagem: a função datediff resultou em um estouro. O número de dateParts separando duas instâncias de data/hora é muito grande. Tente usar DateDiff com um datepart menos preciso.
Causa
Esse problema ocorre porque uma consulta que verifica o tempo desde a última execução pode exceder ao converter um valor em milissegundos. Isso faz com que a consulta falhe e a tarefa termine sem processar os dados.
Resolução
A correção para esse problema está disponível no download do Feature Pack mais recente para RBS. msi. Se você já tiver uma instalação existente do RBS, recomendamos que execute o script fornecido na seção "solução alternativa" para corrigir temporariamente o problema.
Baixar o pacote de recursos do Microsoft SQL server 2014 Service Pack 2 (SP2) baixar o pacote de recursos do microsoft SQL Server 2012 Service Pack 4 (SP4)
Solução alternativa
Se você tiver uma instalação existente do RBS no SQL Server 2012 ou no SQL Server 2014 que não tenha a correção instalada, você pode usar as seguintes etapas de solução alternativa:
-
Em SSMS, abra o script da etapa 3 e, em seguida, conecte-se à instância do SQL Server que hospeda o banco de dados do cliente RBS ao qual você deseja aplicar a correção.
-
No script, substitua a cadeia de caracteres "your_RBS_client_database" pelo nome real do banco de dados do cliente RBS.
-
Execute o script para aplicar a correção.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
A Microsoft confirmou que este é um problema nos produtos Microsoft listados na seção "Aplicável a".