我必须还原数据库,并且正在遵循此官方文档,在此我们遵循两个步骤: -列出文件 -对上述文件运行“恢复”命令。
但是,我遇到了“已声明”错误。
我尝试使用其他名称,但是由于备份中包含某些文件,因此无法使用。我还尝试了跨不同域的其他答案,都具有GUI。
我运行的第一个命令是:
sudo docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd -S localhost \
-U SA -P '<YourStrong@Passw0rd>' \
-Q 'RESTORE FILELISTONLY FROM DISK = "/var/opt/mssql/backup/us_national_statistics.bak"' \
| tr -s ' ' | cut -d ' ' -f 1-2
我得到以下输出:
LogicalName PhysicalName
-------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
us_national_statistics C:\Program
us_national_statistics_log C:\Program
然后,根据文档,我运行以下命令:
sudo docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd \
-S localhost -U SA -P '<YourStrong@Passw0rd>' \
-Q 'RESTORE DATABASE US_NATIONAL FROM DISK = "/var/opt/mssql/backup/us_national_statistics.bak" WITH MOVE "us_national_statistics" TO "C:\Program", MOVE "us_national_statistics_log" TO "C:\Program"'
在这里,出现以下错误:
Msg 3176, Level 16, State 1, Server 0a6a6aac7476, Line 1
File 'C:\Program\New' is claimed by 'us_national_statistics_log'(2) and 'us_national_statistics'(1). The WITH MOVE clause can be used to relocate one or more files.
Msg 3013, Level 16, State 1, Server 0a6a6aac7476, Line 1
RESTORE DATABASE is terminating abnormally.
我希望数据库可以恢复。
答案 0 :(得分:2)
由于多种原因,您无法还原到C:\Program
。那不是完整的路径(您似乎在Program Files
的第一个空格之后丢失了字符串);数据和日志不能都放在同一个文件中;您通常没有对任何驱动器根目录的写权限;并且C:\
在Docker或Linux中无效。
您需要LogicalName,但在要还原到Docker或Linux的情况下,或者要与要保留的现有副本一起还原数据库的情况下,请不要直接使用PhysicalName ,或者要将数据库还原到其他实例(很有可能具有不同的数据文件夹结构)。
尝试:
RESTORE DATABASE US_NATIONAL_COPY
FROM DISK = "/var/opt/mssql/backup/us_national_statistics.bak"
WITH REPLACE, RECOVERY,
MOVE "us_national_statistics" TO "/var/opt/mssql/data/usns_copy.mdf",
MOVE "us_national_statistics_log" TO "/var/opt/mssql/data/usns_copy.ldf";