Navicat 还原 SQL Server .BAK 文件本质是调用 RESTORE DATABASE 命令,需确保目标实例有权限、磁盘空间及可写路径,并正确使用 WITH MOVE 和 REPLACE 选项。
Navicat 里还原 SQL Server 的 .BAK 文件,本质是调用 RESTORE DATABASE
navicat 本身不直接解析或写入 sql server 备份文件;它只是图形化封装了 t-sql 的 restore database 命令。所以「多台数据库」还原的关键,不是 navicat 的操作逻辑变了,而是你得先连上目标 sql server 实例,并确保该实例有权限、磁盘空间和路径可写。
常见错误现象:Cannot open backup device 'xxx.bak'. Operating system error 5(Access is denied.) 或 The media family on device 'xxx.bak' is incorrectly formed —— 前者多半是 SQL Server 服务账户没权限读取你上传的 .BAK 路径,后者常因文件被压缩/损坏,或跨版本备份(比如 SQL Server 2022 备份在 2016 上还原)。
- 必须把 .BAK 文件放到 SQL Server 实例能访问的本地路径(比如
D:\Backup\app.bak),不能是你的笔记本桌面路径 - SQL Server 服务账户(如
NT SERVICE\MSSQLSERVER)需要对该目录有读取权限 - Navicat 连接的是哪个实例,就只能还原到那个实例;想还原到另一台服务器?得先用 Navicat 切换连接,再重复操作
还原时指定新数据库名和文件路径,WITH MOVE 不可跳过
直接点“还原”按钮默认会尝试覆盖原库名,但多数场景你要新建一个库(比如从生产库 ProdDB 还原成测试库 TestDB),这时必须手动改逻辑文件名和物理路径,否则报错:File 'ProdDB_Data' cannot be restored to 'C:\...\ProdDB.mdf'. Use WITH MOVE to identify a valid location.
实操建议:在 Navicat 还原界面点“高级”,勾选“生成脚本并执行”,先看它生成的 T-SQL,再手动加 WITH MOVE 子句:
RESTORE DATABASE TestDB
FROM DISK = 'D:\Backup\ProdDB.bak'
WITH MOVE 'ProdDB_Data' TO 'D:\Data\TestDB.mdf',
MOVE 'ProdDB_Log' TO 'D:\Log\TestDB.ldf',
REPLACE;
-
ProdDB_Data和ProdDB_Log是原备份中逻辑文件名,可用RESTORE FILELISTONLY FROM DISK = 'xxx.bak'查 - 目标路径(如
D:\Data\)必须已存在,且 SQL Server 有写权限;Navicat 不会自动建目录 - 如果目标实例已有同名数据库,必须加
REPLACE,否则还原中断
跨版本还原失败?重点看 COMPATIBILITY_LEVEL 和备份格式
SQL Server 2019 备份无法直接还原到 2014 实例,这是硬性限制,Navicat 再怎么点也绕不过去。错误信息通常是:This backup cannot be restored using WITH STANDBY because it was not taken on a server that supports this option(其实是版本不兼容的误报)或更直白的 Server version is not compatible。
- 检查源库版本:
SELECT @@VERSION;检查目标实例版本是否 ≥ 源版本 - SQL Server 2016+ 备份默认用新格式,老版本无法识别;没有降级导出功能,只能换实例或用中间库(如先还原到 2019,再生成脚本 + 数据迁移)
-
COMPATIBILITY_LEVEL是还原后才生效的设置,不影响还原动作本身,别把它和版本兼容性混淆
Navicat 独家?其实只是省了连 SSMS,但核心逻辑完全一样
所谓“独家操作方法”并不存在。Navicat 做的只是把你在 SSMS 里写的 RESTORE 命令图形化了,背后仍是 SQL Server 的原生命令引擎。它的优势是支持批量连接管理、一次配好多个目标实例,劣势是错误提示不如 SSMS 明确(比如权限问题只显示“还原失败”,不告诉你缺哪个路径权限)。
容易被忽略的一点:Navicat 默认使用 Windows 身份认证连接 SQL Server,如果你用的是 SQL 登录(sa / 密码),还原时可能因权限不足失败——而这个账号未必有 dbcreator 或 sysadmin 角色。务必确认连接用户具备 RESTORE DATABASE 权限。











