Estou usando o SQL Server 2017, Release Candidate 2 (RC2) no Linux (Ubuntu 16.04).
Quando o servidor é inicializado, o SQL Server geralmente também é iniciado. Mas, por algum motivo, o SQL Server não inicia mais. Pelo menos não consigo me conectar a ele usando sqlcmd . Eu recebo um erro de tempo limite de ODBC ( "Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server ") todas as vezes agora:
Login timeout expired.
TCP Provider: Error code 0x2749.
A network-related or instance-specific error has occurred while establishing a
connection to SQL Server. Server is not found or not accessible. Check if instance
name is correct and if SQL Server is configured to allow remote connections.
For more information see SQL Server Books Online..
No entanto, quando eu executo:
ps aux | grep mssql
Recebo duas entradas retornadas mostrando que o mssql
usuário está executando o sqlservr
processo.
Além disso, o arquivo de log de erros em /var/opt/mssql/log/ não tem um carimbo de data/hora correspondente quando iniciei a VM (ou reiniciei o serviço), nem há novas entradas nesse arquivo.
E, em /var/log/messages , tudo o que aparece é:
Esta é uma versão de avaliação. Faltam [141] dias no período de avaliação.
Se eu executar systemctl status mssql-server
, recebo o seguinte:
● mssql-server.service - Mecanismo de banco de dados do Microsoft SQL Server
Carregado: carregado (/lib/systemd/system/mssql-server.service; ativado; predefinição do fornecedor: ativado)
Ativo: falhou (Resultado: código de saída) desde segunda-feira de 2017- 09-04 20:01:56 BST; 36s atrás
Documentos: https://learn.microsoft.com/en-us/sql/linux
Processo: 8009 ExecStart=/opt/mssql/bin/sqlservr (code=exited, status=255)
PID principal: 8009 (code= saiu, status=255)Started Microsoft SQL Server Database Engine. This is an evaluation version. There are [141] days left in the evaluation period. Stopping Microsoft SQL Server Database Engine... mssql-server.service: Main process exited, code=exited, status=255/n/a Stopped Microsoft SQL Server Database Engine. mssql-server.service: Unit entered failed state. mssql-server.service: Failed with result 'exit-code'.
Isso acabou como um caso de não ter cuidado ao trabalhar como
root
.Eu estava pesquisando se o SQLCLR no Linux teria acesso ao arquivo app.Config como no Windows (infelizmente, não: SQL Server 2017 no Linux ignora o arquivo de configuração do aplicativo, se existir, ou às vezes trava se não existir 't (SQLCLR) ) e, em determinadas circunstâncias, o SQL Server travaria completamente. Quando isso acontecia, a única maneira de pará-lo era fazer um
kill -9
onsqlservr
. Uma das vezes que eu estava iniciando o serviço novamente, fiz isso executando diretamente /opt/mssql/bin/sqlservr e enquanto estava trabalhando comoroot
(portanto, o próprio processo era de propriedade deroot
).Não houve erros imediatos ou comportamento estranho resultante da execução
sqlservr
comoroot
, MAS quando a VM foi reiniciada e o SQL Server tentou iniciar corretamente (ou seja, executando como omssql
usuário), foi quando ele ficou preso no início.Descobri que uma consequência direta da execução
sqlservr
comoroot
era que o arquivo /var/opt/mssql/log/errorlog (e alguns outros que são criados na inicialização do SQL Server) eram de propriedaderoot
(faz sentido).E, uma consequência direta desses arquivos serem de propriedade
root
é que quando o processo é iniciado corretamente (comomssql
), então omssql
usuário não tem permissão para renomear o arquivo para terminar em .1 (e o que mais precisa acontecer com qualquer outro arquivos, como rastreamento padrão, etc). No entanto, em vez de obter um erro de permissão, ele trava para sempre.A correção principal é simplesmente executar o seguinte como
root
(não tentei executá-lo comomssql
). Para ambos os comandos a seguir,sudo
é necessário apenas quando não estiver atuando comoroot
ele executará o comando que o segue comoroot
(ou algum outro usuário, se você especificar-u username
), após ser solicitado a inserir aroot
senha.A correção secundária (para garantir que isso não aconteça novamente) é iniciar o SQL Server corretamente ;-):
Para obter as permissões corretas e obter erros inteligentes, você precisa pelo menos do seguinte...
Eu acho que a permissão em um arquivo está errada.
Tente fazer isso:
Por favor, verifique isso também.
Não se esqueça da
.system
pasta oculta em/var/opt/mssql/
.https://designprincipia.com/i-broke-mssql-server-on-linux