Sintomas
Considere o seguinte cenário:
-
Suponha que tem tabelas particionadas no Microsoft SQL Server e que fazem parte da Captura de Dados Alterados (CDC) ou da Replicação Transacional. Pode mudar ou sair da partição a partir destas tabelas.
-
Após o comutador de partição quando efetua operações de Linguagem de Manipulação de Dados (DML), poderá reparar que ocorre um EXCEPTION_ACCESS_VIOLATION e é gerado um ficheiro de captura de memória.
Data/Hora ***Captura de Pilha a ser enviada para FilePath\FileName
Data/Hora SqlDumpExceptionHandler: Process ProcessID gerou uma exceção fatal c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server está a terminar este processo.
Data/Hora * *****
Data/Hora *
Data/Hora * BEGIN STACK DUMP:
Date/Time *
Date/Time *
Date/Time *
Date/Time *
Date/Time * Exception Address = 000007FEE724BD80 Module(sqllang+000000000015BBD80)
Date/Time * Exception Code = c0000005 EXCEPTION_ACCESS_VIOLATION
Date/Time * Ocorreu uma Violação de Acesso ao ler o endereço 00000000000002A
Data/Hora * Memória Intermédia de Entrada 70 bytes
Data/Hora * sys.sp_MScdc_capture_job
Data/Hora *
Data/Hora ***Captura de Pilha a ser enviada para FilePath\FileName
Data/Hora SqlDumpExceptionHandler: O PID do Processo gerou uma exceção fatal c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server está a terminar este processo.
Data/Hora * *****
Data/Hora *
Data/Hora * INICIAR CAPTURA DA PILHA:
Data/Hora * Data/HoraSPID
Data/Hora *
Data/Hora *
Data/Hora * Endereço da Exceção = 000007FEE9D26640 Módulo(sqllang+0000000001586640)
Data/Hora * Código de Exceção = c0000005 EXCEPTION_ACCESS_VIOLATION
Data/Hora * Ocorreu uma Violação do Acesso ao ler o endereço 00000000000002A
Data/Hora * Memória Intermédia de Entrada 109 bytes -
Data/Hora * 16 00 00 00 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Data/Hora * s p _ r e p 01 00 00 00 0b 00 73 00 70 00 5f 00 72 00 65 00 70 00
Data/Hora * l c m d s & ô 6c 00 63 00 6d 00 64 00 73 00 00 00 00 00 26 04 04 f4
Data/Hora * & & ÿ 01 00 00 00 00 00 00 0 26 04 04 00 00 00 00 00 00 00 26 04 04 ff
Data/Hora * ÿÿÿ ¥ & ff ff ff 00 00 a5 0a 00 00 00 00 00 00 26 04 04 8f 13 00
Data/Hora * & & 00 00 00 26 04 04 00 00 00 00 00 00 00 26 04 04 20 a1 07
Data/Hora * 00
-
Se executar a seguinte consulta na tabela de destino, poderá reparar que o valor da coluna is_replicated será marcado como "1" para índice não agrupado, o que não está correto.
select index_id, partition_number, * from sys.system_internals_partition_columns pc with(nolock)
JOIN sys.partitions p with(nolock)
ON p.partition_id = pc.partition_id
where p.object_id = object_id ('PartitionTable')
order by 2
Resolução
Este problema foi corrigido nas seguintes atualizações cumulativas para SQL Server:
Atualização Cumulativa 1 para SQL Server 2017
Cada nova atualização cumulativa para SQL Server contém todas as correções e todas as correções de segurança incluídas na atualização cumulativa anterior. Consulte as atualizações cumulativas mais recentes para SQL Server:
Atualização cumulativa mais recente do SQL Server 2017
Estado
A Microsoft confirmou que este problema ocorre nos produtos da Microsoft listados na secção "Aplica-se a".
Referências
Saiba mais sobre a terminologiaque a Microsoft utiliza para descrever as atualizações de software.