Guida introduttiva: Installare SQL Server e creare un database nel sottosistema Windows per Linux (WSL 2)

Si applica a:SQL Server su Linux

Usare il sottosistema Windows per Linux (WSL) per eseguire un ambiente Linux direttamente nel computer Windows, senza la necessità di una macchina virtuale o di un doppio avvio. WSL offre un'esperienza facile e produttiva per gli sviluppatori che vogliono usare sia Windows che Linux contemporaneamente. Per altre informazioni, vedere Che cos'è il sottosistema Windows per Linux?

SQL Server in WSL è destinato solo all'uso dello sviluppo

SQL Server in WSL 2 è destinato solo a scopi di sviluppo ed è not supportato per i carichi di lavoro di produzione. Eseguire SQL Server in ambienti WSL in una delle piattaforme supportate per la versione di SQL Server che si intende eseguire.

Per eventuali problemi correlati al supporto, è possibile ottenere supporto da Microsoft.

Introduzione a SQL Server in WSL 2

Esistono due modi per iniziare a usare SQL Server in WSL 2:

  • Installare SQL Server come servizio systemd, che potrai gestire con i comandi systemctl. Assicurarsi di abilitare systemd in WSL. Per altre informazioni, vedere come abilitare systemd.

  • Distribuire contenitori di SQL Server in WSL. Per questa opzione, è necessario installare un motore di contenitori Linux in WSL, ad esempio Docker o Podman, e quindi distribuire i contenitori di SQL Server.

Prerequisiti

Installare WSL 2. Assicurarsi di eseguire Windows 10 versione 2004 o successiva (Build 19041 e versioni successive) o Windows 11. Per installare WSL, aprire un prompt dei comandi di PowerShell o Windows in modalità amministratore e seguire le istruzioni nella sezione successiva.

Per istruzioni dettagliate, vedere Come installare Linux in Windows con WSL. Per informazioni sulla configurazione dell'ambiente WSL per lo sviluppo, vedere Configurare un ambiente di sviluppo WSL.

Installare SQL Server in WSL

Questa sezione descrive i passaggi per configurare una distribuzione Linux in WSL e come installare SQL Server in tale distribuzione Linux.

Scegliere la distribuzione linux

Elencare tutte le distribuzioni valide che è possibile installare in WSL:

wsl -l -o

L'output è simile al seguente esempio:

The following is a list of valid distributions that can be installed.
Install using 'wsl.exe --install <Distro>'.

NAME                            FRIENDLY NAME
Ubuntu                          Ubuntu
Debian                          Debian GNU/Linux
kali-linux                      Kali Linux Rolling
Ubuntu-18.04                    Ubuntu 18.04 LTS
Ubuntu-20.04                    Ubuntu 20.04 LTS
Ubuntu-22.04                    Ubuntu 22.04 LTS
Ubuntu-24.04                    Ubuntu 24.04 LTS
OracleLinux_7_9                 Oracle Linux 7.9
OracleLinux_8_7                 Oracle Linux 8.7
OracleLinux_9_1                 Oracle Linux 9.1
openSUSE-Leap-15.6              openSUSE Leap 15.6
SUSE-Linux-Enterprise-15-SP5    SUSE Linux Enterprise 15 SP5
SUSE-Linux-Enterprise-15-SP6    SUSE Linux Enterprise 15 SP6
openSUSE-Tumbleweed             openSUSE Tumbleweed

Per questa guida introduttiva, installare Ubuntu 22.04 e quindi installare SQL Server 2022 (16.x) in tale distribuzione.

Per installare Ubuntu 22.04, eseguire il comando seguente. Prendere nota dell'account utente e della password UNIX. In questo esempio usare wsluser come nome utente.

wsl --install -d Ubuntu-22.04

L'output è simile all'esempio seguente. Alla fine, mostra che si è connessi alla shell Bash di Ubuntu 22.04.

Installing: Ubuntu 22.04 LTS
Ubuntu 22.04 LTS has been installed.
Launching Ubuntu 22.04 LTS...
Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: wsluser
New password:
Retype new password:
passwd: password updated successfully
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.167.4-microsoft-standard-WSL2 x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Tue Dec  3 00:32:14 IST 2024

  System load:  0.33                Processes:             32
  Usage of /:   0.1% of 1006.85GB   Users logged in:       0
  Memory usage: 2%                  IPv4 address for eth0: 10.18.123.249
  Swap usage:   0%

This message is shown once a day. To disable it please create the
/home/wsluser/.hushlogin file.

Installare SQL Server

Dopo aver eseguito l'accesso alla shell Bash di Ubuntu 22.04, seguire i passaggi descritti in Quickstart: Installare SQL Server e creare un database in Ubuntu per installare SQL Server 2022 (16.x).

È anche necessario installare gli strumenti da riga di comando di SQL Server.

Ottenere l'indirizzo IP

È possibile connettersi a un'istanza di SQL Server usando qualsiasi strumento client di SQL Server familiare, ad esempio sqlcmd, SQL Server Management Studio (SSMS) o l'estensione MSSQL per Visual Studio Code.

Per trovare l'indirizzo IP, eseguire il ifconfig comando :

ifconfig

L'output è simile al seguente esempio:

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.19.50.241  netmask 255.255.240.0  broadcast 10.19.63.255
        inet6 fe80::215:5dff:fe76:c05d  prefixlen 64  scopeid 0x20<link>
        ether 00:15:5d:76:c0:5d  txqueuelen 1000  (Ethernet)
        RX packets 2146  bytes 1452448 (1.4 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1905  bytes 345288 (345.2 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 2039  bytes 4144340 (4.1 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2039  bytes 4144340 (4.1 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Distribuire contenitori di SQL Server in WSL

Per distribuire i contenitori in WSL, è prima necessario installare un motore contenitore Linux, ad esempio Docker. Per altre informazioni, vedere Introduzione ai contenitori remoti Docker in WSL. Dopo aver installato il motore Docker, distribuire l'immagine del contenitore di SQL Server come indicato di seguito.

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" \
-e "MSSQL_PID=Developer" -e "MSSQL_AGENT_ENABLED=true" \
-p 14333:1433 --name sqlcontainerwsl --hostname sqlcontainerwsl \
-d mcr.microsoft.com/mssql/server:2022-latest

Note

La password deve seguire la politica predefinita di SQL Server password. 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.

Aggiungere l'archiviazione permanente con WSL per i contenitori di SQL Server

Creare volumi di dati come descritto in Montare una directory host come volume di dati.

Ad esempio, eseguire il comando seguente per configurare un volume denominato sql_volume che si trova in /var/opt/mssql/.

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" \
-e "MSSQL_PID=Developer" -e "MSSQL_AGENT_ENABLED=true" \
-p 14333:1433 --name sqlcontainerwsl --hostname sqlcontainerwsl \
-v sql_volume:/var/opt/mssql/ \
-d mcr.microsoft.com/mssql/server:2022-latest

Anche se si esegue il wsl --terminate comando, non si perdono i dati. Quando si avvia di nuovo WSL ed si esegue il comando docker run per eseguire la distribuzione usando il volume sql_volume, tutti i dati rimangono intatti.

Se si vuole eliminare il volume persistente, assicurarsi di arrestare e rimuovere il contenitore che usa il volume e quindi eseguire il comando seguente.

docker volume rm sql_volume

Remarks

È possibile configurare la maggior parte delle funzionalità supportate per SQL Server in Linux a scopo di sviluppo, ad eccezione delle funzionalità di continuità aziendale che dipendono dagli stack di clustering. Queste funzionalità, ad esempio Pacemaker o HPE Serviceguard, non sono supportate in WSL.

Per un elenco completo delle funzionalità non supportate per SQL Server in Linux, vedere Edition e le funzionalità supportate di SQL Server 2022 in Linux.

Connettersi in locale

La procedura seguente usa l'utilità sqlcmd per connettersi localmente alla nuova istanza di SQL Server. Scaricare e installare l'utilità sqlcmd per Windows, Linux e macOS.

Caution

La password deve seguire la politica predefinita di SQL Server password. 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.

  1. Eseguire sqlcmd con i parametri per il nome SQL Server (-S), il nome utente (-U) e la password (-P). In questa esercitazione ci si connette in locale, quindi il nome del server è localhost. Il nome utente è sa e la password è quella specificata per l'account sa durante l'installazione.

    sqlcmd -S localhost -U sa -P '<password>'
    

    Note

    Le versioni più recenti di sqlcmd sono protette per impostazione predefinita. Per altre informazioni sulla crittografia della connessione, vedere Utilità sqlcmd per Windows, Linux e macOS. Se la connessione non riesce, è possibile aggiungere l'opzione -No per specificare sqlcmd che la crittografia è facoltativa, non obbligatoria.

    È possibile omettere la password nella riga di comando in modo che venga richiesto di immetterla.

    Se successivamente si decide di connettersi da remoto, specifica il nome del computer o l'indirizzo IP per il parametro -S e assicurati che la porta 1433 sia aperta nel firewall.

  2. In caso di esito positivo, si dovrebbe accedere a un sqlcmd prompt dei comandi: 1>.

  3. Se si verifica un errore di connessione, provare a diagnosticare il problema dal messaggio di errore. Rivedere poi i consigli per la risoluzione dei problemi di connessione.

Creare e interrogare i dati

Le sezioni seguenti illustrano l'uso di sqlcmd per creare un nuovo database, aggiungere dati ed eseguire una query di base.

Per ulteriori informazioni sulla scrittura di istruzioni e query Transact-SQL, vedere Esercitazione: Come scrivere istruzioni e query Transact-SQL.

Creare un nuovo database

La seguente procedura consente di creare un nuovo database denominato TestDB.

  1. Dal prompt dei comandi sqlcmd incollare il comando Transact-SQL seguente per creare un database di test:

    CREATE DATABASE TestDB;
    
  2. Nella riga successiva scrivere una query per restituire il nome di tutti i database nel server:

    SELECT Name
    FROM sys.databases;
    
  3. I due comandi precedenti non vengono eseguiti immediatamente. È necessario digitare GO in una nuova riga per eseguire i comandi precedenti:

    GO
    

Immettere dati

Creare poi una nuova tabella dbo.Inventory e inserire due nuove righe.

  1. Dal prompt dei comandi sqlcmd, passa al nuovo database TestDB.

    USE TestDB;
    
  2. Creare una nuova tabella denominata dbo.Inventory:

    CREATE TABLE dbo.Inventory
    (
        id INT,
        name NVARCHAR (50),
        quantity INT,
        PRIMARY KEY (id)
    );
    
  3. Inserire i dati nella nuova tabella:

    INSERT INTO dbo.Inventory
    VALUES (1, 'banana', 150);
    
    INSERT INTO dbo.Inventory
    VALUES (2, 'orange', 154);
    
  4. Digitare GO per eseguire i comandi precedenti:

    GO
    

Selezionare i dati

A questo punto, eseguire una query per restituire i dati dalla tabella dbo.Inventory.

  1. Dal prompt dei comandi sqlcmd, immettere una query che restituisca le righe della tabella dbo.Inventory in cui la quantità è maggiore di 152.

    SELECT *
    FROM dbo.Inventory
    WHERE quantity > 152;
    
  2. Eseguire il comando seguente:

    GO
    

Uscire dal prompt dei comandi di sqlcmd

Per terminare la sqlcmd sessione, digitare QUIT:

QUIT

Procedure consigliate per migliorare le prestazioni

Dopo l'installazione di SQL Server in Linux, esaminare le procedure consigliate per configurare Linux e SQL Server in modo da ottimizzare le prestazioni per gli scenari di produzione. Per ulteriori informazioni consulta:

Strumenti dati multipiattaforma

Oltre a sqlcmd, è possibile usare gli strumenti multipiattaforma seguenti per gestire SQL Server:

Strumento Descrizione
Visual Studio Code Editor di codice GUI multipiattaforma che esegue istruzioni Transact-SQL con l'estensione MSSQL.
PowerShell Strumento multipiattaforma di automazione e configurazione basato sui cmdlet.

Connettersi da Windows

Gli strumenti di SQL Server in Windows consentono di connettersi alle istanze di SQL Server in Linux nello stesso modo in cui si connettono a qualsiasi istanza remota di SQL Server.

Se si dispone di un computer Windows in grado di connettersi al computer Linux, provare gli stessi passaggi descritti in questo articolo da un prompt dei comandi Windows che esegue sqlcmd. È necessario usare il nome o l'indirizzo IP del computer Linux di destinazione invece di localhost e assicurarsi che la porta TCP 1433 sia aperta nel computer di SQL Server. Nel caso di problemi di connessione da Windows, vedere i consigli per la risoluzione dei problemi di connessione.

Per altri strumenti che vengono eseguiti in Windows, ma si connettono a SQL Server in Linux, vedere:

Altri scenari di distribuzione

Per altri scenari di installazione, vedere le risorse seguenti:

Per le risposte alle domande frequenti, vedere Domande frequenti su SQL Server in Linux.

Contribuire alla documentazione di SQL

Sei a conoscenza che puoi modificare tu stesso il contenuto SQL? In tal caso, non solo contribuisci a migliorare la documentazione, ma vieni anche riconosciuto come collaboratore della pagina.

Per altre informazioni, vedere Modifica la documentazione di Microsoft Learn.