在 docker 容器中恢复 AdventureWorks2017 数据库时出现以下错误。运行 SQL Server 2019 CTP 2.0 (mcr.microsoft.com/mssql/server:vNext-CTP2.0-ubuntu) 备份和目标数据卷都被保留。创建新数据库没有问题。检查路径,它们是正确的。使用 2017-latest docker 镜像恢复时没有任何问题。
其他人对 2019-CTP2 有此问题,解决方法?
消息 3634,级别 16,状态 1,第 7 行操作系统在“/var/opt/mssql/data/AdventureWorks2017”上尝试“RestoreContainer::ValidateTargetForCreation”时返回错误“2(系统找不到指定的文件。)” .mdf'。消息 3156,级别 16,状态 5,第 7 行文件“AdventureWorks2017”无法恢复到“/var/opt/mssql/data/AdventureWorks2017.mdf”。使用 WITH MOVE 标识文件的有效位置。消息 3634,级别 16,状态 1,第 7 行操作系统在“/var/opt/mssql/log/AdventureWorks2017_log”上尝试“RestoreContainer::ValidateTargetForCreation”时返回错误“2(系统找不到指定的文件。)” .ldf'。消息 3156,级别 16,状态 5,第 7 行文件“AdventureWorks2017_log”无法恢复为“ /var/opt/mssql/log/AdventureWorks2017_log.ldf'。使用 WITH MOVE 标识文件的有效位置。消息 3119,级别 16,状态 1,第 7 行 在规划 RESTORE 语句时发现了问题。以前的消息提供了详细信息。消息 3013,级别 16,状态 1,第 7 行 RESTORE DATABASE 异常终止。
创建容器。
$datapath = "D:\Foo";
$logpath = "D:\Foo";
$backuppath = "D:\Foo";
$pass = ":-)"
$ct = (docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=$pass" `
-e "MSSQL_PID=Developer" -p 2017:1433 `
-e "MSSQL_TCP_PORT=1433" `
-v ${datapath}:/var/opt/mssql/data `
-v ${logpath}:/var/opt/mssql/log `
-v ${backuppath}:/var/opt/mssql/backup `
-e "MSSQL_BACKUP_DIR=/var/opt/mssql/backup" `
-e "MSSQL_DATA_DIR=/var/opt/mssql/data" `
-e "MSSQL_LOG_DIR=/var/opt/mssql/log" `
-d mcr.microsoft.com/mssql/server:vNext-CTP2.0-ubuntu)
恢复命令。
RESTORE DATABASE [AdventureWorks2017] FROM DISK = N'/var/opt/mssql/backup/AdventureWorks2017.bak'
WITH FILE = 1,
MOVE N'AdventureWorks2017' TO N'/var/opt/mssql/data/AdventureWorks2017.mdf',
MOVE N'AdventureWorks2017_log' TO N'/var/opt/mssql/log/AdventureWorks2017_log.ldf',
NOUNLOAD, STATS = 1