Risolvere i problemi di SQL Server in Linux
Si applica a: SQL Server - Linux
In questo articolo viene descritto come risolvere i problemi di SQL Server in esecuzione in Linux o in un contenitore Linux. Quando si risolvono i problemi di SQL Server in Linux, ricordarsi di esaminare le funzionalità supportate e le limitazioni note:
- Note sulla versione di SQL Server 2022 in Linux
- Note sulla versione di SQL Server 2019 in Linux
- Note sulla versione di SQL Server 2017 in Linux
Per le risposte alle domande frequenti, vedere Domande frequenti su SQL Server in Linux.
Risolvere i problemi relativi agli errori di connessione
In caso di difficoltà di connessione a SQL Server in Linux, eseguire i controlli indicati di seguito.
Se non è possibile connettersi in locale tramite
localhost
, provare a usare l'indirizzo IP 127.0.0.1.localhost
potrebbe non essere correttamente associato a questo indirizzo.Verificare che il nome del server o l'indirizzo IP sia raggiungibile dal computer client.
Per trovare l'indirizzo IP del computer Ubuntu, è possibile eseguire il comando
ifconfig
, come nell'esempio seguente:sudo ifconfig eth0 | grep 'inet addr'
Per Red Hat, è possibile usare il comando
ip addr
, come nell'esempio seguente:sudo ip addr show eth0 | grep "inet"
Suggerimento
Un'eccezione a questa tecnica è relativa alle macchine virtuali di Azure. Per le macchine virtuali di Azure, trovare l'IP pubblico per la macchina virtuale nel portale di Azure.
Se possibile, verificare di avere aperto la porta di SQL Server (per impostazione predefinita, 1433) nel 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.
Verificare che nome utente e password non contengano errori di digitazione, spazi aggiuntivi o maiuscole e minuscole non corrette.
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
.Problemi di connettività di rete possono anche causare errori di connessione e timeout. Dopo aver verificato le informazioni di connessione e la connettività di rete, riprovare a stabilire la connessione.
Gestire il servizio SQL Server
Nella sezione seguente viene illustrato come gestire l'esecuzione di contenitori Linux di SQL Server. Per gestire i servizi per Linux, vedere Avviare, arrestare e riavviare i servizi SQL Server in Linux.
Gestire l'esecuzione del contenitore Linux di SQL Server
È possibile ottenere lo stato e l'ID dell'ultimo contenitore Linux di SQL Server creato eseguendo il comando seguente (l'ID è nella colonna CONTAINER ID
):
sudo docker ps -l
È possibile arrestare o riavviare il servizio SQL Server in base alle esigenze usando i comandi seguenti:
sudo docker stop <container ID>
sudo docker restart <container ID>
Suggerimento
Per altri suggerimenti sulla risoluzione dei problemi relativi ai contenitori Linux, vedere Risoluzione dei problemi dei contenitori Docker di SQL Server.
Accedere ai file di log
Il motore di database di SQL Server accede al file /var/opt/mssql/log/errorlog
sia nelle installazioni in Linux sia nelle installazioni in contenitori. L'esplorazione di questa directory è possibile solo in modalità utente con privilegi avanzati.
Il programma di installazione accede a: /var/opt/mssql/setup-<time stamp representing time of install>
È possibile esaminare i file errorlog
tramite qualsiasi strumento compatibile con UTF-16, ad esempio vim o cat, come indicato di seguito:
sudo cat errorlog
Se si preferisce, è anche possibile convertire i file in UTF-8 per leggerli con more o less tramite il comando seguente:
sudo iconv -f UTF-16LE -t UTF-8 <errorlog> -o <output errorlog file>
Eventi estesi
È possibile eseguire query sugli eventi estesi tramite un comando SQL. Per altre informazioni, vedere Eventi estesi.
Dump di arresto anomalo
Cercare i dump nella directory log in Linux. Cercare nella directory /var/opt/mssql/log
i dump di core di Linux (estensione .tar.gz2
) o i minidump di SQL (estensione .mdmp
)
Ad esempio, per visualizzare i dump di core:
sudo ls /var/opt/mssql/log | grep .tar.gz2
Per i dump di SQL, usare questo script:
sudo ls /var/opt/mssql/log | grep .mdmp
Avviare SQL Server in modalità di configurazione minima o utente singolo
Avviare SQL Server in modalità di configurazione minima
Questa modalità è utile se l'impostazione di un valore di configurazione, ad esempio un'allocazione eccessiva di memoria, impedisce l'avvio del server.
sudo -u mssql /opt/mssql/bin/sqlservr -f
Avviare SQL Server in modalità utente singolo
Talvolta potrebbe essere necessario avviare un'istanza di SQL Server in modalità utente singolo usando l'opzione di avvio -m
. Per altre informazioni, vedere Parametri di avvio. Potrebbe ad esempio essere necessario modificare le opzioni di configurazione del server o recuperare un database master
o un altro database di sistema danneggiato.
Ad esempio, usare lo script seguente per avviare SQL Server in modalità utente singolo:
sudo -u mssql /opt/mssql/bin/sqlservr -m
Questo script avvia SQL Server in modalità utente singolo con sqlcmd:
sudo -u mssql /opt/mssql/bin/sqlservr -m sqlcmd
Avviare sempre SQL Server in Linux con l'utente mssql
per evitare problemi di avvio futuri. Ad esempio: sudo -u mssql /opt/mssql/bin/sqlservr [STARTUP OPTIONS]
Se SQL Server viene avviato accidentalmente con un altro utente, sarà necessario modificare la proprietà dei file del database di SQL Server impostandola di nuovo sull'utente mssql
prima di avviare SQL Server con systemd. Ad esempio, per modificare la proprietà di tutti i file di database /var/opt/mssql
impostandola sull'utente mssql
, usare il comando seguente:
chown -R mssql:mssql /var/opt/mssql/
Ricompilare i database di sistema
In ultima istanza, è possibile scegliere di rigenerare le versioni predefinite dei database master
e model
.
Avviso
Questo processo è pericoloso, perché possono essere eliminati tutti i dati di sistema SQL Server configurati, incluse le informazioni sui database utente, ma non i database utente stessi.
In seguito è necessario collegare i database utente all'istanza. Vengono inoltre eliminate altre informazioni archiviate nei database di sistema, tra cui:
- informazioni sulla chiave master del database
- Qualsiasi certificato caricato in
master
- la password per l'account
sa
- Informazioni correlate al processo da
msdb
- Informazioni sulla posta elettronica database da
msdb
- Opzioni
sp_configure
Non sarà possibile ricollegare alcun database utente crittografato con Transparent Data Encryption (TDE), a meno che non venga eseguito anche il backup dei certificati e delle chiavi private.
Usare questa procedura solo se si conoscono le implicazioni.
Arrestare il motore di database di SQL Server
sudo systemctl stop mssql-server
Eseguire sqlservr con il parametro
force-setup
.sudo -u mssql /opt/mssql/bin/sqlservr --force-setup
Per evitare problemi di avvio futuri, avviare sempre SQL Server in Linux con l'utente
mssql
.Dopo aver visualizzato il messaggio che avvisa del completamento del recupero, premere Ctrl+C. SQL Server viene arrestato.
Riconfigurare la
sa
password.sudo /opt/mssql/bin/mssql-conf set-sa-password
Attenzione
La password deve seguire i criteri password predefiniti di SQL Server. Per impostazione predefinita, la password deve essere composta da almeno otto caratteri e contenere caratteri di tre delle quattro categorie seguenti: lettere maiuscole, lettere minuscole, cifre in base 10 e simboli. Le password possono contenere fino a 128 caratteri. Usare password il più possibile lunghe e complesse.
Avviare SQL Server e riconfigurare il server, eseguendo anche il ripristino o il ricollegamento di qualsiasi database utente.
sudo systemctl start mssql-server
Migliorare le prestazioni
Sulle prestazioni influiscono diversi fattori, tra cui la progettazione del database, l'hardware e le esigenze dei carichi di lavoro. Per migliorare le prestazioni, iniziare a esaminare le procedure consigliate presentate nell'articolo Procedure consigliate per le prestazioni e linee guida per la configurazione per SQL Server in Linux. Esplorare quindi alcuni degli strumenti disponibili per la risoluzione dei problemi relativi alle prestazioni.
- Monitorare le prestazioni tramite Query Store
- Viste a gestione dinamica (DMV) di sistema
- Performance Dashboard in SQL Server Management Studio (Performance Dashboard in SQL Server Management Studio)
Problemi comuni
Non è possibile connettersi all'istanza di SQL Server remota.
Vedere la sezione relativa alla risoluzione dei problemi nell'articolo Connettersi a SQL Server in Linux.
Si riceve il messaggio di errore:
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 di SQL Server contiene più di 15 caratteri. L'unica soluzione alternativa attualmente disponibile consiste nel modificare il nome del computer. A tale scopo, è possibile modificare sia
/etc/hostname
che/etc/hosts
, cambiando il nome host, salvando ogni file e riavviando il computer.La password dell'amministratore di sistema (
sa
) deve essere reimpostata, che arresta temporaneamente il servizio SQL Server.Se si dimentica la
sa
password o è necessario reimpostarla per qualche altro motivo, seguire questa procedura.Accedere al terminale host, eseguire i comandi seguenti e seguire le istruzioni per reimpostare la
sa
password:sudo systemctl stop mssql-server sudo /opt/mssql/bin/mssql-conf setup
Attenzione
La password deve seguire i criteri password predefiniti di SQL Server. Per impostazione predefinita, la password deve essere composta da almeno otto caratteri e contenere caratteri di tre delle quattro categorie seguenti: lettere maiuscole, lettere minuscole, cifre in base 10 e simboli. Le password possono contenere fino a 128 caratteri. Usare password il più possibile lunghe e complesse.
I caratteri speciali nelle password possono causare errori o errori di accesso.
Se si usano alcuni caratteri nella password di SQL Server, potrebbe essere necessario eseguirne l'escape con una barra rovesciata quando vengono usati nella riga di comando di Linux. Ad esempio, è necessario eseguire l'escape del segno di dollaro (
$
) ogni volta che lo si usa in uno script terminale command/shell:Non funziona
sudo sqlcmd -S myserver -U sa -P Test$$
Funziona:
sqlcmd -S myserver -U sa -P Test\$\$
Contenuto correlato
Ottenere aiuto
- Idee per SQL: si hanno suggerimenti per migliorare SQL Server?
- Domande e risposte Microsoft (SQL Server)
- DBA Stack Exchange (tag sql-server): domande su SQL Server
- Stack Overflow (tag sql-server): risposte a domande sullo sviluppo di SQL
- Reddit - general discussion about SQL Server (Discussione generale su SQL Server)
- Condizioni di licenza e informazioni per Microsoft SQL Server
- Opzioni di supporto per utenti aziendali
- Guida e commenti di SQL Server
Contribuire alla documentazione di SQL
Il contenuto SQL può essere modificato. L'autore delle modifiche contribuirà a migliorare la documentazione e verrà accreditato come collaboratore alla realizzazione della pagina.
Per maggiori informazioni, vedere Come contribuire alla documentazione di SQL Server