Tenho um cluster do SQL Server 2022 Enterprise Edition com vários AGs.
Dois dos AGs consideram diferentes instâncias primárias. Ambos consideram suas secundárias legíveis e estão corretos em pensar assim.
Além de estar nessa configuração secundária legível, nada torna nenhum dos bancos de dados em nenhuma das instâncias somente leitura. Eles não são Grupos de Disponibilidade Básica.
Aqui está o choque: quando executo DBCC CHECKCATALOG
a segmentação de um banco de dados secundário legível enquanto estou conectado a uma instância que não é o primário desse banco de dados, a consulta falha assim
Msg 3906, Nível 16, Estado 8, Linha 1
Falha ao atualizar o banco de dados "DB NAME" porque o banco de dados é somente leitura.
mas DBCC CHECKDB
funciona muito bem!
Procurei muito, mas não encontrei nada útil sobre isso.
- Este problema no GitHub da Solução de Manutenção de Ola Hallengren é idêntico, mas não tem solução. Ola, em quem confio ser um especialista nisso, parece pensar que é um bug dele e não da Microsoft.
- Este commit do git sugere que seu autor, dan-andreistefan, já viu isso antes. Não encontrei nenhum problema ou PR correspondente. Dan surgiu do vazio e resolveu o problema .
- Além das limitações em BAGs, não consigo encontrar nada na documentação oficial do SQL Server sobre fazer verificações de integridade em AGs. Está apenas no guia de licenciamento.
Como posso depurar isso? Por que DBCC CHECKDB
, que é um superconjunto de DBCC CHECKCATALOG
, funcionaria onde DBCC CHECKCATALOG
falha?
Concordo que a documentação não é muito boa sobre isso.
Há vários lugares para começar: testar várias versões para ver se há uma versão principal ou diferença de CU, configurar sessões de eventos estendidas, um criador de perfil se você preferir isso ao XE, um depurador real, etc.
Este não é tão interessante quanto parece. Sim, logicamente
CHECKCATALOG
é executado como parte deCHECKDB
, no entanto, não há nada afirmando que os mesmos caminhos de código devem ser tomados.Por exemplo,
CHECKCATALOG
funcionará perfeitamente no SQL Server 2016, mas não funcionará no SQL Server 2017. Não há documentação oficial afirmando queCHECKCATALOG
funcionará, na maioria das vezes, apenasCHECKDB
funcionaCHECKDB
.Em versões mais recentes do SQL Server, aquelas que têm hekaton, havia um item que parecia ser adicionado ao caminho do código na
CHECKCATALOG
invocação específica que não existe noCHECKDB
caminho do código; ele tenta alterar fisicamente o banco de dados, e é por isso que ocorre o erro sobre falha na atualização do banco de dados.A resposta é porque eles usam dois caminhos de código diferentes, dependendo de qual item é invocado, onde um caminho de código tem alguns itens diferentes, o que inibe o uso em um banco de dados somente leitura.
O CheckdB foi oficialmente mencionado no TechCommunity Blogs .