2017-01-18 2 views
9

мне нужно восстановить большую базу данных SQL Server на экземпляре Linux Docker (https://hub.docker.com/r/microsoft/mssql-server-linux/)Восстановление базы данных SQL Server для Linux Докер

Я переезжаю мой файл .bak в докер и выполнения этой команды в MSSQL оболочки:

RESTORE DATABASE gIMM_Brag FROM DISK = '/var/opt/mssql/backup/BackupFull8H_gIMM.bak' WITH MOVE '[gIMM].Data' T'/var/opt/mssql/data/gIMM.mdf', MOVE '[gIMM].Log' TO '/var/opt/mssql/data/gIMM.ldf', MOVE 'TraceabilityData' TO '/var/opt/mssql/data/gIMM.TraceData.mdf', MOVE 'TraceabilityIndexes' TO '/var/opt/mssql/data/gIMM.TraceIndex.mdf', MOVE 'KpiData' TO '/var/opt/mssql/data/gIMM.KpiData.mdf', MOVE 'KpiIndexes' TO '/var/opt/mssql/data/gIMM.KpiIndex.mdf' 

Я правильно отображение каждый файл, который нужно, и я, безусловно, есть достаточно места на экземпляре докер, но я получаю эту ошибку:

Error: The backup or restore was aborted.

такая же ошибка возникает с версией Windows этого докера на самом деле ... И поскольку она не должна быть версией Express, размер базы данных не должен быть проблемой здесь.

Если у кого-то есть дополнительная информация о том, что вызывает эту ошибку!

Спасибо,

+0

Что размер вашей базы данных и версии? Вы используете In-Memory? –

+0

Где именно вы пытаетесь восстановить данные, самому изображению или в контейнере? – Hrishi

ответ

3

Когда я имел эту проблему, это потому, что команда восстановления принимает достаточно долго для MSSQL на тайм-ауте (с сообщением полностью бесполезной ошибкой). Указание длинного таймаута при подключении позволяет завершить восстановление. например

mssql -s localhost -p "<sa_password>" -t 36000000 -T 36000000 
4

Вы не упоминал об этом, но дело в том, что обманули меня, что я не копировал файл BAK в моем случае Докер.

В терминале с грузчиком и вашего MSSQL контейнера бег ...

1) получить идентификатор контейнера:
$docker inspect -f '{{.Id}}' <container_name>

2) скопировать BAK файл докер экземпляра:
docker exec -i <container_id> bash -c 'cat > /var/opt/mssql/backup.bak' < '/source/path/backup.bak'

3) журнал в mssql:
mssql -u sa -p 'myPassword'

3) restore db: (вы можете заменить это на свой сценарий восстановления, хотя этого было достаточно для меня)
RESTORE DATABASE [MyDatabase] FROM DISK = N'/var/opt/mssql/backup.bak' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 5

+2

При восстановлении я получаю: Ошибка SQL [5133] [S0001]: поиск в каталоге для файла «c: \ Program Files \ Microsoft SQL Server \ MSSQL11.SQLEXPRESS \ MSSQL \ DATA \ database.mdf» не удался с операционной системой ошибка 2 (система не может найти указанный файл). com.microsoft.sqlserver.jdbc.SQLServerException: поиск в каталоге для файла «c: \ Program Files \ Microsoft SQL Server \ MSSQL11.SQLEXPRESS \ MSSQL \ DATA \ database.mdf» завершился с ошибкой операционной системы 2 (система не может найдите указанный файл.). – TOUDIdel

+0

Вы решили это? Я получаю ту же проблему @TOUDIdel – bluesummers

+1

@TOUDIdel извините, я не смог реплицировать вашу ошибку –

3

@TOUDIdel Вы должны использовать фактические пути файловой системы на Linux, а не виртуальных каналов, которые отображаются в сообщении об ошибке.

RESTORE DATABASE Northwind FROM DISK='/var/opt/mssql/Northwind.bak' WITH MOVE 'Northwind' TO '/var/opt/mssql/data/NORTHWND.MDF', MOVE 'Northwind_log' TO '/var/opt/mssql/data/NORTHWND_log.ldf' 

http://www.raditha.com/blog/archives/restoring-a-database-on-ms-sql-server-for-linux-docker/

Смежные вопросы