Импорт .bak файла в MS SQL Linux

Появилась необходимость посмотреть базу данных на MS SQL. Есть файла .bak экспортированный из MS SQL с Windows, соответственно необходимо запустить сервер на MS SQL с Linux, и загрузить БД на сервер.

MS SQL Сервер

Запустим сервер MS SQL — нам хватит Express Edition, таким образом следуя официальному образу от mssql-server запускаем образ:

docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=yourStrong(!)Password' -e 'MSSQL_PID=Express' -p 1433:1433 -d mcr.microsoft.com/mssql/server:2017-latest-ubuntu -v /home/user/dump.bak:/app/dump.bak

с помощью директивы -v связываем пути файла с дампом до файла внутри образа
Таким образом в папке app в образе MSSQL будет файл /app/dump.bak, который мы и будет импортировать.

Подключение

В Linux это можно сделать разными способами, мне удобней было через DBeaver
host: localhost
port: 1433
username: SA
password: yourStrong(!)Password

Импорт .bak

RESTORE DATABASE YourDB
FROM DISK = '/var/opt/mssql/backup/YourDB.bak'

Должно появиться сообщение об успешном восстановлении базы данных.
Но может выйти ошибка, это значит, что база данных содержит дополнительные файлы. Если эти файлы не указаны в предложении MOVE команды RESTORE DATABASE, процедура восстановления попытается создать их по тому же пути, что и на исходном сервере.

Вы можете вывести список всех файлов, содержащихся в резервной копии:

RESTORE FILELISTONLY FROM DISK = '/app/dump.bak'

Вы должны получить список, аналогичный следующему (приводятся только два первых столбца):

LogicalName PhysicalName
YourDB Z:\Microsoft SQL Server\MSSQL11.GLOBAL\MSSQL\Data\YourDB\YourDB.mdf
YourDB_Product Z:\Microsoft SQL Server\MSSQL11.GLOBAL\MSSQL\Data\YourDB\YourDB_Product.ndf
YourDB_Customer Z:\Microsoft SQL Server\MSSQL11.GLOBAL\MSSQL\Data\YourDB\YourDB_Customer.ndf
YourDB_log Z:\Microsoft SQL Server\MSSQL11.GLOBAL\MSSQL\Data\YourDB\YourDB_Log.ldf

Этот список можно использовать для создания предложений MOVE для дополнительных файлов. В этом примере команда RESTORE 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'

Начнется импорт и появится база данных YourDB с импортированными данными.

Источники

  1. Перенос базы данных SQL Server из Windows в Linux с помощью резервного копирования и восстановления
  2. Краткое руководство. Запуск образов контейнеров SQL Server в Docker
  3. Официальный репозиторий MS-SQL

Leave a comment

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.