Risolvere i problemi di SQL Server in LinuxTroubleshoot SQL Server on Linux

SI APPLICA A: sìSQL Server (solo Linux) noDatabase SQL di Azure noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse APPLIES TO: yesSQL Server (Linux only) noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Questo documento descrive come risolvere i problemi di Microsoft SQL Server in esecuzione in Linux o in un contenitore Docker.This document describes how to troubleshoot Microsoft SQL Server running on Linux or in a Docker container. Quando si risolvono i problemi di SQL Server in Linux, ricordarsi di esaminare le funzionalità supportate e le limitazioni note nelle Note sulla versione di SQL Server in Linux.When troubleshooting SQL Server on Linux, remember to review the supported features and known limitations in the SQL Server on Linux Release Notes.

Suggerimento

Per le risposte alle domande frequenti, vedere Domande frequenti su SQL Server in Linux.For answers to frequently asked questions, see the SQL Server on Linux FAQ.

Risolvere i problemi relativi agli errori di connessioneTroubleshoot connection failures

In caso di difficoltà di connessione a SQL Server Linux, è necessario eseguire alcuni controlli.If you are having difficulty connecting to your Linux SQL Server, there are a few things to check.

  • Se non è possibile connettersi in locale usando localhost, provare a usare invece l'indirizzo IP 127.0.0.1.If you are unable to connect locally using localhost, try using the IP address 127.0.0.1 instead. Localhost potrebbe non essere correttamente associato a questo indirizzo.It is possible that localhost is not properly mapped to this address.

  • Verificare che il nome del server o l'indirizzo IP sia raggiungibile dal computer client.Verify that the server name or IP address is reachable from your client machine.

    Suggerimento

    Per trovare l'indirizzo IP del computer Ubuntu, è possibile eseguire il comando ifconfig come nell'esempio seguente:To find the IP address of your Ubuntu machine, you can run the ifconfig command as in the following example:

    sudo ifconfig eth0 | grep 'inet addr'
    

    Per Red Hat, è possibile usare ip addr come nell'esempio seguente:For Red Hat, you can use the ip addr as in the following example:

    sudo ip addr show eth0 | grep "inet"
    

    Un'eccezione a questa tecnica è relativa alle macchine virtuali di Azure.One exception to this technique relates to Azure VMs. Per le macchine virtuali di Azure, trovare l'IP pubblico per la macchina virtuale nel portale di Azure.For Azure VMs, find the public IP for the VM in the Azure portal.

  • Se applicabile, verificare di avere aperto la porta di SQL Server (per impostazione predefinita, 1433) sul firewall.If applicable, check that you have opened the SQL Server port (default 1433) on the firewall.

  • Per le macchine virtuali di Azure, controllare di avere una regola del gruppo di sicurezza di rete per la porta predefinita di SQL Server.For Azure VMs, check that you have a network security group rule for the default SQL Server port.

  • Verificare che il nome utente e la password non contengano errori di digitazione o spazi aggiuntivi o maiuscole e minuscole non corrette.Verify that the user name and password do not contain any typos or extra spaces or incorrect casing.

  • Provare a impostare in modo esplicito il protocollo e il numero di porta con il nome del server, come nell'esempio seguente: tcp:servername,1433.Try to explicitly set the protocol and port number with the server name like the following example: tcp:servername,1433.

  • Problemi di connettività di rete possono anche causare errori di connessione e timeout.Network connectivity issues can also cause connection errors and timeouts. Dopo aver verificato le informazioni di connessione e la connettività di rete, riprovare a stabilire la connessione.After verifying your connection information and network connectivity, try the connection again.

Gestire il servizio SQL ServerManage the SQL Server service

Le sezioni seguenti illustrano come avviare, arrestare, riavviare e controllare lo stato del servizio SQL Server.The following sections show how to start, stop, restart, and check the status of the SQL Server service.

Gestire il servizio mssql-server in Red Hat Enterprise Linux (RHEL) e UbuntuManage the mssql-server service in Red Hat Enterprise Linux (RHEL) and Ubuntu

Controllare lo stato del servizio SQL Server usando questo comando:Check the status of the SQL Server service using this command:

sudo systemctl status mssql-server

È possibile arrestare, avviare o riavviare il servizio SQL Server in base alle esigenze usando i comandi seguenti:You can stop, start, or restart the SQL Server service as needed using the following commands:

sudo systemctl stop mssql-server
sudo systemctl start mssql-server
sudo systemctl restart mssql-server

Gestire l'esecuzione del contenitore Docker mssqlManage the execution of the mssql Docker container

È possibile ottenere lo stato e l'ID dell'ultimo contenitore Docker di SQL Server creato eseguendo il comando seguente (l'ID è nella colonna CONTAINER ID):You can get the status and container ID of the latest created SQL Server Docker container by running the following command (The ID is under the CONTAINER ID column):

sudo docker ps -l

È possibile arrestare o riavviare il servizio SQL Server in base alle esigenze usando i comandi seguenti:You can stop or restart the SQL Server service as needed using the following commands:

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

Suggerimento

Per altri suggerimenti sulla risoluzione dei problemi relativi a Docker, vedere Risoluzione dei problemi dei contenitori Docker di SQL Server.For more troubleshooting tips for Docker, see Troubleshooting SQL Server Docker containers.

Accedere ai file di logAccess the log files

Il motore di SQL Server accede al file /var/opt/mssql/log/errorlog nelle installazioni sia di Linux che di Docker.The SQL Server engine logs to the /var/opt/mssql/log/errorlog file in both the Linux and Docker installations. Per esplorare questa directory, è necessario essere in modalità "utente con privilegi avanzati".You need to be in 'superuser' mode to browse this directory.

Il programma di installazione accede a /var/opt/mssql/setup-<timestamp indicante l'ora di installazione> È possibile esplorare i file errorlog con qualsiasi strumento compatibile con UTF-16, ad esempio "vim" o "cat", come di seguito:The installer logs here: /var/opt/mssql/setup-< time stamp representing time of install> You can browse the errorlog files with any UTF-16 compatible tool like 'vim' or 'cat' like this:

sudo cat errorlog

Se si preferisce, è anche possibile convertire i file in UTF-8 per leggerli con "more" o "less" con il comando seguente:If you prefer, you can also convert the files to UTF-8 to read them with 'more' or 'less' with the following command:

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

Eventi estesiExtended events

È possibile eseguire query sugli eventi estesi tramite un comando SQL.Extended events can be queried via a SQL command. Per altre informazioni sugli eventi estesi, vedere qui:More information about extended events can be found here:

Dump di arresto anomaloCrash dumps

Cercare i dump nella directory log in Linux.Look for dumps in the log directory in Linux. Cercare nella directory /var/opt/mssql/log i core dump di Linux (estensione tar.gz2) o i minidump di SQL (estensione mdmp)Check under the /var/opt/mssql/log directory for Linux Core dumps (.tar.gz2 extension) or SQL minidumps (.mdmp extension)

Per i core dumpFor Core dumps

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

Per i dump di SQLFor SQL dumps

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

Avviare SQL Server con la modalità configurazione minima o utente singoloStart SQL Server in Minimal Configuration or in Single User Mode

Avviare SQL Server con la modalità di configurazione minimaStart SQL Server in Minimal Configuration Mode

È utile nel caso in cui l'impostazione di un valore di configurazione, ad esempio un'allocazione eccessiva di memoria, abbia impedito l'avvio del server.This is useful if the setting of a configuration value (for example, over-committing memory) has prevented the server from starting.

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

Avviare SQL Server in modalità utente singoloStart SQL Server in Single User Mode

In alcuni casi potrebbe essere necessario avviare un'istanza di SQL Server in modalità utente singolo usando l'opzione di avvio -m.Under certain circumstances, you may have to start an instance of SQL Server in single-user mode by using the startup option -m. Ad esempio, può risultare utile modificare le opzioni di configurazione del server oppure recuperare un database master o un altro database di sistema danneggiato.For example, you may want to change server configuration options or recover a damaged master database or other system database. Ad esempio, può risultare utile modificare le opzioni di configurazione del server oppure recuperare un database master o un altro database di sistema danneggiatoFor example, you may want to change server configuration options or recover a damaged master database or other system database

Avviare SQL Server in modalità utente singoloStart SQL Server in Single User Mode

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

Avviare SQL Server in modalità utente singolo con SQLCMDStart SQL Server in Single User Mode with SQLCMD

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

Avviso

Avviare SQL Server in Linux con l'utente "mssql" per evitare problemi di avvio futuri.Start SQL Server on Linux with the "mssql" user to prevent future startup issues. Esempio "sudo -u mssql /opt/mssql/bin/sqlservr [STARTUP OPTIONS]"Example "sudo -u mssql /opt/mssql/bin/sqlservr [STARTUP OPTIONS]"

Se SQL Server è stato avviato accidentalmente con un altro utente, è necessario modificare la proprietà dei file di database di SQL Server impostandola di nuovo sull'utente "mssql" prima di avviare SQL Server con systemd.If you have accidentally started SQL Server with another user, you must change ownership of SQL Server database files back to the 'mssql' user prior to starting SQL Server with systemd. Per modificare, ad esempio, la proprietà di tutti i file di database in/var/opt/mssql impostandola sull'utente "mssql", eseguire il comando seguenteFor example, to change ownership of all database files under /var/opt/mssql to the 'mssql' user, run the following command

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

Ricompilare i database di sistemaRebuild system databases

Se strettamente necessario, è possibile scegliere di ripristinare le versioni predefinite dei database master e modello.As a last resort, you can choose to rebuild the master and model databases back to default versions.

Avviso

Questa procedura ELIMINA tutti i dati di sistema di SQL Server configurati,These steps will DELETE all SQL Server system data that you have configured! incluse le informazioni sui database utente (ma non i database utente stessi).This includes information about your user databases (but not the user databases themselves). Elimina anche le altre informazioni archiviate nei database di sistema, incluse le seguenti: informazioni sulla chiave master, eventuali certificati caricati nel master, password di accesso dell'amministratore di sistema, informazioni relative ai processi da msdb, informazioni su Posta elettronica database da msdb e opzioni di sp_configure.It will also delete other information stored in the system databases, including the following: master key information, any certs loaded in master, the SA Login password, job-related information from msdb, DB Mail information from msdb, and sp_configure options. Usarla solo se si conoscono le implicazioni.Only use if you understand the implications!

  1. Arrestare SQL Server.Stop SQL Server.

    sudo systemctl stop mssql-server
    
  2. Eseguire sqlservr con il parametro force-setup.Run sqlservr with the force-setup parameter.

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

    Avviso

    Vedere l'avviso precedente.See the previous warning! È anche necessario eseguire questa operazione come utente mssql, come illustrato qui.Also, you must run this as the mssql user as shown here.

  3. Dopo aver visualizzato il messaggio "Recupero completato", premere CTRL+C.After you see the message "Recovery is complete", press CTRL+C. SQL Server verrà arrestatoThis will shut down SQL Server

  4. Riconfigurare la password dell'amministratore di sistema.Reconfigure the SA password.

    sudo /opt/mssql/bin/mssql-conf set-sa-password
    
  5. Avviare SQL Server e riconfigurare il server.Start SQL Server and reconfigure the server. Ciò include il ripristino o la riconnessione di tutti i database utente.This includes restoring or re-attaching any user databases.

    sudo systemctl start mssql-server
    

Migliorare le prestazioniImprove performance

Esistono molti fattori che influiscono sulle prestazioni, tra cui la progettazione del database, l'hardware e le esigenze dei carichi di lavoro.There are many factors that affect performance, including database design, hardware, and workload demands. Per migliorare le prestazioni, iniziare a esaminare le procedure consigliate dell'articolo Procedure consigliate per le prestazioni e linee guida per la configurazione per SQL Server in Linux.If you are looking to improve performance, start by reviewing the best practices in the article, Performance best practices and configuration guidelines for SQL Server on Linux. Esplorare quindi alcuni degli strumenti disponibili per la risoluzione dei problemi relativi alle prestazioni.Then explore some of the available tools for troubleshooting performance problems.

Problemi comuniCommon issues

  1. Non è possibile connettersi all'istanza di SQL Server remota.You cannot connect to your remote SQL Server instance.

    Vedere la sezione relativa alla risoluzione dei problemi nell'articolo Connettersi a SQL Server in Linux.See the troubleshooting section of the article, Connect to SQL Server on Linux.

  2. ERRORE: il nome non può contenere più di 15 caratteri.ERROR: Hostname must be 15 characters or less.

    Si tratta di un problema noto che si verifica ogni volta che il nome del computer che prova a installare il pacchetto Debian di SQL Server contiene più di 15 caratteri.This is a known-issue that happens whenever the name of the machine that is trying to install the SQL Server Debian package is longer than 15 characters. L'unica soluzione alternativa attualmente disponibile consiste nel modificare il nome del computer.There are currently no workarounds other than changing the name of the machine. A questo scopo, è possibile modificare il file del nome host e riavviare il computer.One way to achieve this is by editing the hostname file and rebooting the machine. La guida del sito Web seguente illustra l'operazione in dettaglio.The following website guide explains this in detail.

  3. Reimpostazione della password dell'amministratore di sistema.Resetting the system administration (SA) password.

    Se la password dell'amministratore di sistema è stata dimenticata o è necessario reimpostarla per un altro motivo, seguire questa procedura.If you have forgotten the system administrator (SA) password or need to reset it for some other reason, follow these steps.

    Nota

    I passaggi seguenti arrestano temporaneamente il servizio SQL Server.The following steps stop the SQL Server service temporarily.

    Accedere al terminale host, eseguire i comandi seguenti e seguire le istruzioni per reimpostare la password dell'amministratore di sistema:Log into the host terminal, run the following commands and follow the prompts to reset the SA password:

    sudo systemctl stop mssql-server
    sudo /opt/mssql/bin/mssql-conf setup
    
  4. Uso di caratteri speciali nella password.Using special characters in password.

    Se si usano alcuni caratteri nella password di accesso di SQL Server, potrebbe essere necessario farli precedere da una barra rovesciata quando li si usa in un comando di Linux nel terminale.If you use some characters in the SQL Server login password, you might need to escape them with a backslash when you use them in a Linux command in the terminal. È ad esempio necessario applicare un carattere di escape al simbolo del dollaro ($) ogni volta che lo si usa in uno script di comando/shell del terminale:For example, you must escape the dollar sign ($) anytime you use it in a terminal command/shell script:

    Non valido:Does not work:

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

    Valido:Works:

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

    Risorse: Special characters (Caratteri speciali) Escaping (Escape)Resources: Special characters Escaping

info_tip SupportoGet help