将SQL Server数据库还原到Linux Docker

我需要在Linux Docker实例上恢复大型SQL Server数据库( https://hub.docker.com/r/microsoft/mssql-server-linux/ )

我将我的.bak文件移动到docker,然后在mssql shell中执行这个命令:

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' 

我正确地映射每个需要的文件,我确实有足够的空间在docker实例,但我得到这个错误:

错误:备份或恢复被中止。

同样的错误发生在这个docker实际上的Windows版本…而且,因为它不应该是一个Express版本,数据库的大小不应该是这里的问题。

如果有人有更多的信息是什么导致这个错误!

谢谢,

你没有提到它,但是欺​​骗了我的东西是我没有将BAK文件复制到我的Docker实例。

在终端与码头和您的mssql容器运行…

1)获取容器ID:
$docker inspect -f '{{.Id}}' <container_name>

2)将BAK文件复制到docker实例:
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 DATABASE [MyDatabase] FROM DISK = N'/var/opt/mssql/backup.bak' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 5

当我遇到这个问题时,这是因为恢复命令花了足够的时间让mssql超时(完全没有帮助的错误信息)。 连接时指定一个很长的超时允许恢复完成。 例如

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

@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/