Anmerkung
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server unter Linux
Wenn Sie eine Datenbank von SQL Server unter Windows zu SQL Server unter Linux migrieren möchten, wird die Verwendung der SQL Server-Funktion Sichern und Wiederherstellen empfohlen. In diesem Tutorial werden Sie die erforderlichen Schritte durchlaufen, um eine Datenbank mit Hilfe von Sicherungs- und Wiederherstellungstechniken auf Linux zu verschieben.
- Erstellen einer Sicherungsdatei unter Windows mit SSMS
- Installieren einer Bash-Shell unter Windows
- Verschieben der Sicherungsdatei von der Bash-Shell zu Linux
- Wiederherstellen der Sicherungsdatei unter Linux mit Transact-SQL
- Ausführen einer Abfrage zur Überprüfung der Migration
Eine weitere Möglichkeit zur Migration einer SQL Server-Datenbank von Windows zu Linux besteht darin, eine SQL Server Always On-Verfügbarkeitsgruppe zu erstellen. Informationen hierzu finden Sie unter sql-server-linux-availability-group-cross-platform.
Voraussetzungen
Zur Durchführung dieses Tutorials ist Folgendes erforderlich:
Auf einem Windows-Computer:
- SQL Server installiert.
- SQL Server Management Studio (SSMS) muss installiert sein.
- Zieldatenbank, die migriert werden soll
Auf einem Linux-Computer:
- SQL Server (Red Hat Enterprise Linux, SUSE Linux Enterprise Server oder Ubuntu) mit Befehlszeilentools.
Erstellen einer Sicherung unter Windows
Es gibt mehrere Möglichkeiten, unter Windows eine Sicherungsdatei einer Datenbank zu erstellen. In den folgenden Schritten wird hierzu SQL Server Management Studio (SSMS) verwendet:
Starten Sie auf Ihrem Windows-Computer SQL Server Management Studio.
Geben Sie im Verbindungsdialogfeld localhost ein.
Erweitern Sie im Objekt-Explorer den Eintrag Datenbanken.
Klicken Sie mit der rechten Maustaste auf Ihre Zieldatenbank, wählen Sie Aufgaben aus und dann Back Up....
Vergewissern Sie sich im Dialog Datenbank sichern, dass die Option Sicherungstyp auf Vollständig und die Option Sichern auf auf Festplatte steht. Notieren Sie sich Name und Speicherort der Datei. Eine Datenbank mit dem Namen
YourDBauf SQL Server 2019 (15.x) hat zum Beispiel den Standard-SicherungspfadC:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\YourDB.bak.Wählen Sie OK aus, um die Datenbank zu sichern.
Eine weitere Möglichkeit zum Erstellen der Sicherungsdatei besteht darin, eine Transact-SQL-Abfrage auszuführen. Der folgende Transact-SQL-Befehl führt die gleichen Aktionen wie die vorherigen Schritte für eine Datenbank namens YourDB aus:
BACKUP DATABASE [YourDB]
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\YourDB.bak'
WITH NOFORMAT, NOINIT, NAME = N'YourDB-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10;
GO
Installieren einer Bash-Shell unter Windows
Übertragen Sie zum Wiederherstellen der Datenbank zunächst die Sicherungsdatei vom Windows-Computer auf den Linux-Zielcomputer. In diesem Tutorial wird die Datei von einer Bash-Shell (Terminalfenster), die unter Windows läuft, nach Linux verschoben.
Installieren Sie eine Bash-Shell auf Ihrem Windows-Rechner, die die Befehle scp (sichere Kopie) und ssh (Fernanmeldung) unterstützt. Zwei Beispiele hierfür sind:
- Windows-Subsystem für Linux (Windows 10)
- Die Git Bash-Shell (https://git-scm.com/downloads)
Öffnen Sie eine Bash-Sitzung unter Windows.
Kopieren der Sicherungsdatei zu Linux
Navigieren Sie in Ihrer Bash-Sitzung zum Verzeichnis, das die Sicherungsdatei enthält. Zum Beispiel:
cd 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\'Übertragen Sie mit dem Befehl scp die Datei auf den Linux-Zielcomputer. Das folgende Beispiel überträgt
YourDB.bakin das Home-Verzeichnis vonuser1auf dem Linux-Server mit der IP-Adresse 192.168.2.9:scp YourDB.bak user1@192.168.2.9:./Die Ausgabe sollte der folgenden ähneln:
The authenticity of host 192.168.2.9(192.168.2.9)' can't be established. ECDSA key fingerprint is SHA256: aB1cD2eF-3gH4iJ5kL6-mN7oP8qR= Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.2.9' (ECDSA) to the list of known hosts. Password: YourDB.bak 100% 8960KB 7.4MB/s 00:01
Tipp
Es gibt Alternativen zur Verwendung von scp für die Dateiübertragung. So können Sie beispielsweise mit Samba eine SMB-Netzwerkfreigabe zwischen Windows und Linux konfigurieren. Eine Anleitung für Ubuntu finden Sie unter Samba als Dateiserver. Nachdem Sie die Freigabe erstellt haben, können Sie darauf von Windows aus wie auf eine Netzwerkdateifreigabe zugreifen (z. B. mit \\machinenameorip\share).
Verschieben der Sicherungsdatei vor der Wiederherstellung
Nun befindet sich die Sicherungsdatei auf dem Linux-Server im Basisverzeichnis Ihres Benutzers. Bevor Sie die Datenbank auf SQL Server wiederherstellen, müssen Sie die Sicherung in einem Unterverzeichnis von /var/opt/mssql platzieren, da dieses Verzeichnis dem Benutzer mssql und der Gruppe mssql gehört. Wenn Sie den Standard-Sicherungsort ändern möchten, lesen Sie den Artikel Konfiguration mit mssql-conf.
Verbinden Sie sich in derselben Windows-Bash-Sitzung per Fernzugriff mit Ihrem Linux-Zielrechner mit ssh. Das folgende Beispiel stellt eine Verbindung zum Linux-Rechner
192.168.2.9als Benutzeruser1her.ssh user1@192.168.2.9Sie führen jetzt Befehle auf dem Remote-Linux-Server aus.
Wechseln Sie in den Administratormodus.
sudo suErstellen Sie ein neues Sicherungsverzeichnis. Der Parameter
-pbewirkt nichts, wenn das Verzeichnis bereits existiert.mkdir -p /var/opt/mssql/backupVerschieben Sie die Sicherungsdatei in dieses Verzeichnis. Im folgenden Beispiel befindet sich die Sicherungsdatei im Basisverzeichnis von
user1. Ändern Sie den Befehl so, dass er mit dem Speicherort und dem Dateinamen Ihrer Sicherungsdatei übereinstimmt.mv /home/user1/YourDB.bak /var/opt/mssql/backup/Beenden Sie den Administratormodus.
exit
Wiederherstellen der Datenbank unter Linux
Um die Datenbanksicherung wiederherzustellen, können Sie den Befehl RESTORE DATABASE Transact-SQL (TQL) nutzen.
In den folgenden Schritten wird das Tool sqlcmd verwendet. Wenn Sie keine SQL Server-Tools installiert haben, lesen Sie "Installieren der sqlcmd- und bcp SQL Server-Befehlszeilentools unter Linux".
Starten Sie im selben Terminal das Tool sqlcmd. Das folgende Beispiel stellt eine Verbindung zur lokalen SQL Server-Instanz mit dem Konto
saher. Geben Sie das Passwort ein, wenn Sie dazu aufgefordert werden, oder geben Sie das Passwort durch Hinzufügen des Parameters-Pan.sqlcmd -S localhost -U saGeben Sie an der Eingabeaufforderung
>1den folgendenRESTORE DATABASE-Befehl ein und drücken Sie nach jeder Zeile ENTER (Sie können nicht den gesamten mehrzeiligen Befehl auf einmal kopieren und einfügen). Ersetzen SieYourDBjedes Mal durch den Namen Ihrer Datenbank.RESTORE DATABASE YourDB FROM DISK = '/var/opt/mssql/backup/YourDB.bak' WITH MOVE 'YourDB' TO '/var/opt/mssql/data/YourDB.mdf', MOVE 'YourDB_Log' TO '/var/opt/mssql/data/YourDB_Log.ldf'; GONun sollten Sie die Meldung erhalten, dass die Datenbank erfolgreich wiederhergestellt wurde.
RESTORE DATABASEkönnte einen Fehler wie im folgenden Beispiel zurückgeben:File 'YourDB_Product' cannot be restored to 'Z:\Microsoft SQL Server\MSSQL15.GLOBAL\MSSQL\Data\YourDB\YourDB_Product.ndf'. Use WITH MOVE to identify a valid location for the file. Msg 5133, Level 16, State 1, Server servername, Line 1 Directory lookup for the file "Z:\Microsoft SQL Server\MSSQL15.GLOBAL\MSSQL\Data\YourDB\YourDB_Product.ndf" failed with the operating system error 2(The system cannot find the file specified.).In diesem Fall enthält die Datenbank sekundäre Dateien. Wenn diese Dateien nicht in der
MOVE-Klausel vonRESTORE DATABASEangegeben sind, versucht die Wiederherstellungsprozedur, sie unter demselben Pfad wie der ursprüngliche Server zu erstellen.Sie können alle in der Sicherung enthaltenen Dateien auflisten:
RESTORE FILELISTONLY FROM DISK = '/var/opt/mssql/backup/YourDB.bak'; GOSie sollten eine Liste wie das folgende Beispiel erhalten (in der nur die ersten beiden Spalten aufgeführt sind):
LogicalName PhysicalName .............. ------------------- ---------------------------------------------------------------------------- --------------- YourDB Z:\Microsoft SQL Server\MSSQL15.GLOBAL\MSSQL\Data\YourDB\YourDB.mdf .............. YourDB_Product Z:\Microsoft SQL Server\MSSQL15.GLOBAL\MSSQL\Data\YourDB\YourDB_Product.ndf .............. YourDB_Customer Z:\Microsoft SQL Server\MSSQL15.GLOBAL\MSSQL\Data\YourDB\YourDB_Customer.ndf .............. YourDB_log Z:\Microsoft SQL Server\MSSQL15.GLOBAL\MSSQL\Data\YourDB\YourDB_Log.ldf ..............Sie können diese Liste verwenden, um
MOVE-Klauseln für die zusätzlichen Dateien zu erstellen. In diesem Beispiel siehtRESTORE DATABASEfolgendermaßen aus:RESTORE DATABASE YourDB FROM DISK = '/var/opt/mssql/backup/YourDB.bak' WITH MOVE 'YourDB' TO '/var/opt/mssql/data/YourDB.mdf', MOVE 'YourDB_Product' TO '/var/opt/mssql/data/YourDB_Product.ndf', MOVE 'YourDB_Customer' TO '/var/opt/mssql/data/YourDB_Customer.ndf', MOVE 'YourDB_Log' TO '/var/opt/mssql/data/YourDB_Log.ldf'; GOÜberprüfen Sie die Wiederherstellung, indem Sie alle Datenbanken auf dem Server auflisten. Dabei sollte die wiederhergestellte Datenbank aufgeführt werden.
SELECT name FROM sys.databases; GOFühren Sie für die migrierte Datenbank weitere Abfragen aus. Der folgende Befehl wechselt den Kontext zur Datenbank
YourDBund wählt Zeilen aus einer ihrer Tabellen aus.USE YourDB; SELECT * FROM YourTable; GOWenn Sie sqlcmd beendet haben, geben Sie
exitein.Wenn Sie die Arbeit in der remote ssh-Sitzung beendet haben, geben Sie erneut
exitein.
Nächster Schritt
In diesem Tutorial haben Sie erfahren, wie Sie eine Datenbank unter Windows sichern und auf einen Linux-Server mit SQL Server verschieben. Sie haben Folgendes gelernt:
- Erstellen einer Sicherungsdatei unter Windows mit SSMS und Transact-SQL
- Installieren einer Bash-Shell unter Windows
- Verschieben von Sicherungsdateien von Windows zu Linux mit scp
- Herstellen einer Remoteverbindung mit Ihrem Linux-Computer über ssh
- Verschieben der Sicherungsdatei als Vorbereitung für die Wiederherstellung
- Ausführen von Transact-SQL-Befehlen mit sqlcmd
- Wiederherstellen der Datenbanksicherung mit dem Befehl
RESTORE DATABASE - Ausführen der Abfrage zur Überprüfung der Migration
Lernen Sie als Nächstes weitere Migrationsszenarios für SQL Server unter Linux kennen.