Ripristinare un database di SQL Server in un contenitore Docker per LinuxRestore a SQL Server database in a Linux Docker container

SI APPLICA A: sìSQL Server (solo Linux) noDatabase SQL di Azure noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse APPLIES TO: yesSQL Server (Linux only) noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Questa esercitazione illustra come spostare e ripristinare un file di backup di SQL Server in un'immagine del contenitore di SQL Server 2017 per Linux in esecuzione in Docker.This tutorial demonstrates how to move and restore a SQL Server backup file into a SQL Server 2017 Linux container image running on Docker.

Questa esercitazione illustra come spostare e ripristinare un file di backup di SQL Server in un'immagine del contenitore di SQL Server 2019 su Linux in esecuzione in Docker.This tutorial demonstrates how to move and restore a SQL Server backup file into a SQL Server 2019 Linux container image running on Docker.

  • Effettuare il pull ed eseguire l'immagine del contenitore di SQL Server per Linux più recente.Pull and run the latest SQL Server Linux container image.
  • Copiare il file di database Wide World Importers nel contenitore.Copy the Wide World Importers database file into the container.
  • Ripristinare il database nel contenitore.Restore the database in the container.
  • Eseguire istruzioni Transact-SQL per visualizzare e modificare il database.Run Transact-SQL statements to view and modify the database.
  • Eseguire il backup del database modificato.Backup the modified database.

PrerequisitesPrerequisites

Effettuare il pull ed eseguire l'immagine del contenitorePull and run the container image

  1. Aprire un terminale Bash in Linux/Mac o una sessione di PowerShell con privilegi elevati in Windows.Open a bash terminal on Linux/Mac or an elevated PowerShell session on Windows.

  2. Eseguire il pull dell'immagine del contenitore di SQL Server 2017 su Linux dall'hub Docker.Pull the SQL Server 2017 Linux container image from Docker Hub.

    sudo docker pull mcr.microsoft.com/mssql/server:2017-latest
    
    docker pull mcr.microsoft.com/mssql/server:2017-latest
    

    Suggerimento

    In questa esercitazione vengono forniti esempi di comandi di Docker sia per la shell Bash (Linux/Mac) che per PowerShell (Windows).Throughout this tutorial, docker command examples are given for both the bash shell (Linux/Mac) and PowerShell (Windows).

  3. Per eseguire l'immagine del contenitore con Docker, è possibile usare il comando seguente:To run the container image with Docker, you can use the following command:

    sudo docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' \
       --name 'sql1' -p 1401:1433 \
       -v sql1data:/var/opt/mssql \
       -d mcr.microsoft.com/mssql/server:2017-latest
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" `
       --name "sql1" -p 1401:1433 `
       -v sql1data:/var/opt/mssql `
       -d mcr.microsoft.com/mssql/server:2017-latest
    

    Questo comando crea un contenitore di SQL Server 2017 con l'edizione Developer (impostazione predefinita).This command creates a SQL Server 2017 container with the Developer edition (default). La porta 1433 di SQL Server è esposta nell'host come porta 1401.SQL Server port 1433 is exposed on the host as port 1401. Il parametro facoltativo -v sql1data:/var/opt/mssql crea un contenitore del volume di dati denominato sql1ddata,The optional -v sql1data:/var/opt/mssql parameter creates a data volume container named sql1ddata. che viene usato per salvare in modo permanente i dati creati da SQL Server.This is used to persist the data created by SQL Server.

    Nota

    Il processo di esecuzione delle edizioni di SQL Server di produzione nei contenitori è leggermente diverso.The process for running production SQL Server editions in containers is slightly different. Per altre informazioni, vedere Run production container images (Eseguire immagini del contenitore di produzione).For more information, see Run production container images. Se si usano gli stessi nomi di contenitore e le stesse porte, il resto di questa procedura dettagliata funziona comunque con i contenitori di produzione.If you use the same container names and ports, the rest of this walkthrough still works with production containers.

  4. Per visualizzare i contenitori di Docker, usare il comando docker ps.To view your Docker containers, use the docker ps command.

    sudo docker ps -a
    
    docker ps -a
    
  5. Se nella colonna STATUS è impostato lo statoUp, SQL Server è in esecuzione nel contenitore e in ascolto sulla porta specificata nella colonna PORTS.If the STATUS column shows a status of Up, then SQL Server is running in the container and listening on the port specified in the PORTS column. Se la colonna STATUS del contenitore di SQL Server è impostata su Exited, vedere la sezione relativa alla risoluzione dei problemi della guida alla configurazione.If the STATUS column for your SQL Server container shows Exited, see the Troubleshooting section of the configuration guide.

$ sudo docker ps -a

CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS                    NAMES
941e1bdf8e1d        mcr.microsoft.com/mssql/server/mssql-server-linux   "/bin/sh -c /opt/m..."   About an hour ago   Up About an hour    0.0.0.0:1401->1433/tcp   sql1
  1. Aprire un terminale Bash in Linux/Mac o una sessione di PowerShell con privilegi elevati in Windows.Open a bash terminal on Linux/Mac or an elevated PowerShell session on Windows.

  2. Eseguire il pull dell'immagine del contenitore di SQL Server 2019 su Linux da Docker Hub.Pull the SQL Server 2019 Linux container image from Docker Hub.

    sudo docker pull mcr.microsoft.com/mssql/server:2019-GA-ubuntu-16.04
    
    docker pull mcr.microsoft.com/mssql/server:2019-GA-ubuntu-16.04
    

    Suggerimento

    In questa esercitazione vengono forniti esempi di comandi di Docker sia per la shell Bash (Linux/Mac) che per PowerShell (Windows).Throughout this tutorial, docker command examples are given for both the bash shell (Linux/Mac) and PowerShell (Windows).

  3. Per eseguire l'immagine del contenitore con Docker, è possibile usare il comando seguente:To run the container image with Docker, you can use the following command:

    sudo docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' \
       --name 'sql1' -p 1401:1433 \
       -v sql1data:/var/opt/mssql \
       -d mcr.microsoft.com/mssql/server:2019-GA-ubuntu-16.04
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" `
       --name "sql1" -p 1401:1433 `
       -v sql1data:/var/opt/mssql `
       -d mcr.microsoft.com/mssql/server:2019-GA-ubuntu-16.04
    

    Questo comando crea un contenitore di SQL Server 2019 con l'edizione Developer (impostazione predefinita).This command creates a SQL Server 2019 container with the Developer edition (default). La porta 1433 di SQL Server è esposta nell'host come porta 1401.SQL Server port 1433 is exposed on the host as port 1401. Il parametro facoltativo -v sql1data:/var/opt/mssql crea un contenitore del volume di dati denominato sql1ddata,The optional -v sql1data:/var/opt/mssql parameter creates a data volume container named sql1ddata. che viene usato per salvare in modo permanente i dati creati da SQL Server.This is used to persist the data created by SQL Server.

  4. Per visualizzare i contenitori di Docker, usare il comando docker ps.To view your Docker containers, use the docker ps command.

    sudo docker ps -a
    
    docker ps -a
    
  5. Se nella colonna STATUS è impostato lo statoUp, SQL Server è in esecuzione nel contenitore e in ascolto sulla porta specificata nella colonna PORTS.If the STATUS column shows a status of Up, then SQL Server is running in the container and listening on the port specified in the PORTS column. Se la colonna STATUS del contenitore di SQL Server è impostata su Exited, vedere la sezione relativa alla risoluzione dei problemi della guida alla configurazione.If the STATUS column for your SQL Server container shows Exited, see the Troubleshooting section of the configuration guide.

    $ sudo docker ps -a
    
    CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS                    NAMES
    941e1bdf8e1d        mcr.microsoft.com/mssql/server/mssql-server-linux   "/bin/sh -c /opt/m..."   About an hour ago   Up About an hour    0.0.0.0:1401->1433/tcp   sql1
    

Cambiare la password dell'amministratore di sistemaChange the SA password

L'account SA è un account di amministratore di sistema dell'istanza di SQL Server creato durante l'installazione.The SA account is a system administrator on the SQL Server instance that's created during setup. Dopo aver creato il contenitore SQL Server, la variabile di ambiente MSSQL_SA_PASSWORD specificata diventa individuabile eseguendo echo $MSSQL_SA_PASSWORD nel contenitore.After you create your SQL Server container, the MSSQL_SA_PASSWORD environment variable you specified is discoverable by running echo $MSSQL_SA_PASSWORD in the container. Per motivi di sicurezza, modificare la password dell'amministratore di sistema:For security purposes, change your SA password:

  1. Scegliere una password complessa da usare per l'utente SA.Choose a strong password to use for the SA user.

  2. Usare docker exec per eseguire l'utilità sqlcmd per modificare la password tramite un'istruzione Transact-SQL.Use docker exec to run the sqlcmd utility to change the password through a Transact-SQL statement. Sostituire <YourStrong!Passw0rd> e <YourNewStrong!Passw0rd> con valori di password:Replace <YourStrong!Passw0rd> and <YourNewStrong!Passw0rd> with your own password values:

    sudo docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd \
       -S localhost -U SA -P '<YourStrong!Passw0rd>' \
       -Q 'ALTER LOGIN SA WITH PASSWORD="<YourNewStrong!Passw0rd>"'
    
    docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd `
       -S localhost -U SA -P "<YourStrong!Passw0rd>" `
       -Q "ALTER LOGIN SA WITH PASSWORD='<YourNewStrong!Passw0rd>'"
    

Copiare un file di backup nel contenitoreCopy a backup file into the container

Questa esercitazione usa il database di esempio Wide World Importers.This tutorial uses the Wide World Importers sample database. Usare la procedura seguente per scaricare e copiare il file di backup del database Wide World Importers nel contenitore di SQL Server.Use the following steps to download and copy the Wide World Importers database backup file into your SQL Server container.

  1. Usare prima di tutto docker exec per creare una cartella di backup.First, use docker exec to create a backup folder. Il comando seguente crea una directory /var/opt/mssql/backup nel contenitore di SQL Server.The following command creates a /var/opt/mssql/backup directory inside the SQL Server container.

    sudo docker exec -it sql1 mkdir /var/opt/mssql/backup
    
    docker exec -it sql1 mkdir /var/opt/mssql/backup
    
  2. Scaricare quindi il file WideWorldImporters-Full.bak nel computer host.Next, download the WideWorldImporters-Full.bak file to your host machine. I comandi seguenti consentono di passare alla directory home/user e di scaricare il file di backup come wwi.bak.The following commands navigate to the home/user directory and downloads the backup file as wwi.bak.

    cd ~
    curl -L -o wwi.bak 'https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak'
    
    curl -OutFile "wwi.bak" "https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak"
    
  3. Usare docker cp per copiare il file di backup nel contenitore nella directory /var/opt/mssql/backup.Use docker cp to copy the backup file into the container in the /var/opt/mssql/backup directory.

    sudo docker cp wwi.bak sql1:/var/opt/mssql/backup
    
    docker cp wwi.bak sql1:/var/opt/mssql/backup
    

Ripristinare il databaseRestore the database

Il file di backup si trova ora all'interno del contenitore.The backup file is now located inside the container. Prima di ripristinare il backup, è importante conoscere i nomi dei file logici e i tipi di file all'interno del backup.Before restoring the backup, it is important to know the logical file names and file types inside the backup. I comandi Transact-SQL seguenti esaminano il backup ed eseguono il ripristino usando sqlcmd nel contenitore.The following Transact-SQL commands inspect the backup and perform the restore using sqlcmd in the container.

Suggerimento

Questa esercitazione usa sqlcmd nel contenitore, perché questo strumento è preinstallato nel contenitore,This tutorial uses sqlcmd inside the container, because the container comes with this tool pre-installed. ma è anche possibile eseguire le istruzioni Transact-SQL con altri strumenti client esterni al contenitore, ad esempio Visual Studio Code o SQL Server Management Studio.However, you can also run Transact-SQL statements with other client tools outside of the container, such as Visual Studio Code or SQL Server Management Studio. Per connettersi, usare la porta host di cui è stato eseguito il mapping alla porta 1433 nel contenitore.To connect, use the host port that was mapped to port 1433 in the container. In questo esempio si tratta di localhost,1401 nel computer host e di Host_IP_Address,1401 in remoto.In this example, that is localhost,1401 on the host machine and Host_IP_Address,1401 remotely.

  1. Eseguire sqlcmd nel contenitore per elencare i nome dei file logici e i percorsi all'interno del backup.Run sqlcmd inside the container to list out logical file names and paths inside the backup. Questa operazione viene eseguita con l'istruzione Transact-SQL RESTORE FILELISTONLY.This is done with the RESTORE FILELISTONLY Transact-SQL statement.

    sudo docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd -S localhost \
       -U SA -P '<YourNewStrong!Passw0rd>' \
       -Q 'RESTORE FILELISTONLY FROM DISK = "/var/opt/mssql/backup/wwi.bak"' \
       | tr -s ' ' | cut -d ' ' -f 1-2
    
    docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd -S localhost `
       -U SA -P "<YourNewStrong!Passw0rd>" `
       -Q "RESTORE FILELISTONLY FROM DISK = '/var/opt/mssql/backup/wwi.bak'"
    

    L'output dovrebbe essere simile al seguente:You should see output similar to the following:

    LogicalName   PhysicalName
    ------------------------------------------
    WWI_Primary   D:\Data\WideWorldImporters.mdf
    WWI_UserData   D:\Data\WideWorldImporters_UserData.ndf
    WWI_Log   E:\Log\WideWorldImporters.ldf
    WWI_InMemory_Data_1   D:\Data\WideWorldImporters_InMemory_Data_1
    
  2. Chiamare il comando RESTORE DATABASE per ripristinare il database nel contenitore.Call the RESTORE DATABASE command to restore the database inside the container. Specificare i nuovi percorsi per ogni file del passaggio precedente.Specify new paths for each of the files in the previous step.

    sudo docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd \
       -S localhost -U SA -P '<YourNewStrong!Passw0rd>' \
       -Q 'RESTORE DATABASE WideWorldImporters FROM DISK = "/var/opt/mssql/backup/wwi.bak" WITH MOVE "WWI_Primary" TO "/var/opt/mssql/data/WideWorldImporters.mdf", MOVE "WWI_UserData" TO "/var/opt/mssql/data/WideWorldImporters_userdata.ndf", MOVE "WWI_Log" TO "/var/opt/mssql/data/WideWorldImporters.ldf", MOVE "WWI_InMemory_Data_1" TO "/var/opt/mssql/data/WideWorldImporters_InMemory_Data_1"'
    
    docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd `
       -S localhost -U SA -P "<YourNewStrong!Passw0rd>" `
       -Q "RESTORE DATABASE WideWorldImporters FROM DISK = '/var/opt/mssql/backup/wwi.bak' WITH MOVE 'WWI_Primary' TO '/var/opt/mssql/data/WideWorldImporters.mdf', MOVE 'WWI_UserData' TO '/var/opt/mssql/data/WideWorldImporters_userdata.ndf', MOVE 'WWI_Log' TO '/var/opt/mssql/data/WideWorldImporters.ldf', MOVE 'WWI_InMemory_Data_1' TO '/var/opt/mssql/data/WideWorldImporters_InMemory_Data_1'"
    

    L'output dovrebbe essere simile al seguente:You should see output similar to the following:

    Processed 1464 pages for database 'WideWorldImporters', file 'WWI_Primary' on file 1.
    Processed 53096 pages for database 'WideWorldImporters', file 'WWI_UserData' on file 1.
    Processed 33 pages for database 'WideWorldImporters', file 'WWI_Log' on file 1.
    Processed 3862 pages for database 'WideWorldImporters', file 'WWI_InMemory_Data_1' on file 1.
    Converting database 'WideWorldImporters' from version 852 to the current version 869.
    Database 'WideWorldImporters' running the upgrade step from version 852 to version 853.
    Database 'WideWorldImporters' running the upgrade step from version 853 to version 854.
    Database 'WideWorldImporters' running the upgrade step from version 854 to version 855.
    Database 'WideWorldImporters' running the upgrade step from version 855 to version 856.
    Database 'WideWorldImporters' running the upgrade step from version 856 to version 857.
    Database 'WideWorldImporters' running the upgrade step from version 857 to version 858.
    Database 'WideWorldImporters' running the upgrade step from version 858 to version 859.
    Database 'WideWorldImporters' running the upgrade step from version 859 to version 860.
    Database 'WideWorldImporters' running the upgrade step from version 860 to version 861.
    Database 'WideWorldImporters' running the upgrade step from version 861 to version 862.
    Database 'WideWorldImporters' running the upgrade step from version 862 to version 863.
    Database 'WideWorldImporters' running the upgrade step from version 863 to version 864.
    Database 'WideWorldImporters' running the upgrade step from version 864 to version 865.
    Database 'WideWorldImporters' running the upgrade step from version 865 to version 866.
    Database 'WideWorldImporters' running the upgrade step from version 866 to version 867.
    Database 'WideWorldImporters' running the upgrade step from version 867 to version 868.
    Database 'WideWorldImporters' running the upgrade step from version 868 to version 869.
    RESTORE DATABASE successfully processed 58455 pages in 18.069 seconds (25.273 MB/sec).
    

Verificare il database ripristinatoVerify the restored database

Eseguire la query seguente per visualizzare un elenco di nomi di database nel contenitore:Run the following query to display a list of database names in your container:

sudo docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd \
   -S localhost -U SA -P '<YourNewStrong!Passw0rd>' \
   -Q 'SELECT Name FROM sys.Databases'
docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd `
   -S localhost -U SA -P "<YourNewStrong!Passw0rd>" `
   -Q "SELECT Name FROM sys.Databases"

Nell'elenco di database sarà presente WideWorldImporters.You should see WideWorldImporters in the list of databases.

Apportare una modificaMake a change

I passaggi seguenti apportano una modifica nel database.The following steps make a change in the database.

  1. Eseguire una query per visualizzare i primi 10 elementi della tabella Warehouse.StockItems.Run a query to view the top 10 items in the Warehouse.StockItems table.

    sudo docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd \
       -S localhost -U SA -P '<YourNewStrong!Passw0rd>' \
       -Q 'SELECT TOP 10 StockItemID, StockItemName FROM WideWorldImporters.Warehouse.StockItems ORDER BY StockItemID'
    
    docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd `
       -S localhost -U SA -P "<YourNewStrong!Passw0rd>" `
       -Q "SELECT TOP 10 StockItemID, StockItemName FROM WideWorldImporters.Warehouse.StockItems ORDER BY StockItemID"
    

    Verrà visualizzato un elenco di identificatori e nomi degli elementi:You should see a list of item identifiers and names:

    StockItemID StockItemName
    ----------- -----------------
              1 USB missile launcher (Green)
              2 USB rocket launcher (Gray)
              3 Office cube periscope (Black)
              4 USB food flash drive - sushi roll
              5 USB food flash drive - hamburger
              6 USB food flash drive - hot dog
              7 USB food flash drive - pizza slice
              8 USB food flash drive - dim sum 10 drive variety pack
              9 USB food flash drive - banana
             10 USB food flash drive - chocolate bar
    
  2. Aggiornare la descrizione del primo elemento con l'istruzione UPDATE seguente:Update the description of the first item with the following UPDATE statement:

    sudo docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd \
       -S localhost -U SA -P '<YourNewStrong!Passw0rd>' \
       -Q 'UPDATE WideWorldImporters.Warehouse.StockItems SET StockItemName="USB missile launcher (Dark Green)" WHERE StockItemID=1; SELECT StockItemID, StockItemName FROM WideWorldImporters.Warehouse.StockItems WHERE StockItemID=1'
    
    docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd `
       -S localhost -U SA -P "<YourNewStrong!Passw0rd>" `
       -Q "UPDATE WideWorldImporters.Warehouse.StockItems SET StockItemName='USB missile launcher (Dark Green)' WHERE StockItemID=1; SELECT StockItemID, StockItemName FROM WideWorldImporters.Warehouse.StockItems WHERE StockItemID=1"
    

    L'output dovrebbe essere simile al testo seguente:You should see output similar to the following text:

    (1 rows affected)
    StockItemID StockItemName
    ----------- ------------------------------------
              1 USB missile launcher (Dark Green)
    

Creare un nuovo backupCreate a new backup

Dopo aver ripristinato il database in un contenitore, è anche possibile creare regolarmente backup del database all'interno del contenitore in esecuzione.After you've restored your database into a container, you might also want to regularly create database backups inside the running container. I passaggi seguono uno schema simile a quello dei passaggi precedenti, ma in ordine inverso.The steps follow a similar pattern to the previous steps but in reverse.

  1. Usare il comando Transact-SQL BACKUP DATABASE per creare un backup del database nel contenitore.Use the BACKUP DATABASE Transact-SQL command to create a database backup in the container. Questa esercitazione crea un nuovo file di backup, wwi_2.bak, nella directory /var/opt/mssql/backup creata in precedenza.This tutorial creates a new backup file, wwi_2.bak, in the previously created /var/opt/mssql/backup directory.

    sudo docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd \
       -S localhost -U SA -P '<YourNewStrong!Passw0rd>' \
       -Q "BACKUP DATABASE [WideWorldImporters] TO DISK = N'/var/opt/mssql/backup/wwi_2.bak' WITH NOFORMAT, NOINIT, NAME = 'WideWorldImporters-full', SKIP, NOREWIND, NOUNLOAD, STATS = 10"
    
    docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd `
       -S localhost -U SA -P "<YourNewStrong!Passw0rd>" `
       -Q "BACKUP DATABASE [WideWorldImporters] TO DISK = N'/var/opt/mssql/backup/wwi_2.bak' WITH NOFORMAT, NOINIT, NAME = 'WideWorldImporters-full', SKIP, NOREWIND, NOUNLOAD, STATS = 10"
    

    L'output dovrebbe essere simile al seguente:You should see output similar to the following:

    10 percent processed.
    20 percent processed.
    30 percent processed.
    40 percent processed.
    50 percent processed.
    60 percent processed.
    70 percent processed.
    Processed 1200 pages for database 'WideWorldImporters', file 'WWI_Primary' on file 1.
    Processed 53096 pages for database 'WideWorldImporters', file 'WWI_UserData' on file 1.
    80 percent processed.
    Processed 3865 pages for database 'WideWorldImporters', file 'WWI_InMemory_Data_1' on file 1.
    Processed 938 pages for database 'WideWorldImporters', file 'WWI_Log' on file 1.
    100 percent processed.
    BACKUP DATABASE successfully processed 59099 pages in 25.056 seconds (18.427 MB/sec).
    
  2. Copiare quindi il file di backup all'esterno del contenitore e nel computer host.Next, copy the backup file out of the container and onto your host machine.

    cd ~
    sudo docker cp sql1:/var/opt/mssql/backup/wwi_2.bak wwi_2.bak
    ls -l wwi*
    
    cd ~
    docker cp sql1:/var/opt/mssql/backup/wwi_2.bak wwi_2.bak
    ls -l wwi*
    

Usare i dati salvati in modo permanenteUse the persisted data

Oltre a eseguire backup del database per proteggere i dati, è anche possibile usare contenitori di volumi di dati.In addition to taking database backups for protecting your data, you can also use data volume containers. All'inizio di questa esercitazione è stato creato il contenitore sql1 con il parametro -v sql1data:/var/opt/mssql.The beginning of this tutorial created the sql1 container with the -v sql1data:/var/opt/mssql parameter. Il contenitore del volume di dati sql1data salva in modo permanente i dati di /var/opt/mssql anche dopo la rimozione del contenitore.The sql1data data volume container persists the /var/opt/mssql data even after the container is removed. I passaggi seguenti rimuovono completamente il contenitore sql1 e quindi creano un nuovo contenitore, sql2, con i dati salvati in modo permanente.The following steps completely remove the sql1 container and then create a new container, sql2, with the persisted data.

  1. Arrestare il contenitore sql1.Stop the sql1 container.

    sudo docker stop sql1
    
    docker stop sql1
    
  2. Rimuovere il contenitore.Remove the container. Questa operazione non elimina il contenitore del volume di dati sql1data creato in precedenza né i dati salvati in modo permanente.This does not delete the previously created sql1data data volume container and the persisted data in it.

    sudo docker rm sql1
    
    docker rm sql1
    
  3. Creare un nuovo contenitore, sql2, e riutilizzare il contenitore del volume di dati sql1data.Create a new container, sql2, and reuse the sql1data data volume container.

    sudo docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' \
       --name 'sql2' -e 'MSSQL_PID=Developer' -p 1401:1433 \
       -v sql1data:/var/opt/mssql -d mcr.microsoft.com/mssql/server:2017-latest
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" `
       --name "sql2" -e "MSSQL_PID=Developer" -p 1401:1433 `
       -v sql1data:/var/opt/mssql -d mcr.microsoft.com/mssql/server:2017-latest
    
  4. Il database Wide World Importers è ora nel nuovo contenitore.The Wide World Importers database is now in the new container. Eseguire una query per verificare la modifica precedente apportata.Run a query to verify the previous change you made.

    sudo docker exec -it sql2 /opt/mssql-tools/bin/sqlcmd \
       -S localhost -U SA -P '<YourNewStrong!Passw0rd>' \
       -Q 'SELECT StockItemID, StockItemName FROM WideWorldImporters.Warehouse.StockItems WHERE StockItemID=1'
    
    docker exec -it sql2 /opt/mssql-tools/bin/sqlcmd `
       -S localhost -U SA -P "<YourNewStrong!Passw0rd>" `
       -Q "SELECT StockItemID, StockItemName FROM WideWorldImporters.Warehouse.StockItems WHERE StockItemID=1"
    

    Nota

    La password dell'amministratore di sistema non è la password specificata per il contenitore sql2, MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>.The SA password is not the password you specified for the sql2 container, MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>. Tutti i dati di SQL Server sono stati ripristinati da sql1, inclusa la password modificata in precedenza nell'esercitazione.All of the SQL Server data was restored from sql1, including the changed password from earlier in the tutorial. Alcune opzioni come questa sono in effetti ignorate a causa del ripristino dei dati in /var/opt/mssql.In effect, some options like this are ignored due to restoring the data in /var/opt/mssql. Per questo motivo, la password è <YourNewStrong!Passw0rd>, come mostrato qui.For this reason, the password is <YourNewStrong!Passw0rd> as shown here.

  1. Arrestare il contenitore sql1.Stop the sql1 container.

    sudo docker stop sql1
    
    docker stop sql1
    
  2. Rimuovere il contenitore.Remove the container. Questa operazione non elimina il contenitore del volume di dati sql1data creato in precedenza né i dati salvati in modo permanente.This does not delete the previously created sql1data data volume container and the persisted data in it.

    sudo docker rm sql1
    
    docker rm sql1
    
  3. Creare un nuovo contenitore, sql2, e riutilizzare il contenitore del volume di dati sql1data.Create a new container, sql2, and reuse the sql1data data volume container.

    sudo docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' \
       --name 'sql2' -e 'MSSQL_PID=Developer' -p 1401:1433 \
       -v sql1data:/var/opt/mssql -d mcr.microsoft.com/mssql/server:2019-GA-ubuntu-16.04
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" `
       --name "sql2" -e "MSSQL_PID=Developer" -p 1401:1433 `
       -v sql1data:/var/opt/mssql -d mcr.microsoft.com/mssql/server:2019-GA-ubuntu-16.04
    
  4. Il database Wide World Importers è ora nel nuovo contenitore.The Wide World Importers database is now in the new container. Eseguire una query per verificare la modifica precedente apportata.Run a query to verify the previous change you made.

    sudo docker exec -it sql2 /opt/mssql-tools/bin/sqlcmd \
       -S localhost -U SA -P '<YourNewStrong!Passw0rd>' \
       -Q 'SELECT StockItemID, StockItemName FROM WideWorldImporters.Warehouse.StockItems WHERE StockItemID=1'
    
    docker exec -it sql2 /opt/mssql-tools/bin/sqlcmd `
       -S localhost -U SA -P "<YourNewStrong!Passw0rd>" `
       -Q "SELECT StockItemID, StockItemName FROM WideWorldImporters.Warehouse.StockItems WHERE StockItemID=1"
    

    Nota

    La password dell'amministratore di sistema non è la password specificata per il contenitore sql2, MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>.The SA password is not the password you specified for the sql2 container, MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>. Tutti i dati di SQL Server sono stati ripristinati da sql1, inclusa la password modificata in precedenza nell'esercitazione.All of the SQL Server data was restored from sql1, including the changed password from earlier in the tutorial. Alcune opzioni come questa sono in effetti ignorate a causa del ripristino dei dati in /var/opt/mssql.In effect, some options like this are ignored due to restoring the data in /var/opt/mssql. Per questo motivo, la password è <YourNewStrong!Passw0rd>, come mostrato qui.For this reason, the password is <YourNewStrong!Passw0rd> as shown here.

Passaggi successiviNext steps

In questa esercitazione si è appreso come eseguire il backup di un database in Windows e come spostarlo in un server Linux che esegue SQL Server 2017.In this tutorial, you learned how to back up a database on Windows and move it to a Linux server running SQL Server 2017. Si è appreso come:You learned how to:

In questa esercitazione si è appreso come eseguire il backup di un database in Windows e come spostarlo in un server Linux che esegue SQL Server 2019.In this tutorial, you learned how to back up a database on Windows and move it to a Linux server running SQL Server 2019. Si è appreso come:You learned how to:

  • Creare immagini dei contenitori di SQL Server su Linux.Create SQL Server Linux container images.
  • Copiare i backup del database di SQL Server in un contenitore.Copy SQL Server database backups into a container.
  • Eseguire le istruzioni Transact-SQL nel contenitore con sqlcmd.Run Transact-SQL statements inside the container with sqlcmd.
  • Creare ed estrarre i file di backup da un contenitore.Create and extract backup files from a container.
  • Usare i contenitori dei volumi di dati in Docker per salvare in modo permanente i dati di SQL Server.Use data volume containers in Docker to persist SQL Server data.

Esaminare quindi altri scenari di configurazione e risoluzione dei problemi di Docker:Next, review other Docker configuration and troubleshooting scenarios: