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 nelle 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.

    Suggerimento

    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"
    

    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 Docker 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 Docker di SQL Server

È 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):

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 a Docker, 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, ha impedito 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 è stato 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
  • Password per l'account di accesso Software Assurance.
  • 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.

  1. Arrestare il motore di database di SQL Server

    sudo systemctl stop mssql-server
    
  2. 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.

  3. Dopo aver visualizzato il messaggio che avvisa del completamento del recupero, premere Ctrl+C. SQL Server viene arrestato.

  4. Riconfigurare la password dell'amministratore di sistema.

    sudo /opt/mssql/bin/mssql-conf set-sa-password
    
  5. 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.

Problemi comuni

  1. 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.

  2. 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.

  3. La password di amministrazione del sistema (SA) deve essere reimpostata. Questa operazione causa l'interruzione temporanea del servizio di SQL Server.

    Se la password dell'amministratore di sistema è stata dimenticata o è necessario reimpostarla per un altro motivo, seguire questa procedura.

    Accedere al terminale host, eseguire i comandi seguenti e seguire le istruzioni per reimpostare la password dell'amministratore di sistema:

    sudo systemctl stop mssql-server
    sudo /opt/mssql/bin/mssql-conf setup
    
  4. I caratteri speciali nelle password di accesso causano errori o impediscono l'accesso.

    Se nella password di accesso di SQL Server sono presenti determinati caratteri, potrebbe essere necessario applicare un carattere di escape con una barra rovesciata a tali caratteri quando vengono usati in una riga di comando di Linux. È 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:

    Non funziona

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

    Funziona:

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

Ottenere aiuto

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 altre informazioni, vedere Come contribuire alla documentazione di SQL Server