Freigeben über


Wiederherstellen einer SQL Server-Datenbank in einem Linux-Container

Gilt für: SQL Server – Linux

In diesem Tutorial erfahren Sie, wie Sie eine SQL Server-Sicherungsdatei in ein Linux-Containerimage von SQL Server 2017 (14.x) in Docker verschieben und dort wiederherstellen.

In diesem Tutorial erfahren Sie, wie Sie eine SQL Server-Sicherungsdatei in ein Linux-Containerimage von SQL Server 2019 (15.x) in Docker verschieben und dort wiederherstellen.

In diesem Tutorial erfahren Sie, wie Sie eine SQL Server-Sicherungsdatei in ein Linux-Containerimage von SQL Server 2022 (16.x) in Docker verschieben und dort wiederherstellen.

  • Übertragen Sie das neueste Linux-Containerimage von SQL Server per Pull, und führen Sie es aus.
  • Kopieren Sie die Datenbankdatei von Wide World Importers in den Container.
  • Stellen Sie die Datenbank im Container wieder her.
  • Führen Sie Transact-SQL-Anweisungen aus, um die Datenbank anzuzeigen und zu ändern.
  • Sichern Sie die geänderte Datenbank.

Voraussetzungen

Bereitstellungsoptionen

Dieser Abschnitt enthält Bereitstellungsoptionen für Ihre Umgebung.

sqlcmd unterstützt den MSSQL_PID-Parameter beim Erstellen von Containern derzeit nicht. Wenn Sie die sqlcmd-Anweisungen in diesem Lernprogramm verwenden, erstellen Sie einen Container mit der Entwickleredition von SQL Server. Verwenden Sie die Befehlszeilenschnittstellenanweisungen (CLI), um einen Container mit der Lizenz Ihrer Wahl zu erstellen. Mehr Informationen finden Sie unter Bereitstellen von und Herstellen einer Verbindung mit SQL Server in Linux-Containern.

Pullen und Ausführen des Containerimages

  1. Öffnen Sie ein bash-Terminal unter Linux.

  2. Pullen Sie das Linux-Containerimage von SQL Server 2017 (14.x) aus Microsoft Container Registry.

    sudo docker pull mcr.microsoft.com/mssql/server:2017-latest
    
  3. Verwenden Sie zum Ausführen des Containerimages mit Docker den folgenden Befehl:

    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
    

    Mit diesem Befehl wird ein Container von SQL Server 2017 (14.x) erstellt, der standardmäßig die Developer-Edition enthält. Der SQL Server-Port 1433 wird auf dem Host als Port 1401 bereitgestellt. Mit dem optionalen Parameter -v sql1data:/var/opt/mssql wird ein Datenvolumecontainer namens sql1data erstellt. Dieser wird verwendet, um die von SQL Server erstellten Daten permanent zu speichern.

    Wichtig

    In diesem Beispiel wird ein Datenvolumecontainer innerhalb von Docker verwendet. Weitere Informationen finden Sie unter Konfigurieren von SQL Server-Containerimages in Docker.

  4. Verwenden Sie den Befehl docker ps, um Ihre Container anzuzeigen.

    sudo docker ps -a
    
  5. Wenn in der Spalte STATUSUp (Aktiv) eingetragen ist, wird SQL Server im Container ausgeführt und überwacht den Port, der in der Spalte PORTS angegeben ist. Wenn in der Spalte STATUS Ihres SQL Server-Containers Exited angezeigt wird, lesen Sie Problembehandlung von SQL Server Docker-Containern.

$ 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. Öffnen Sie ein bash-Terminal unter Linux.

  2. Pullen Sie das Linux-Containerimage von SQL Server 2019 (15.x) aus Microsoft Container Registry.

    sudo docker pull mcr.microsoft.com/mssql/server:2019-latest
    
  3. Verwenden Sie zum Ausführen des Containerimages mit Docker den folgenden Befehl:

    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-latest
    

    Mit diesem Befehl wird ein Container von SQL Server 2019 (15.x) erstellt, der standardmäßig die Developer-Edition enthält. Der SQL Server-Port 1433 wird auf dem Host als Port 1401 bereitgestellt. Mit dem optionalen Parameter -v sql1data:/var/opt/mssql wird ein Datenvolumecontainer namens sql1data erstellt. Dieser wird verwendet, um die von SQL Server erstellten Daten permanent zu speichern.

    Wichtig

    In diesem Beispiel wird ein Datenvolumecontainer innerhalb von Docker verwendet. Weitere Informationen finden Sie unter Konfigurieren von SQL Server-Containerimages in Docker.

  4. Verwenden Sie den Befehl docker ps, um Ihre Container anzuzeigen.

    sudo docker ps -a
    
  5. Wenn in der Spalte STATUSUp (Aktiv) eingetragen ist, wird SQL Server im Container ausgeführt und überwacht den Port, der in der Spalte PORTS angegeben ist. Wenn in der Spalte STATUS Ihres SQL Server-Containers Exited angezeigt wird, lesen Sie Problembehandlung von SQL Server Docker-Containern.

    $ 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. Öffnen Sie ein bash-Terminal unter Linux.

  2. Pullen Sie das Linux-Containerimage von SQL Server 2022 (16.x) aus Microsoft Container Registry.

    sudo docker pull mcr.microsoft.com/mssql/server:2022-latest
    
  3. Verwenden Sie zum Ausführen des Containerimages mit Docker den folgenden Befehl:

    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:2022-latest
    

    Mit diesem Befehl wird ein Container von SQL Server 2022 (16.x) erstellt, der standardmäßig die Developer-Edition enthält. Der SQL Server-Port 1433 wird auf dem Host als Port 1401 bereitgestellt. Mit dem optionalen Parameter -v sql1data:/var/opt/mssql wird ein Datenvolumecontainer namens sql1data erstellt. Dieser wird verwendet, um die von SQL Server erstellten Daten permanent zu speichern.

    Wichtig

    In diesem Beispiel wird ein Datenvolumecontainer innerhalb von Docker verwendet. Weitere Informationen finden Sie unter Konfigurieren von SQL Server-Containerimages in Docker.

  4. Verwenden Sie den Befehl docker ps, um Ihre Container anzuzeigen.

    sudo docker ps -a
    
  5. Wenn in der Spalte STATUSUp (Aktiv) eingetragen ist, wird SQL Server im Container ausgeführt und überwacht den Port, der in der Spalte PORTS angegeben ist. Wenn in der Spalte STATUS Ihres SQL Server-Containers Exited angezeigt wird, lesen Sie Problembehandlung von SQL Server Docker-Containern.

    $ 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
    

Ändern des Systemadministratorkennworts

Das SA-Konto ist ein Systemadministrator für die SQL Server-Instanz, der während des Setups erstellt wird. Nach dem Erstellen Ihres SQL Server-Containers können Sie die von Ihnen festgelegte Umgebungsvariable MSSQL_SA_PASSWORD ermitteln, indem Sie echo $MSSQL_SA_PASSWORD im Container ausführen. Ändern Sie aus Sicherheitsgründen Ihr SA-Kennwort:

  1. Wählen Sie ein sicheres Kennwort für den SA-Benutzer aus.

  2. Verwenden Sie docker exec zum Ausführen des Hilfsprogramms sqlcmd, um das Kennwort über eine Transact-SQL-Anweisung zu ändern. Ersetzen Sie <YourStrong!Passw0rd> und <YourNewStrong!Passw0rd> durch Ihre eigenen Kennwortwerte:

    Wichtig

    Die Umgebungsvariable SA_PASSWORD ist veraltet. Verwenden Sie stattdessen MSSQL_SA_PASSWORD.

    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>'"
    

Kopieren einer Sicherungsdatei in den Container

In diesem Tutorial werden die Beispieldatenbanken von Wide World Importers für Microsoft SQL verwendet. Führen Sie die folgenden Schritte aus, um die Sicherungsdatei der Datenbank von Wide World Importers in Ihren SQL Server-Container herunterzuladen und zu kopieren:

  1. Erstellen Sie zunächst mit dem Befehl docker exec einen Sicherungsordner. Mit dem folgenden Befehl wird im SQL Server-Container ein Verzeichnis vom Typ /var/opt/mssql/backup erstellt:

    sudo docker exec -it sql1 mkdir /var/opt/mssql/backup
    
  2. Laden Sie nun die Datei WideWorldImporters-Full.bak auf Ihren Hostcomputer herunter. Mit den folgenden Befehlen wechseln Sie zum Basis-/Benutzerverzeichnis und laden die Sicherungsdatei als wwi.bak herunter.

    cd ~
    curl -L -o wwi.bak 'https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak'
    
  3. Kopieren Sie mit dem Befehl docker cp die Sicherungsdatei in den Container im Verzeichnis /var/opt/mssql/backup.

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

Wiederherstellen der Datenbank

Die Sicherungsdatei befindet sich nun im Container. Bevor Sie die Sicherung wiederherstellen können, müssen Sie die logischen Dateinamen und Dateitypen in der Sicherung kennen. Mit den folgenden Transact-SQL-Befehlen überprüfen Sie die Sicherung und führen die Wiederherstellung aus, indem Sie den Befehl sqlcmd im Container verwenden.

Tipp

In diesem Tutorial wird der Befehl sqlcmd im Container verwendet, da er dieses vorinstallierte Tool bereits enthält. Sie können Transact-SQL-Anweisungen jedoch auch außerhalb des Containers mit anderen Clienttools wie die SQL Server-Erweiterung für Visual Studio Code ausführen oder SQL Server Management Studio unter Windows verwenden, um SQL Server unter Linux zu verwalten. Verwenden Sie zum Herstellen einer Verbindung den Hostport, der Port 1433 im Container zugeordnet wurde. In diesem Beispiel ist dies localhost,1401 auf dem Hostcomputer und Host_IP_Address,1401 für den Remotezugriff.

  1. Führen Sie im Container den Befehl sqlcmd aus, um die logischen Dateinamen und Pfade in der Sicherung aufzulisten. Dies geschieht über die Transact-SQL-Anweisung RESTORE FILELISTONLY.

    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
    

    Es sollte eine Ausgabe angezeigt werden, die Folgendem ähnelt:

    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. Rufen Sie den Befehl RESTORE DATABASE auf, um die Datenbank im Container wiederherzustellen. Geben Sie für jede der Dateien aus dem vorherigen Schritt einen neuen Pfad an.

    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"'
    

    Es sollte eine Ausgabe angezeigt werden, die Folgendem ähnelt:

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

Überprüfen der wiederhergestellten Datenbank

Führen Sie die folgende Abfrage aus, um eine Liste der Datenbanknamen in Ihrem Container anzuzeigen:

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

Es sollte WideWorldImporters in der Liste der Datenbanken angezeigt werden.

Vornehmen einer Änderung

Führen Sie die folgenden Schritte aus, um eine Änderung in der Datenbank vorzunehmen.

  1. Führen Sie eine Abfrage aus, um die obersten zehn Elemente der Tabelle Warehouse.StockItems anzuzeigen.

    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'
    

    Es sollte eine Liste mit den Bezeichnern und Namen der Elemente angezeigt werden:

    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. Aktualisieren Sie mit der folgenden UPDATE-Anweisung die Beschreibung des ersten Elements:

    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'
    

    Es sollte eine Ausgabe angezeigt werden, die dem folgenden Text ähnelt:

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

Erstellen einer neuen Sicherung

Nachdem Sie Ihre Datenbank in einem Container wiederhergestellt haben, können Sie auch regelmäßige Datenbanksicherungen im ausgeführten Container erstellen. Die dafür erforderlichen Schritte ähneln den vorherigen, jedoch in umgekehrter Reihenfolge.

  1. Erstellen Sie mit dem Transact-SQL-Befehl BACKUP DATABASE eine Datenbanksicherung im Container. In diesem Tutorial wird im zuvor erstellten Verzeichnis /var/opt/mssql/backup eine neue Sicherungsdatei namens wwi_2.bak erstellt.

    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"
    

    Die Ausgabe sollte in etwa wie folgt aussehen:

    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. Kopieren Sie nun die Sicherungsdatei aus dem Container auf den Hostcomputer.

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

Verwenden der persistenten Daten

Zum Schutz Ihrer Daten können Sie neben Datenbanksicherungen auch Datenvolumecontainer verwenden. Zu Beginn dieses Tutorials haben Sie mit dem Parameter sql1 den Container -v sql1data:/var/opt/mssql erstellt. Im Datenvolumecontainer sql1data werden die Daten aus /var/opt/mssql auch dann weiterhin gespeichert, wenn der Container gelöscht wird. Führen Sie die folgenden Schritte aus, um den Container sql1 vollständig zu entfernen und anschließend einen neuen Container namens sql2 mit den persistenten Daten zu erstellen.

  1. Beenden Sie den Container sql1.

    sudo docker stop sql1
    
  2. Entfernen Sie den Container. Durch diesen Vorgang werden der zuvor erstellte Datenvolumecontainer sql1data und die darin enthaltenen persistenten Daten nicht gelöscht.

    sudo docker rm sql1
    
  3. Erstellen Sie einen neuen Container namens sql2, und verwenden Sie den Datenvolumecontainer sql1data erneut.

    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
    
  4. Die Datenbank von Wide World Importers befindet sich nun im neuen Container. Führen Sie eine Abfrage aus, um die vorherige Änderung zu überprüfen.

    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'
    

    Hinweis

    Das SA-Kennwort ist nicht mit dem Kennwort identisch, das Sie für den Container sql2 angegeben haben (MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>). Alle SQL Server-Daten aus sql1 wurden wiederhergestellt, einschließlich des zuvor in diesem Tutorial geänderten Kennworts. Einige Optionen wie diese werden aufgrund der Wiederherstellung der Daten in „/var/opt/mssql“ ignoriert. Daher lautet das Kennwort wie hier gezeigt <YourNewStrong!Passw0rd>.

  1. Beenden Sie den Container sql1.

    sudo docker stop sql1
    
  2. Entfernen Sie den Container. Durch diesen Vorgang werden der zuvor erstellte Datenvolumecontainer sql1data und die darin enthaltenen persistenten Daten nicht gelöscht.

    sudo docker rm sql1
    
  3. Erstellen Sie einen neuen Container namens sql2, und verwenden Sie den Datenvolumecontainer sql1data erneut.

    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-latest
    
  4. Die Datenbank von Wide World Importers befindet sich nun im neuen Container. Führen Sie eine Abfrage aus, um die vorherige Änderung zu überprüfen.

    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'
    

    Hinweis

    Das SA-Kennwort ist nicht mit dem Kennwort identisch, das Sie für den Container sql2 angegeben haben (MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>). Alle SQL Server-Daten aus sql1 wurden wiederhergestellt, einschließlich des zuvor in diesem Tutorial geänderten Kennworts. Einige Optionen wie diese werden aufgrund der Wiederherstellung der Daten in „/var/opt/mssql“ ignoriert. Daher lautet das Kennwort wie hier gezeigt <YourNewStrong!Passw0rd>.

  1. Beenden Sie den Container sql1.

    sudo docker stop sql1
    
  2. Entfernen Sie den Container. Durch diesen Vorgang werden der zuvor erstellte Datenvolumecontainer sql1data und die darin enthaltenen persistenten Daten nicht gelöscht.

    sudo docker rm sql1
    
  3. Erstellen Sie einen neuen Container namens sql2, und verwenden Sie den Datenvolumecontainer sql1data erneut.

    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:2022-latest
    
  4. Die Datenbank von Wide World Importers befindet sich nun im neuen Container. Führen Sie eine Abfrage aus, um die vorherige Änderung zu überprüfen.

    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'
    

    Hinweis

    Das SA-Kennwort ist nicht mit dem Kennwort identisch, das Sie für den Container sql2 angegeben haben (MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>). Alle SQL Server-Daten aus sql1 wurden wiederhergestellt, einschließlich des zuvor in diesem Tutorial geänderten Kennworts. Einige Optionen wie diese werden aufgrund der Wiederherstellung der Daten in „/var/opt/mssql“ ignoriert. Daher lautet das Kennwort wie hier gezeigt <YourNewStrong!Passw0rd>.

Nächster Schritt

In diesem Tutorial haben Sie erfahren, wie Sie eine Datenbank unter Windows sichern und auf einen Linux-Server verschieben, auf dem SQL Server 2017 (14.x) in einem Container ausgeführt wird. Sie haben Folgendes gelernt:

In diesem Tutorial haben Sie erfahren, wie Sie eine Datenbank unter Windows sichern und auf einen Linux-Server verschieben, auf dem SQL Server 2019 (15.x) in einem Container ausgeführt wird. Sie haben Folgendes gelernt:

In diesem Tutorial haben Sie erfahren, wie Sie eine Datenbank unter Windows sichern und auf einen Linux-Server verschieben, auf dem SQL Server 2022 (16.x) in einem Container ausgeführt wird. Sie haben Folgendes gelernt:

  • Erstellen von Linux-Containerimages in SQL Server
  • Kopieren von SQL Server-Datenbanksicherungen in einen Container
  • Ausführen von Transact-SQL-Anweisungen mit sqlcmd.
  • Erstellen und Extrahieren von Sicherungsdateien aus einem Container
  • Permanentes Speichern von SQL Server-Produktionsdaten mithilfe von Datenvolumecontainern.

Lernen Sie als Nächstes weitere Szenarien zu Containerkonfiguration und Problembehandlung kennen:

Zur SQL-Dokumentation beitragen

Wussten Sie schon, dass Sie SQL-Inhalte selbst bearbeiten könnten? Hierdurch helfen Sie nicht nur mit, unsere Dokumentation zu verbessern, sondern Sie werden auch als Mitwirkender an der Seite aufgeführt.

Weitere Informationen finden Sie unter Mitwirken an der SQL Server-Dokumentation.