Solução de problemas do SQL Server em Linux

Aplica-se a:SQL Server – Linux

Este artigo descreve como solucionar problemas do SQL Server em execução no Linux ou em um contêiner do Linux. Ao solucionar problemas do SQL Server no Linux, lembre-se de examinar os recursos compatíveis e as limitações conhecidas nas Notas sobre a versão do SQL Server 2017 no Linux.

Para obter respostas a perguntas frequentes, confira as Perguntas frequentes sobre o SQL Server em Linux.

Solucionar falhas de conexão

Se você tiver dificuldades para se conectar à sua instância do SQL Server no Linux, há algumas coisas a serem verificadas.

  • Caso não consiga se conectar localmente usando localhost, tente usar o endereço IP 127.0.0.1. É possível que o localhost não esteja mapeado corretamente para esse endereço.

  • Verifique se o nome do servidor ou o endereço IP pode ser acessado no computador cliente.

    Dica

    Para localizar o endereço IP de seu computador Ubuntu, execute o comando ifconfig como no seguinte exemplo:

    sudo ifconfig eth0 | grep 'inet addr'
    

    Para o Red Hat, use o comando ip addr como no seguinte exemplo:

    sudo ip addr show eth0 | grep "inet"
    

    Uma exceção a essa técnica está relacionada às VMs do Azure. Para VMs do Azure, localize o IP público da VM no portal do Azure.

  • Se aplicável, verifique se você abriu a porta do SQL Server (padrão 1433) no firewall.

  • Para VMs do Azure, verifique se você tem uma regra de grupo de segurança de rede para a porta padrão do SQL Server.

  • Verifique se o nome de usuário e a senha não contêm erros de digitação, espaços extras ou uso incorreto de maiúsculas.

  • Tente definir explicitamente o protocolo e o número da porta com o nome do servidor, como no seguinte exemplo: tcp:servername,1433.

  • Problemas de conectividade de rede também podem causar erros de conexão e tempos limite. Depois de verificar as informações de conexão e a conectividade de rede, tente estabelecer a conexão novamente.

Gerenciar o serviço SQL Server

A seção a seguir mostra como gerenciar a execução de contêineres do Docker do SQL Server. Para gerenciar serviços para Linux, confira Iniciar, parar e reiniciar serviços do SQL Server no Linux.

Gerenciar a execução do contêiner do Docker do SQL Server

Obtenha o status e a ID do contêiner criado mais recentemente do Docker do SQL Server executando o seguinte comando (a ID está abaixo da coluna CONTAINER ID):

sudo docker ps -l

Você pode parar ou reiniciar o serviço SQL Server, conforme necessário, usando os seguintes comandos:

sudo docker stop <container ID>
sudo docker restart <container ID>

Dica

Para obter mais dicas de solução de problemas para o Docker, confira Solução de problemas de contêineres do SQL Server no Docker.

Acessar os arquivos de log

O Mecanismo de Banco de Dados do SQL Server registra no arquivo /var/opt/mssql/log/errorlog nas instalações do Linux e do contêiner. Você precisa estar no modo superusuário para procurar arquivos nesse diretório.

O instalador registra-os em log aqui: /var/opt/mssql/setup-<time stamp representing time of install> Você pode procurar os arquivos de log de erros com qualquer ferramenta compatível com UTF-16, como vim ou cat da seguinte maneira:

sudo cat errorlog

Se preferir, converta também os arquivos em UTF-8 para lê-los com more ou less com o seguinte comando:

sudo iconv -f UTF-16LE -t UTF-8 <errorlog> -o <output errorlog file>

Eventos estendidos

Os eventos estendidos podem ser consultados por meio de um comando SQL. Para obter mais informações, confira eventos estendidos.

Despejos de memória

Procure despejos no diretório de log do Linux. Verifique no diretório /var/opt/mssql/log os despejos do Linux Core (extensão .tar.gz2) ou minidespejos do SQL (extensão .mdmp).

Por exemplo, para exibir os principais despejos:

sudo ls /var/opt/mssql/log | grep .tar.gz2

Para despejos do SQL, use este script:

sudo ls /var/opt/mssql/log | grep .mdmp

Iniciar o SQL Server no modo de usuário único ou de configuração mínima

Iniciar o SQL Server no modo de configuração mínima

Esse modo será útil se a definição de um valor de configuração (por exemplo, sobrecarga de confirmação de memória) impediu o servidor de ser iniciado.

sudo -u mssql /opt/mssql/bin/sqlservr -f

Iniciar o SQL Server no modo de usuário único

Às vezes, pode ser necessário iniciar uma instância do SQL Server no modo de usuário único usando a opção de inicialização -m. Para obter mais informações, confira Parâmetros de inicialização. Por exemplo, você pode querer mudar as opções de configuração de servidor ou recuperar um banco de dados master danificado ou outro banco de dados do sistema.

Por exemplo, use o seguinte script para iniciar o SQL Server no modo de usuário único:

sudo -u mssql /opt/mssql/bin/sqlservr -m

Este script inicia o SQL Server no modo de usuário único com o sqlcmd:

sudo -u mssql /opt/mssql/bin/sqlservr -m sqlcmd

Sempre inicie o SQL Server no Linux com o usuário mssql para evitar futuros problemas de inicialização. Por exemplo: sudo -u mssql /opt/mssql/bin/sqlservr [STARTUP OPTIONS]

Se você tiver iniciado o SQL Server acidentalmente com outro usuário, altere a propriedade dos arquivos de banco de dados do SQL Server novamente para o usuário mssql antes de iniciar o SQL Server com systemd. Por exemplo, para alterar a propriedade de todos os arquivos de banco de dados em /var/opt/mssql para o usuário mssql, execute o comando a seguir:

chown -R mssql:mssql /var/opt/mssql/

Recompilar bancos de dados do sistema

Como último recurso, você pode optar por recompilar os bancos de dados master e model novamente para as versões padrão.

Aviso

Esse processo é perigoso, pois você poderá excluir todos os dados do sistema do SQL Server que você configurou, incluindo informações sobre seus bancos de dado de usuário (mas não os bancos de dados do usuário em si).

Posteriormente, você precisará anexar os bancos de dados de usuário à instância. Isso também excluirá outras informações armazenadas nos bancos de dados do sistema, inclusive:

  • Informações de chave mestra do banco de dados
  • todos os certificados carregados em master
  • a senha para o logon do SA
  • informações relacionadas ao trabalho de msdb
  • informações de Database Mail do msdb
  • sp_configure options

Você não poderá anexar novamente nenhum banco de dados de usuário criptografado com Transparent Data Encryption (TDE), a menos que também seja feito backup de seus certificados e chaves privadas.

Use essas etapas apenas se você entender as implicações.

  1. Parar o Mecanismo de Banco de Dados do SQL Server

    sudo systemctl stop mssql-server
    
  2. Executar sqlservr com o parâmetro force-setup

    sudo -u mssql /opt/mssql/bin/sqlservr --force-setup
    

    Sempre inicie o SQL Server no Linux com o usuário mssql para evitar futuros problemas de inicialização.

  3. Depois de ver a mensagem "A recuperação foi concluída", pressione Ctrl+C. Isso desligará o SQL Server.

  4. Reconfigure a senha SA.

    sudo /opt/mssql/bin/mssql-conf set-sa-password
    
  5. Inicie o SQL Server e reconfigure o servidor, incluindo a restauração ou reanexação de qualquer banco de dados de usuário.

    sudo systemctl start mssql-server
    

Melhorar o desempenho

Muitos fatores afetam o desempenho, incluindo design de banco de dados, hardware e demandas de carga de trabalho. Se desejar melhorar o desempenho, comece examinando as melhores práticas no artigo Melhores práticas de desempenho e diretrizes de configuração para o SQL Server em Linux. Em seguida, explore algumas das ferramentas disponíveis para solucionar problemas de desempenho.

Problemas comuns

  1. Não é possível se conectar à Instância remota do SQL Server.

    Confira a seção de solução de problemas do artigo Conectar-se ao SQL Server em Linux.

  2. A seguinte mensagem de erro é exibida: ERROR: Hostname must be 15 characters or less.

    Esse é um problema conhecido que ocorre sempre que o nome do computador que está tentando instalar o pacote do SQL Server tem mais de 15 caracteres. Atualmente, não há soluções alternativas além da alteração do nome do computador. Você pode fazer isso editando /etc/hostname e /etc/hosts, alterando o nome do host, salvando cada arquivo e reiniciando o computador.

  3. A senha de administração do sistema (SA) deve ser redefinida, o que vai parar o serviço SQL Server temporariamente.

    Se você esquecer a senha de SA (administrador do sistema) ou precisa redefini-la por algum outro motivo, siga estas etapas.

    Conecte-se ao terminal do host, execute os seguintes comandos e siga os prompts para redefinir a senha SA:

    sudo systemctl stop mssql-server
    sudo /opt/mssql/bin/mssql-conf setup
    
  4. Caracteres especiais em senhas de logon causam erros ou falhas de logon.

    Se você usar alguns caracteres na senha de logon do SQL Server, talvez precise fazer escape deles com uma barra invertida quando usá-los na linha de comando do Linux. Por exemplo, você precisará fazer escape do cifrão ($) sempre que usá-lo em um script de shell/comando de terminal:

    Não funciona:

    sudo sqlcmd -S myserver -U sa -P Test$$
    

    Funciona:

    sqlcmd -S myserver -U sa -P Test\$\$
    

Obter ajuda

Contribua com a documentação do SQL

Você sabia que pode editar conteúdo do SQL por conta própria? Ao fazer isso, além de melhorar nossa documentação, você também será creditado como um colaborador da página.

Para obter mais informações, confira Como contribuir para a documentação do SQL Server