我需要在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/