Risolvere i problemi di SQL Server in Linux

Si applica a:SQL Server - Linux

Questo articolo descrive come risolvere i problemi relativi a SQL Server in esecuzione in Linux o in un contenitore Linux. Durante la risoluzione dei problemi SQL Server in Linux, ricordarsi di esaminare le funzionalità supportate e le limitazioni note sulla versione nelle note sulla versione per 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 localmente usando localhost, provare a usare l'indirizzo IP 127.0.0.1. È possibile che localhost non sia stato eseguito correttamente il mapping 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 contenitore del contenitore Docker di SQL Server creato più recente eseguendo il comando seguente (l'ID si trova nella CONTAINER ID colonna):

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 per la risoluzione dei problemi relativi a Docker, vedere Risolvere i problemi relativi ai contenitori Docker di SQL Server.

Accedere ai file di log

SQL Server motore di database registra il /var/opt/mssql/log/errorlog file sia nelle installazioni linux che nei 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. Controllare nella /var/opt/mssql/log directory i dump di Linux Core (.tar.gz2 estensione) o i minidump di SQL (.mdmp estensione).

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

In alcuni casi potrebbe essere necessario avviare un'istanza di SQL Server in modalità utente singolo usando l'opzione -mdi avvio . Per altre informazioni, vedere Parametri di avvio. Ad esempio, è possibile modificare le opzioni di configurazione del server o ripristinare un database danneggiato master o un altro database di sistema.

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

È consigliabile iniziare 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, è necessario modificare di nuovo la proprietà dei file di database di SQL Server all'utente mssql prima di avviare SQL Server con systemd. Ad esempio, per modificare la proprietà di tutti i file di database con /var/opt/mssql l'utente mssql , eseguire 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é è possibile eliminare tutti i dati di sistema di SQL Server configurati, incluse le informazioni sui database utente, ma non i database utente stessi.

Successivamente, è necessario collegare i database utente all'istanza. Elimina anche 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 dell'amministratore di sistema
  • Informazioni correlate al processo da msdb
  • Informazioni sulla posta elettronica database da msdb
  • Opzioni sp_configure

Non è possibile ricollegare i database utente crittografati 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 force-setup parametro

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

    È consigliabile iniziare sempre SQL Server in Linux con l'utente mssql per evitare problemi di avvio futuri.

  3. Dopo aver visualizzato il messaggio che avvisa del completamento del recupero, premere Ctrl+C. In questo modo 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 verifica 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, modificando il nome host, salvando ogni file e riavviando il computer.

  3. La password di amministrazione del sistema deve essere reimpostata, che arresta temporaneamente il servizio 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