带短横线名称的SQL Server数据库跨平台恢复失败求助
带短横线名称的SQL Server数据库跨平台恢复失败求助
嘿,我懂你遇到的这个糟心问题了!从Windows SQL Server备份带短横线的数据库,恢复到Linux版SQL Server时踩了逻辑文件名的坑——这事儿确实很容易搞错,我帮你捋清楚问题根源和解决办法:
问题出在哪儿?
你执行的RESTORE FILELISTONLY其实已经给出了关键线索,但你在恢复命令里用错了文件名类型:
- 从输出能看到,数据库的逻辑文件名是
my-awesome-database(数据文件)和my-awesome-database_log(日志文件) - 但你在
RESTORE DATABASE的MOVE参数里写的是my-awesome-database.mdf和my-awesome-database_log.ldf——这是Windows上的物理文件名,不是SQL Server识别的逻辑文件名,所以才会报错说找不到对应逻辑文件。
正确的恢复命令
把MOVE后面的逻辑名替换成FILELISTONLY输出里的LogicalName值,修正后的命令如下:
RESTORE DATABASE [my-awesome-database] FROM DISK = '/tmp/my-awesome-database_FULL_20230810_000209.bak' WITH REPLACE, MOVE 'my-awesome-database' TO '/var/opt/mssql/data/my-awesome-database.mdf', MOVE 'my-awesome-database_log' TO '/var/opt/mssql/data/my-awesome-database_log.ldf';
额外提个醒
不管数据库名有没有短横线,MOVE参数都必须指定逻辑文件名,而不是物理文件名。之前不带短横线的数据库能成功,大概率是因为那些数据库的逻辑名刚好和物理文件名(去掉后缀)一致,这次带短横线的数据库逻辑名没有后缀,就把这个隐藏问题暴露出来了。
另外你指定的Linux路径是没问题的,只要SQL Server服务对该路径有读写权限就ok~
备注:内容来源于stack exchange,提问作者snuk182
相关产品推荐
相关产品推荐

