Condividi tramite


Risoluzione dei problemi relativi alle distribuzioni di SQL Edge di Azure

Importante

SQL Edge di Azure non supporta più la piattaforma ARM64.

Questo articolo fornisce informazioni sui possibili errori riscontrati durante la distribuzione e l'uso dei contenitori di SQL Edge di Azure e fornisce tecniche di risoluzione dei problemi per risolvere questi problemi.

SQL Edge di Azure supporta due modelli di distribuzione:

Risolvere i problemi relativi a dispositivi e distribuzioni IoT Edge

Se si verifica un errore durante la distribuzione di SQL Edge tramite Azure IoT Edge, assicurarsi che il servizio iotedge sia configurato e in esecuzione correttamente. I documenti seguenti possono essere utili per la risoluzione dei problemi relativi ad Azure IoT Edge:

Errori per i comandi Docker

Se vengono visualizzati errori per i comandi docker, verificare che il servizio Docker sia in esecuzione e provare a eseguirlo con autorizzazioni elevate.

Ad esempio, in Linux potrebbe essere visualizzato l'errore seguente quando si eseguono i comandi docker:

Cannot connect to the Docker daemon. Is the docker daemon running on this host?

Se si riceve questo errore in Linux, provare a eseguire gli stessi comandi preceduti da sudo. Se il tentativo non riesce, verificare che il servizio Docker sia in esecuzione e, se necessario, avviarlo.

sudo systemctl status docker
sudo systemctl start docker

In Windows assicurarsi di avviare PowerShell o il prompt dei comandi come amministratore.

Errori di avvio del contenitore SQL Edge di Azure

Se non è possibile eseguire il contenitore di SQL Edge, provare i test seguenti:

  • Se si usa Azure IoT Edge, assicurarsi che le immagini del modulo siano state scaricate correttamente e che le variabili di ambiente e le opzioni di creazione del contenitore siano specificate correttamente nel manifesto del modulo.

  • Se si usa la distribuzione basata su Docker o Kubernetes, assicurarsi che il comando docker run sia formato correttamente. Per altre informazioni, vedere Distribuire SQL Edge di Azure con Docker e Distribuire un contenitore SQL Edge di Azure in Kubernetes.

  • Se si riceve un errore come failed to create endpoint CONTAINER_NAME on network bridge. Error starting proxy: listen tcp 0.0.0.0:1433 bind: address already in use., si sta tentando di eseguire il mapping della porta del contenitore 1433 a una porta già in uso. Questo problema può verificarsi se si esegue SQL Edge localmente nel computer host. Può verificarsi anche se si avviano due contenitori di SQL Edge e si tenta di eseguirne il mapping per entrambi alla stessa porta host. In tal caso, usare il parametro -p per eseguire il mapping della porta del contenitore 1433 a una porta host diversa. Ad esempio:

    sudo docker run --cap-add SYS_PTRACE -e 'ACCEPT_EULA=1' -e 'MSSQL_SA_PASSWORD=yourStrong(!)Password' -p 1433:1433 --name azuresqledge -d mcr.microsoft.com/azure-sql-edge-developer.
    
  • Se si riceve un errore come Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.30tdout=1&tail=all: dial unix /var/run/docker.sock: connect: permission denied quando si tenta di avviare un contenitore, aggiungere l'utente al gruppo docker in Ubuntu. Disconnettersi e accedere di nuovo, perché questa modifica influisce sulle nuove sessioni.

    usermod -aG docker $USER
    
  • Controllare se sono presenti messaggi di errore dal contenitore.

    docker logs e69e056c702d
    
  • Se si usa un software di gestione dei contenitori, assicurarsi che supporti l'esecuzione come root dei processi dei contenitori. Il processo sqlservr nel contenitore viene eseguito come root.

  • Per impostazione predefinita, i contenitori di SQL Edge di Azure vengono eseguiti come utente non radice denominato mssql. Se si usano punti di montaggio o volumi di dati per rendere persistenti i dati, assicurarsi che l'utente mssql disponga delle autorizzazioni appropriate per il volume. Per altre informazioni, vedere Eseguire come utente non radice e Rendere permanenti i dati.

  • Se il contenitore Docker di SQL Edge viene chiuso immediatamente dopo l'avvio, controllare i log di Docker. Se si usa PowerShell in Windows con il comando docker run, usare le virgolette doppie anziché le virgolette singole. Con PowerShell Core usare le virgolette singole.

  • Esaminare i log degli errori di SQL Edge.

Errori di connessione a SQL Edge

Se non è possibile connettersi all'istanza di SQL Edge in esecuzione nel contenitore, provare i test seguenti:

  • Verificare che il contenitore di SQL Edge sia in esecuzione esaminando la colonna STATUS dell’output docker ps -a. In caso contrario, usare docker start <Container ID> per avviarlo.

  • Se è stato eseguito il mapping a una porta host non predefinita (non 1433), assicurarsi di specificare la porta nella stringa di connessione. È possibile visualizzare il mapping delle porte nella colonna PORTS dell'output docker ps -a. Per altre informazioni sulla connessione a SQL Edge di Azure, vedere Connettersi ed eseguire query su SQL Edge di Azure.

  • Se SQL Edge è stato distribuito in precedenza con un volume di dati o un contenitore di volumi di dati mappati e ora si usa il volume di dati o il contenitore del volume di dati mappato esistente, SQL Edge ignora il valore della variabile di ambiente MSSQL_SA_PASSWORD. Viene invece usata la password utente dell’associazione di sicurezza configurata in precedenza. Questo problema si verifica perché SQL Edge riutilizza i file di database esistenti master nel contenitore del volume o del volume di dati mappato. Se si verifica questo problema, è possibile usare le opzioni seguenti:

    • Connettersi usando la password usata in precedenza, se è ancora disponibile.
    • Configurare SQL Edge per utilizzare un contenitore di volume dati o volume mappato differente.
    • Rimuovere i file di database esistenti master (master.mdf e mastlog.mdf) dal contenitore del volume o del volume di dati mappato.
  • Esaminare i log degli errori di SQL Edge.

Log degli errori e della configurazione di SQL Edge

Per impostazione predefinita, i log degli errori di SQL Edge sono presenti nella directory /var/opt/mssql/log all'interno del contenitore e possono essere accessibili usando uno dei modi seguenti:

  • Se è stata montata una directory host in /var/opt/mssql al momento della creazione del contenitore, è invece possibile esaminare la sottodirectory log nel percorso mappato nell'host.

  • Usando una richiesta di comando interattivo per connettersi al contenitore. Se il contenitore non è in esecuzione, avviare prima di tutto il contenitore. Usare quindi un prompt dei comandi interattivo per esaminare i log. È possibile ottenere l'ID del contenitore eseguendo il comando docker ps.

    docker start <ContainerID>
    docker exec -it <ContainerID> "/bin/bash"
    

    Dalla sessione bash all'interno del contenitore eseguire i comandi seguenti:

    cd /var/opt/mssql/log
    cat errorlog
    
  • Se il contenitore SQL Edge è operativo e si è in grado di connettersi all'istanza usando gli strumenti client, è possibile usare la stored procedure sp_readerrorlog per leggere il contenuto del log degli errori di SQL Edge.

Eseguire comandi in un contenitore

Se è disponibile un contenitore in esecuzione, è possibile eseguire i comandi all'interno del contenitore da un terminale host.

Per ottenere l'ID del contenitore, eseguire:

docker ps -a

Per avviare un terminale bash nel contenitore, eseguire:

docker exec -it <Container ID> /bin/bash

A questo punto è possibile eseguire i comandi come se fossero in esecuzione nel terminale all'interno del contenitore. Al termine, digitare exit. Viene così chiusa la sessione di esecuzione interattiva dei comandi, ma l'esecuzione del contenitore continua.

Abilitare la registrazione dettagliata

Se il livello di log predefinito per il motore di streaming non fornisce informazioni sufficienti, la registrazione del debug per il motore di streaming può essere abilitata in SQL Edge. Per abilitare la registrazione di debug, aggiungere la variabile di ambiente RuntimeLogLevel=debug alla distribuzione di SQL Edge. Dopo aver abilitato la registrazione di debug, tentare di riprodurre il problema e controllare i log per eventuali messaggi o eccezioni pertinenti.

Nota

L'opzione Registrazione dettagliata deve essere usata solo per la risoluzione dei problemi e non per il normale carico di lavoro di produzione.

Passaggi successivi