Tenho tabela particionada com vários índices, todos estão alinhados e apenas um não. Isso ocorre porque ele controla a exclusividade por meio de mais de uma partição:
CREATE UNIQUE NONCLUSTERED INDEX [ix_uq_fltr_IdTransazioneRettificata_BM] ON [dbo].[Transazioni]
(
[IdTransazioneRettificata] ASC
)
WHERE ([id]>(10000000000.) AND [StatusFatturazione]<>(15) AND [IdTransazioneRettificata] IS NOT NULL)
ON [PRIMARY]
O erro ocorre onde faço uma exclusão simples:
select id
into #t
from billing_prod2.dbo.Transazioni
where DataInserimento = '20240229'
and Data = '20240201'
--(162.321 rows affected)
alter table #t add primary key(id)
delete t
from billing_prod2.dbo.Transazioni t
join #t tt
on t.id = tt.id
A saída do SSMS:
Msg 3624, Nível 20, Estado 1, Linha 11 Uma verificação de declaração do sistema falhou. Verifique o log de erros do SQL Server para obter detalhes. Normalmente, uma falha de asserção é causada por um bug de software ou corrupção de dados. Para verificar se há corrupção no banco de dados, considere executar DBCC CHECKDB. Se você concordou em enviar dumps para a Microsoft durante a configuração, um mini dump será enviado à Microsoft. Uma atualização pode estar disponível na Microsoft no Service Pack mais recente ou em um Hotfix do Suporte Técnico. Msg 596, Nível 21, Estado 1, Linha 10 Não é possível continuar a execução porque a sessão está no estado kill. Msg 0, Nível 20, Estado 0, Linha 10 Ocorreu um erro grave no comando atual. Os resultados, se existirem, deveriam ser descartados.
A saída do log de erros:
Erro: 17065, Gravidade: 16, Estado: 1. Asserção do SQL Server: Arquivo: <"cxrowset.cpp">, linha = 2026 Asserção com falha = 'cstePrefix >= 1' O intervalo está sem prefixo na coluna de ID da partição. Este erro pode estar relacionado ao tempo. Se o erro persistir após a nova execução da instrução, use DBCC CHECKDB para verificar a integridade estrutural do banco de dados ou reinicie o servidor para garantir que as estruturas de dados na memória não estejam corrompidas. Erro: 3624, Gravidade: 20, Estado: 1. Falha na verificação de declaração do sistema. Verifique o log de erros do SQL Server para obter detalhes. Normalmente, uma falha de asserção é causada por um bug de software ou corrupção de dados. Para verificar se há corrupção no banco de dados, considere executar DBCC CHECKDB. Se você concordou em enviar dumps para a Microsoft durante a configuração, um mini dump será enviado à Microsoft.
Há também um arquivo de despejo que é longo o suficiente, mas se isso ajudar, posso colá-lo também.
Nada disso diz claramente qual índice tem problemas.
DBCC CHECKDB
não diz nada,
dbcc checktable('dbo.transazioni') with NO_INFOMSGS, ALL_ERRORMSGS
não diz nada.
A única coisa que eu poderia imaginar seria um índice que não é usado com frequência, caso contrário mais erros seriam relatados no log de erros, então comecei com este, não alinhado e menos usado.
Depois de descartá-lo, o erro desapareceu, então o problema realmente estava naquele índice não alinhado.
Alguém pode explicar isso?
O banco de dados tem TDE habilitado.
Microsoft SQL Server 2019 (RTM-CU22-GDR) (KB5029378) - 15.0.4326.1 (X64) 18 de agosto de 2023 14:05:15 Copyright (C) 2019 Microsoft Corporation Standard Edition (64 bits) no Windows Server 2016 Datacenter 10.0 ( Build 14393: ) (Hipervisor)
Isso foi corrigido no CU 24 - corrija o sistema ( CU25 foi lançado ). Se isso continuar acontecendo após a correção, uma vez que já foi identificado como um defeito, você deverá abrir um caso com o Suporte da Microsoft.