En el post anterior aprendimos a sacar un backup a una base de datos SQL Server 2019 que se encuentra en un contenedor de Docker, bueno, pues ahora vamos a aprender cómo restaurar el backup.
Precondiciones y asunciones
Este post ha sido construido con las siguientes precondiciones y asunciones:
- El lector cuenta con una instancia de SQL Server 2019 en un contenedor de Docker.
- Si no cuentas con una, ¡no te preocupes! puedes aprender hacerlo en este post, creado por mí, obvio.
- El contenedor de Docker se encuentra alojado en una máquina con Windows 10 o superior.
- Se tiene conocimiento de contraseña del usuario SA.
- El lector cuenta con un backup con extensión .bak.
- Si no cuentas con una, puedes descargar GameLibrary.bak que es el resultado del post anterior
Empezamos
Primero vamos a definir unas cuantas variables para que la ejecución de los comandos clave sea más concreta, para ello abrimos PowerShell y realizamos lo siguiente:
Definir una variable llamada $CONTAINER_NAME para indicar el nombre del contenedor donde se encuentra la instancia de SQL Server 2019, en mi caso se llama infallible_colden, esto lo hacemos con el siguiente comando:
$CONTAINER_NAME = 'infallible_colden'
Cambia la parte resaltada por el nombre de tu contenedor.
Ahora, vamos a definir una variable llamada $DATABASE_NAME para indicar el nombre de la base de datos la cual queremos resturar, en mi caso, es GameLibrary:
$DATABASE_NAME = 'GameLibrary'
Cambia la parte resaltada por el nombre de tu base de datos.
Luego, definimos otra variable llamada $FILE_NAME para indicar cómo se llama el archivo con extensión .bak donde se encuentra el backup, en mi caso, pondré GameLibrary.bak:
$FILE_NAME = 'GameLibrary.bak'
Cambia la parte resaltada por el nombre de archivo con tu backup. ¡No olvides la extensión .bak!.
Esta última variable llamada $HOST_BACKUP_PATH es para indicar la ruta completa donde se encuentra nuestro backup (archivo .bak) en nuestra máquina local, en mi caso se encuentra en D:\backups\GameLibrary.bak:
$HOST_BACKUP_PATH = "D:\backups\GameLibrary.bak"
Cambia la parte resaltada por la ruta del archivo con tu backup.
Restaurar el backup
Ahora que contamos con todas las variables necesarias, ejecutaremos unos últimos comandos para restaurar el backup.
Primero crearemos una carpeta especial dentro de nuestro contenedor de Docker, donde el SQL Server podrá encontrar el backup más fácil:
docker exec "${CONTAINER_NAME}" mkdir -p /var/opt/mssql/restores
Ahora, copiaremos el backup dentro del contenedor de Docker en dicha carpeta así:
docker cp "${HOST_BACKUP_PATH}" "${CONTAINER_NAME}:/var/opt/mssql/restores/${FILE_NAME}"
Finalmente, restauremos el backup de una vez por todas con este comando:
docker exec -it "${CONTAINER_NAME}" /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -Q "RESTORE DATABASE [${DATABASE_NAME}] FROM DISK = N'/var/opt/mssql/restores/${FILE_NAME}' WITH FILE = 1, NOUNLOAD, REPLACE, RECOVERY, STATS = 5"
El comando te va a solicitar la contraseña para el usuario SA, por favor escríbela y dale Enter para continuar:
¡y listo!, puedes abrir tu gestor de bases de datos favoritos y comprobar que el backup se haya restaurado, validando que la base de datos GameLibrary se haya creado, que contenga tablas y datos 😉
Y bueno, eso es todo por el momento, espero que te haya servido, nos vemos en otra ocasión 🙂
Enlaces de interés
Te invito a visitar los siguientes enlaces, gran parte de la información mostrada en este post ha sido recopilada de estas.