Eseguire la migrazione di un database di SQL Server da Windows a Linux usando il backup e ripristino
Si applica a: SQL Server - Linux
La funzionalità di backup e ripristino di SQL Server è il metodo consigliato per eseguire la migrazione di un database da SQL Server in Windows a SQL Server in Linux. In questa esercitazione vengono illustrati i passaggi necessari per spostare un database in Linux con le tecniche di backup e ripristino.
- Creare un file di backup in Windows con SSMS
- Installare una shell bash in Windows
- Spostare il file di backup in Linux dalla shell bash
- Ripristinare il file di backup in Linux con Transact-SQL
- Eseguire una query per verificare la migrazione
È anche possibile creare un gruppo di disponibilità SQL Server Always On di SQL Server per eseguire la migrazione di un database di SQL Server da Windows a Linux. Vedere sql-server-linux-availability-group-cross-platform.
Prerequisiti
Per completare l'esercitazione, è necessario soddisfare i prerequisiti seguenti:
In un computer Windows:
- SQL Server installato.
- SQL Server Management Studio installato.
- Database di destinazione in cui eseguire la migrazione.
In un computer Linux:
- SQL Server (Red Hat Enterprise Linux, SUSE Linux Enterprise Server o Ubuntu) con strumenti da riga di comando.
Creare un backup in Windows
Esistono diversi modi per creare un file di backup di un database in Windows. La procedura seguente usa SQL Server Management Studio (SSMS).
Avviare SQL Server Management Studio nel computer Windows.
Nella finestra di dialogo della connessione immettere localhost.
In Esplora oggetti espandere Database.
Fare clic con il pulsante destro del mouse sul database di destinazione, scegliere Attività e quindi selezionare Backup.
Nella finestra di dialogo Backup database verificare che Tipo backup sia impostato su Completo e che Backup su sia impostato su Disco. Prendere nota del nome e del percorso del file. Ad esempio, un database denominato
YourDB
in SQL Server 2019 (15.x) ha il percorso predefinito diC:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\YourDB.bak
.Selezionare OK per eseguire un backup del database.
Un'altra opzione consiste nell'eseguire una query Transact-SQL per creare il file di backup. Il comando Transact-SQL seguente esegue le stesse azioni dei passaggi precedenti per un database denominato YourDB
:
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
Installare una shell bash in Windows
Per ripristinare il database, è prima necessario trasferire il file di backup dal computer Windows al computer Linux di destinazione. In questa esercitazione il file viene spostato in Linux da una shell bash (finestra del terminale) in esecuzione in Windows.
Installare una shell bash nel computer Windows che supporta i comandi scp (copia sicura) e ssh (accesso remoto). Due esempi di tali situazioni:
- Sottosistema Windows per Linux (Windows 10)
- Shell Git bash (https://git-scm.com/downloads)
Aprire una sessione di bash in Windows.
Copiare il file di backup in Linux
Nella sessione di bash passare alla directory che contiene il file di backup. Ad esempio:
cd 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\'
Usare il comando scp per trasferire il file nel computer Linux di destinazione. L'esempio seguente trasferisce
YourDB.bak
nella home directory diuser1
nel server Linux con indirizzo IP 192.0.2.9:scp YourDB.bak user1@192.0.2.9:./
Suggerimento
Sono disponibili alternative all'uso di scp per il trasferimento di file. Una prevede l'uso di Samba per configurare una condivisione di rete SMB tra Windows e Linux. Per una procedura dettagliata su Ubuntu, vedere Samba come file server. Dopo averla stabilita, è possibile accedervi come a una condivisione file di rete da Windows, ad esempio \\machinenameorip\share
.
Spostare il file di backup prima del ripristino
A questo punto, il file di backup si trova nel server Linux nella home directory dell'utente. Prima di ripristinare il database in SQL Server, è necessario inserire il backup in una sottodirectory di /var/opt/mssql
, perché è di proprietà dell'utente mssql
e del gruppo mssql
. Per modificare il percorso di backup predefinito, vedere l'articolo Configurare con mssql-conf.
Nella stessa sessione di bash in Windows connettersi in modalità remota al computer Linux di destinazione con ssh. Nell'esempio seguente viene eseguita la connessione al computer Linux
192.0.2.9
come utenteuser1
.ssh user1@192.0.2.9
A questo punto i comandi vengono eseguiti nel server Linux remoto.
Entrare in modalità utente con privilegi avanzati.
sudo su
Creare una nuova directory di backup. Il parametro
-p
non esegue alcuna operazione se la directory esiste già.mkdir -p /var/opt/mssql/backup
Spostare il file di backup in tale directory. Nell'esempio seguente il file di backup si trova nella home directory di
user1
. Modificare il comando in modo che corrisponda al percorso e al nome del file di backup.mv /home/user1/YourDB.bak /var/opt/mssql/backup/
Uscire dalla modalità utente con privilegi avanzati.
exit
Ripristinare il database in Linux
Per ripristinare il backup del database, è possibile usare il comando RESTORE DATABASE
di Transact-SQL (TQL).
Nei passaggi seguenti viene usato lo strumento sqlcmd. Se gli strumenti di SQL Server non sono stati installati, vedere Installare gli strumenti da riga di comando di SQL Server in Linux.
Nello stesso terminale avviare sqlcmd. Nell'esempio seguente viene eseguita la connessione all'istanza di SQL Server locale con l'utente
SA
. Immettere la password quando richiesto o specificare la password aggiungendo il parametro-P
.sqlcmd -S localhost -U SA
Al prompt
>1
immettere il comandoRESTORE DATABASE
seguente, premendo INVIO dopo ogni riga (non è possibile copiare e incollare tutte le righe del comando in una sola volta). Sostituire tutte le occorrenze diYourDB
con il nome del database.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' GO
Verrà visualizzato un messaggio che informa che il database è stato ripristinato.
RESTORE DATABASE
potrebbe restituire un errore come quello dell'esempio seguente: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 questo caso, il database contiene file secondari. Se questi file non sono specificati nella clausola
MOVE
diRESTORE DATABASE
, la procedura di ripristino prova a crearli nello stesso percorso del server originale.È possibile elencare tutti i file inclusi nel backup:
RESTORE FILELISTONLY FROM DISK = '/var/opt/mssql/backup/YourDB.bak'; GO
Verrà visualizzato un elenco simile a quello seguente (che elenca solo le prime due colonne):
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 ..............
È possibile usare questo elenco per creare le clausole
MOVE
per i file aggiuntivi. In questo esempioRESTORE DATABASE
è: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
Verificare il ripristino elencando tutti i database nel server. Il database ripristinato deve essere elencato.
SELECT Name FROM sys.Databases GO
Eseguire altre query sul database di cui è stata eseguita la migrazione. Il comando seguente sostituisce il contesto con il database
YourDB
e seleziona alcune righe da una delle tabelle.USE YourDB SELECT * FROM YourTable GO
Dopo aver terminato di usare sqlcmd, digitare
exit
.Dopo aver terminato di usare la sessione ssh remota, digitare di nuovo
exit
.
Passaggio successivo
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. Contenuto del modulo:
- Usare SSMS e Transact-SQL per creare un file di backup in Windows
- Installare una shell Bash in Windows
- Usare scp per spostare i file di backup da Windows a Linux
- Usare ssh per connettersi in modalità remota al computer Linux
- Rilocare il file di backup per prepararsi al ripristino
- Usare sqlcmd per eseguire i comandi Transact-SQL
- Ripristinare il backup del database con il comando
RESTORE DATABASE
- Eseguire la query per verificare la migrazione
Esaminare quindi gli altri scenari di migrazione per SQL Server in Linux.