Home Restore di un backup su SQL Server
Post
Cancel

Restore di un backup su SQL Server

Per prima cosa ho fatto partire un’immagine docker di SQL Server 2019 per Linux:

1
docker run --name sqlserver-2019 -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Ti6collegato!' -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest

A questo punto ho utilizzato SQL Server Management Studio per fare il restore del database.

Il restore del database può essere fatto a condizione che i file di backup siano all’interno del container in questo folder /var/opt/mssql/data/. Non è possibile importare un file .bak presente nel sistema host attraverso SSMS.

Per il file di backup ho utilizzato quello relativo al database AdventureWorks2019 disponibile sul repository GitHub di Microsoft nella sezione AdventureWorks sample databases.

Quindi è necessario copiare il file .bak dentro al container utilizzando questo comando:

1
docker cp AdventureWorks2019.bak sqlserver-2019:/var/opt/mssql/data/AdventureWorks2019.bak

qui ho trovato l’esempio utile per la copia: Copying files from host to Docker container

Per verificare che il file fosse stato effettivamente copiato ho lanciato una bash nel container con questo comando:

1
docker exec -it sqlserver-2019 bash

A questo punto è possibile fare il restore del database. Ho creato il database AdventureWorks2019 vuoto per poi richiamare la procedura di restore selezionando il database stesso. Ma questo approccio mi ha dato il seguente errore:

1
System.Data.SqlClient.SqlError: The backup set holds a backup of a database other than the existing 'AdventureWorks2019' database. (Microsoft.SqlServer.SmoExtended)

Ho risolto grazie a questo post su StackOverflow: The backup set holds a backup of a database other than the existing

  • Don’t create an empty database and restore the .bak file on to it.
  • Use ‘Restore Database’ option accessible by right clicking the “Databases” branch of the SQL Server Management Studio and provide the database name while providing the source to restore.

In pratica non serve creare un database vuoto. Ho cancellato il database che avevo creato su SSMS e ho seguito questi passi:

  • Dal nodo “Databases” ho selezionato “Restore Databases…”.
  • Sulla dialog che appare, seleziono Source -> Device e quindi seleziono il file .bak che mi interessa.
  • A quel punto su Options, seleziono “Overwrite the existing database” (anche se il database non esiste) e premo OK.

E il restore va a buon fine.

This post is licensed under CC BY 4.0 by the author.