CORREÇÃO: Erro ao executar o mantenedor EDR no SQL Server 2012 ou 2014 do SQL Server

Sintomas

Suponha que você esteja usando o Microsoft SQL Server 2012 ou 2014 do SQL Server. Quando você executa o mantenedor armazenamento de BLOB remoto (EDR), a ferramenta de EDR mantenedor falha e você recebe a seguinte mensagem de erro:

Iniciando tarefas mantenedor.
Iniciando coleta de lixo.
Iniciando verificação de referência.
Verificação de referência foi concluída neste banco de dados.
113 blobs digitalizados. Excluído 0 blobs no intervalo de 0x000000000000000000000000(exclusive) para 0x00000000000000b600000002(inclusive).
Esta tarefa foi concluída. Processada 1 total de unidades de trabalho. 0 unidades de trabalho estavam incompletas.
Iniciando a propagação de exclusão.
Nenhum trabalho está disponível no momento.
Outros clientes, processos ou segmentos podem estar trabalhando atualmente em outras tarefas.
Ignorando a unidade atual de trabalho devido a um erro. Para obter mais informações, consulte o log de EDR mantenedor.
[..]
Esta tarefa foi concluída. Processado 102 unidades de trabalho total. 101 unidades de trabalho estavam incompletas. Necessário para excluir 0 blobs. Êxito na exclusão de blobs 0, 0 blobs não foram encontrados no armazenamento de blob.
Esta tarefa foi concluída.
Esta tarefa foi concluída.


Quando você usar o Profiler para rastrear o problema, você recebe a seguinte mensagem de erro:

Msg 50000, nível 16, estado 0, rbs_sp_rethrow_error procedimento, linha 38
Erro de EDR. Erro original: Número 535, gravidade 16, estado 0, rbs_sp_count procedimento, 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 decorrido desde a última execução pode estourar quando ele converte um valor em milissegundos. Isso faz com que a consulta falhe e a tarefa para terminar sem o processamento dos dados.

Resolução

A correção para esse problema está disponível no download de recurso pack mais recente para RBS.msi. Se você já tem uma instalação existente do EDR, recomendamos que você execute o script que é fornecido na seção "Solução alternativa" para corrigir o problema temporariamente.

Baixe o Microsoft SQL Server 2014 Service Pack 2 (SP2) do pacote de recurso

Baixe o Microsoft SQL Server 2012 Service Pack 4 (SP4) o pacote de recursos

Solução alternativa

Se você tiver uma instalação existente do EDR no SQL Server 2012 ou 2014 do SQL Server que não tenha a correção instalada, você pode usar as seguintes etapas para solucionar esse problema:

  1. No SSMS, abra o script da etapa 3 e, em seguida, conectar-se à instância do SQL Server que hospeda o banco de dados de cliente de EDR que você deseja aplicar a correção.

  2. No script, substitua a cadeia de caracteres "your_RBS_client_database" pelo nome real do banco de dados de cliente EDR.

  3. 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_count
    go


    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
    )
    as
    begin

    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

    end
    go

Status

A Microsoft confirma que este é um problema em seus produtos listados na seção "Aplica-se a".

Precisa de mais ajuda?

Expanda suas habilidades
Explore o treinamento
Obtenha novos recursos primeiro
Ingressar no Microsoft Insider

Estas informações foram úteis?

Obrigado por seus comentários!

Agradecemos pelos seus comentários! Parece que pode ser útil conectar você a um de nossos agentes de suporte do Office.

×