Sintomas
Suponha que você esteja usando o Microsoft SQL Server 2012 ou o SQL Server 2014. Quando você executa o Mantenedor do RBS (Remote BLOB Storage), a ferramenta Mantenedor do RBS falha e você recebe a seguinte mensagem de erro:
Observação
Iniciando tarefas de mantenedor.
Iniciando a coleta de lixo.
Iniciando a verificação de referência.
A verificação de referência foi concluída para esse banco de dados.
113 blobs verificados. Excluído 0 blobs no intervalo de 0x000000000000000000000000(exclusivo) a 0x00000000000000b600000002(inclusivo).
Esta tarefa terminou. Processado 1 total de unidades de trabalho. 0 As unidades de trabalho estavam incompletas.
Iniciando a propagação de 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 atual de trabalho devido a um erro. Para obter mais informações, consulte o log do mantenedor do RBS.
[..]
Esta tarefa terminou. Processadas 102 unidades de trabalho no total. 101 unidades de trabalho estavam incompletas. Necessário excluir 0 blobs. Êxito na exclusão de 0 blobs, 0 blobs não foram encontrados no repositório de blobs.
Esta tarefa terminou.
Esta tarefa terminou.
Ao usar o Profiler para rastrear o problema, você recebe a seguinte mensagem de erro:
Observação
Msg 50000, Nível 16, Estado 0, Procedimento rbs_sp_rethrow_error, Linha 38
Erro de RBS. Erro original: número 535, gravidade 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 é muito grande. Tente usar datediff com uma datepart menos precisa.
Causa
Esse problema ocorre porque uma consulta que verifica o tempo desde a última execução pode estourar quando converte 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 pacote de recursos 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.
Baixe o Microsoft SQL Server 2014 Service Pack 2 (SP2) Feature Pack
Baixe o Microsoft SQL Server 2012 Service Pack 4 (SP4) Feature Pack
Solução alternativa
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 da etapa 3 e 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 string "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]
váif object_id(N'mssqlrbs_resources.rbs_sp_count') is not null
procedimento DROP mssqlrbs_resources.rbs_sp_count
váProcedimento de criação 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 pouco,
@seconds flutuadordeclare @maxDays int = 10;
if not exists (
select * from mssqlrbs_resources.rbs_internal_counters
where operation = @operation and object = @object and description = @description
)
raiserror (N'Erro interno na EDR. Tente contar o contador de desempenho inválido. Contador: <%d>.<%d>.<%s>.',
16, 101, @operation, @object, @description)Select
@type = type,
@secondsUsed = seconds_used
de
mssqlrbs_resources.rbs_internal_counters
onde
operação = @operation e
object = @object e
descrição = @descriptionif @object != 0
começar
if @value is null
raiserror (N'Erro interno na EDR. Valor não especificado para o contador de <desempenho %d>.<%d>.<%s>.',
16, 103, @operation, @object, @description)
fimse @secondsUsed = 1
começar
if (@start_time is null)
raiserror (N'Erro interno na EDR. 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())
if (@start_time >@end\_time)
raiserror (N'Erro interno na EDR. A hora de início é após a hora de término. Contador: <%d>.<%d>.<%s>.',
16, 104, @operation, @object, @description)if (datediff(day, @start\_time, @end\_time)>= @maxDays)
começar
set @seconds = convert(float, datediff(second, @start\_time, @end\_time))
fim
else
começar
set @seconds = convert(float, datediff(millisecond, @start\_time, @end\_time)) / 1000
fim
fimAtualizar mssqlrbs_resources.rbs_internal_counters
definir
contagem = contagem + 1,
valor = valor + @value,
squared_value = squared_value + quadrado(@value),
min_value = caso
Quando min_value é nulo, @value
quando (@value < min_value) então @value
outras min_value
fim,
max_value = case
Quando max_value é nulo, então @value
quando (@value > max_value) então @value
max_value
fim,
last_value = @value,
segundos = segundos + @seconds,
squared_seconds = squared_seconds + quadrado(@seconds),
min_seconds = case
Quando min_seconds é nulo, @seconds
quando (@seconds < min_seconds) então @seconds
outras min_seconds
fim,
max_seconds = caso
Quando max_seconds é nulo, @seconds
quando (@seconds > max_seconds) então @seconds
outras max_seconds
fim,
last_seconds = @seconds,
last_update_time = getutcdate(),
last_message = @message
onde
operação = @operation e
object = @object e
descrição = @descriptionfim
vá
Status
A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na seção "Aplica-se a".