AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 283570
Accepted
Aleksey Vitsko
Aleksey Vitsko
Asked: 2021-01-20 06:04:32 +0800 CST2021-01-20 06:04:32 +0800 CST 2021-01-20 06:04:32 +0800 CST

O SQL Server ficará offline se perder a conectividade de rede com a SAN onde residem os bancos de dados do sistema master e msdb?

  • 772

Eu tenho uma configuração onde 3 servidores combinados em Grupo de Disponibilidade

Todos os 3 servidores têm unidades SSD conectadas diretamente e os arquivos do banco de dados do usuário são hospedados nessas unidades

Mas os bancos de dados do sistema (master e msdb) de cada servidor no AG, estão hospedados em um dispositivo SAN que é acessado pela rede

Ainda não os moveu para unidades SSD locais

Perguntas:

Em uma situação hipotética em que a conexão de rede entre qualquer um dos servidores e o dispositivo SAN é perdida (cabo ruim, NIC ruim, alguma falha temporária de rede etc.),

  • O serviço do SQL Server nesse servidor ficará offline ou deixará de funcionar corretamente imediatamente?

  • Ou continua a funcionar por algum tempo se master e msdb foram armazenados em cache na RAM antes da rede cair?

sql-server availability-groups
  • 3 3 respostas
  • 476 Views

3 respostas

  • Voted
  1. J.D.
    2021-01-20T06:09:43+08:002021-01-20T06:09:43+08:00

    Você não pode depender dos bancos de dados do sistema sendo armazenados em cache na memória, o mais provável é que eles não sejam devido ao acesso menos frequente em relação aos bancos de dados do usuário.

    Acho que você terminará em um estado quase funcional, onde seus bancos de dados de usuários ainda estarão acessíveis, mas certos recursos da instância do servidor que dependem mastere msdblançarão alguns erros estranhos, dependendo do que mais seu servidor estiver fazendo. O serviço para sua instância do SQL Server deve continuar online (estado "iniciado"). Por exemplo, se você tiver algum trabalho de agente agendado , eu apostaria meu dinheiro (mas não poderia dizer com certeza sem testar) que eles encontrariam erros (silenciosamente ou aparentemente) ao tentar executar, pois a maioria de seus metadados é armazenados no banco de msdbdados.

    Se isso ocorrer, é melhor restaurar o acesso a esses bancos de dados do sistema o mais rápido possível para garantir 100% de confiabilidade em todos os recursos e funções.

    • 4
  2. Best Answer
    Ronaldo
    2021-01-20T11:06:26+08:002021-01-20T11:06:26+08:00

    Da documentação

    A seção Advertências do documento de opção de failover de detecção de integridade no nível de banco de dados do grupo de disponibilidade tem algumas informações que podem melhorar nossas suposições sobre a questão:

    É importante observar que a opção Database Level Heath Detection atualmente não faz com que o SQL Server monitore o tempo de atividade do disco e o SQL Server não monitora diretamente a disponibilidade do arquivo de banco de dados. Caso uma unidade de disco falhe ou fique indisponível, isso por si só não necessariamente acionará o grupo de disponibilidade para failover automático.

    Por exemplo, quando um banco de dados está ocioso sem transações ativas e sem ocorrência de gravações físicas, se alguns dos arquivos do banco de dados se tornarem inacessíveis, o SQL Server pode não fazer nenhuma E/S de leitura ou gravação nos arquivos e não pode alterar o status para esse banco de dados imediatamente, para que nenhum failover seja acionado. Mais tarde, quando ocorrer um ponto de verificação de banco de dados ou uma leitura ou gravação física para atender a uma consulta, o SQL Server poderá notar o problema do arquivo e reagir alterando o status do banco de dados e, posteriormente, o grupo de disponibilidade com detecção de integridade no nível do banco de dados definida em faria failover devido à alteração da integridade do banco de dados.

    Como outro exemplo, quando o mecanismo de banco de dados do SQL Server precisa ler uma página de dados para atender a uma consulta, se a página de dados estiver armazenada em cache na memória do pool de buffers, nenhuma leitura de disco com acesso físico poderá ser necessária para atender à solicitação de consulta. Portanto, um arquivo de dados ausente ou indisponível pode não acionar imediatamente um failover automático mesmo quando a opção de integridade do banco de dados estiver habilitada, pois o status do banco de dados não é imediato.

    De um teste de laboratório (próximo o suficiente)

    1. Coloquei os dados mastere msdbos arquivos de log em um pen-drive (drive D:) - por uma questão de brevidade, não vou descrever esse processo;
    2. Iniciei a instância e executei alguns DML em um banco de dados do meu laboratório Lab;
    3. Conectado faço o masterbanco de dados que rodei select name, state_desc from sys.databases;;Consultar conjunto de resultados
    4. Desconecte o pen-drive (sem Remover Hardware com Segurança e Ejetar Mídia , apenas puxá-lo da área de trabalho);
    5. Executei um pouco mais de DML em um banco de dados do meu laboratório Lab- tudo bem, até atualizei uma tabela;
    6. O SQL Server só percebeu o problema quando tentei executar o CREATE DATABASE StorageOffline;. Recebi a seguinte mensagem de erro:

      Msg 823, Level 24, State 2, Line 4 O sistema operacional retornou o erro 21(O dispositivo não está pronto.) para o SQL Server durante uma leitura no deslocamento 0x0000000041c000 no arquivo 'D:\MSSQL\master.mdf'. Mensagens adicionais no log de erros do SQL Server e no log de erros do sistema operacional podem fornecer mais detalhes. Essa é uma condição de erro grave no nível do sistema que ameaça a integridade do banco de dados e deve ser corrigida imediatamente. Conclua uma verificação completa de consistência do banco de dados (DBCC CHECKDB). Esse erro pode ser causado por vários fatores; para obter mais informações, consulte os Manuais Online do SQL Server.

    7. Depois que recebi o erro, repeti a etapa 3 e a saída foi a mesma: o estado de todos os bancos de dados ainda era ONLINE . Assim, apesar do SQL Server estar ciente de um problema no arquivo da unidade D:\, ele não alterou o estado dos bancos de dados nem colocou a instância offline;

    Continuei usando o Labbanco de dados sem grandes problemas (aparentes) por alguns minutos e a instância só parou de funcionar enquanto eu escrevia esta resposta. É claro que não é um estado confiável para continuar trabalhando em produção, mas levou algum tempo para ficar offline.


    Conclusão

    Com base nessas informações, meus pensamentos são:

    O serviço do SQL Server nesse servidor ficará offline ou deixará de funcionar corretamente imediatamente?

    Eu diria que não. Ainda não trabalhei com grupos de disponibilidade, mas se o recurso se destina a manter bancos de dados importantes online e não monitora o tempo de atividade do disco ou a disponibilidade do arquivo de banco de dados para bancos de dados que estão sendo monitorados ativamente , ele não notará o problema mais rapidamente em bancos de dados que não fazem parte do grupo de disponibilidade.

    Ou continua a funcionar por algum tempo se master e msdb foram armazenados em cache na RAM antes da rede cair?

    Sim, mas depende de quão ocupado o seu ambiente está. Os bancos de dados permanecerão online até que o SQL Server tente ler ou gravar algo nos arquivos de banco de dados masterou .msdb

    Mas eu concordo com JD, você não deve confiar nessa situação para lhe dar tempo suficiente para tomar qualquer ação que evite que sua instância fique offline.

    • 4
  3. Joshua
    2021-01-20T14:33:59+08:002021-01-20T14:33:59+08:00

    Depende de que tipo de offline. Eu fiz com que ele entrasse em um estado em que não tinha ideia de quais transações foram confirmadas porque o modo de falha que estava vendo era que as gravações no banco de dados estavam falhando nos níveis de bloco. Ele enviou spam ao log muito bem, mas não conseguiu se recuperar até que eu o devolvesse manualmente, pois acreditaria que a cópia na memória estava correta após atingir o erro de E/S.

    Tenho certeza que alguém vai passar por aqui e dizer que isso é loucura. Concordo. É um comportamento terrível. Mas eu observei in loco. Ao trazer o servidor de volta, apareceu de um SELECTobservador que o banco de dados foi revertido. Observe que, embora qualquer pessoa que esteja executando um COMMITerro, outras SELECTinstruções possam ver os resultados dos commits com falha como se tivessem sido bem-sucedidos lendo-os com SELECTinstruções até que eu os reciclasse manualmente.

    Que nojo.

    • 3

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve