Sintomas
Suponha que está a utilizar o Microsoft SQL Server 2012 ou SQL Server 2014. Quando você executa o mantenedor de armazenamento remoto de BLOB (RBS), a ferramenta de manutenção RBS falha e você recebe a seguinte mensagem de erro:
Nota
Iniciando as tarefas do Mantenedor.
Iniciando a coleta de lixo.
Iniciando a varredura de referência.
A Análise de Referência está concluída para esta base de dados.
Digitalizados 113 blobs. Foram eliminados 0 blobs no intervalo entre 0x000000000000000000000000(exclusivo) a 0x00000000000000b600000002(inclusive).
Esta tarefa terminou. Processou 1 unidade de trabalho no total. 0 Unidades de trabalho estavam incompletas.
Iniciando a propagação de exclusão.
Não existe trabalho disponível neste momento.
Outros clientes, processos ou threads podem estar atualmente a trabalhar noutras tarefas.
Ignorar a unidade de trabalho atual devido a um erro. Para obter mais informações, consulte o log do Mantenedor do RBS.
[..]
Esta tarefa terminou. Processou 102 unidades de trabalho no total. 101 unidades de trabalho estavam incompletas. Necessário para eliminar 0 blobs. Conseguiu excluir 0 blobs, 0 blobs não foram encontrados no repositório de blobs.
Esta tarefa terminou.
Esta tarefa terminou.
Quando você usa o Profiler para rastrear o problema, você receber a seguinte mensagem de erro:
Nota
Msg 50000, Nível 16, Estado 0, Procedimento rbs_sp_rethrow_error, Linha 38
Erro de RBS. 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 partes de data que separam duas instâncias de data/hora é demasiado grande. Tente usar datediff com uma parte de data menos precisa.
Causa
Este problema ocorre porque uma consulta que verifica o tempo desde a última execução pode exceder a capacidade quando converte um valor em milissegundos. Isto faz com que a consulta falhe e a tarefa termine sem processamento dos dados.
Resolução
A correção para este problema está disponível na transferência do pacote de funcionalidades 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.
Transferir o Microsoft SQL Server 2014 Service Pack 2 (SP2) Feature Pack
Transferir o Pacote de Funcionalidades do Microsoft SQL Server 2012 Service Pack 4 (SP4)
Solução
Se você tiver uma instalação existente do RBS no SQL Server 2012 ou SQL Server 2014 que não tenha a correção instalada, poderá usar as seguintes etapas de solução alternativa:
No SSMS, abra o script na etapa 3 e conecte-se à instância 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.
utilizar [your_RBS_client_database]
prosseguirse object_id(N'mssqlrbs_resources.rbs_sp_count') não for nulo
procedimento DROP mssqlrbs_resources.rbs_sp_count
prosseguirCriar procedimento 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
)
como
começardeclarar @type tinyint,
@secondsUsed bit,
@seconds flutuantedeclarar @maxDays int = 10;
se não existir (
select * from mssqlrbs_resources.rbs_internal_counters
onde operação = @operation e objeto = e @object descrição = @description
)
raiserror (erro N'Internal em RBS. Tentativa de contagem do contador de desempenho inválido. Contador: <%d>.<%d>.<%s>.»,
16, 101, @operation, @object, @description)selecionar
@type = tipo,
@secondsUsed = seconds_used
de
mssqlrbs_resources.rbs_internal_counters
em que
operação = @operation e
object = @object e
Descrição = @descriptionse @object != 0
começar
Se @value for nulo
raiserror (erro N'Internal em RBS. Valor não especificado para o contador <de desempenho %d>.<%d>.<%s>.»,
16, 103, @operation, @object, @description)
fimse @secondsUsed = 1
começar
se (@start_time é nulo)
raiserror (erro N'Internal em RBS. Hora de início não especificada para o contador <de desempenho %d>.<%d>.<%s>.»,
16, 102, @operation, @object, @description)set @end\_time = isnull(@end_time, getutcdate())
Se (@start_time >@end\_time)
raiserror (erro N'Internal em RBS. A hora de início é depois da hora de fim. Contador: <%d>.<%d>.<%s>.»,
16, 104, @operation, @object, @description)if (datediff(day, @start\_time, @end\_time)>= @maxDays)
começar
set @seconds = convert(float, datediff(segundo, @start\_time, @end\_time))
fim
outros
começar
set @seconds = convert(float, datediff(milissegundo, @end\_time))@start\_time, / 1000
fim
fimUpdate mssqlrbs_resources.rbs_internal_counters
definir
contagem = contagem + 1,
valor = valor + @value,
squared_value = squared_value + quadrado(@value),
min_value = maiúsculas/minúsculas
Quando min_value é nulo, @value
quando (@value < min_value) então @value
else min_value
fim,
max_value = maiúsculas/minúsculas
Quando max_value é nulo, @value
quando (@value > max_value) em seguida, @value
else max_value
fim,
last_value = @value,
segundos = segundos + @seconds,
squared_seconds = squared_seconds + quadrado(@seconds),
min_seconds = maiúsculas/minúsculas
Quando min_seconds é nulo, @seconds
quando (@seconds < min_seconds) em seguida, @seconds
else min_seconds
fim,
max_seconds = maiúsculas/minúsculas
Quando max_seconds é nulo, @seconds
quando (@seconds > max_seconds) em seguida, @seconds
else max_seconds
fim,
last_seconds = @seconds,
last_update_time = GetUtcDate(),
last_message = @message
em que
operação = @operation e
object = @object e
Descrição = @descriptionfim
prosseguir
Estado
A Microsoft confirmou que se trata de um problema nos produtos Microsoft listados na secção "Aplica-se a".