navicat 不直接执行 sql server 定时备份,真正执行的是 backup database 命令;需在 navicat 中新建并保存 t-sql 查询(以 use master 开头),路径须为 sql server 服务账户有写权限的本地路径,再通过「自动运行」绑定该查询并设置任务计划,异地备份需解决网络路径权限问题。
navicat 本身不直接执行 sql server 的定时备份任务,它只是调度器和界面代理;真正执行备份的是 sql server 的 backup database 命令,必须依赖数据库服务器本地或远程可访问的磁盘路径(或启用 xp_cmdshell 调用系统命令挂载网络路径)。
SQL Server 备份脚本必须用 T-SQL 写在 Navicat 查询中
Navicat 的「自动运行」功能不能直接调用图形化备份向导,必须先新建一个可执行的 T-SQL 查询并保存。常见错误是直接点「SQL Server 备份」按钮生成一次备份,却没把它转成可复用的脚本。
- 连接目标 SQL Server 实例后,右键数据库 →「查询」→ 新建查询
- 脚本开头必须加
USE master,否则BACKUP DATABASE可能因上下文错位失败 - 备份路径必须是 SQL Server 服务账户有写权限的位置,例如:
'D:ackupmydb_' + CONVERT(VARCHAR(8), GETDATE(), 112) + '.bak' - 若要按时间戳命名,
CONVERT(VARCHAR, GETDATE(), 108)返回带冒号的字符串,需用REPLACE(..., ':', '')清洗,否则 Windows 文件名非法 - 务必测试脚本:点击「运行」,确认返回「命令已成功完成」且目标路径下生成了
.bak文件
Navicat 批处理作业必须绑定已保存的查询文件
「自动运行」不是定时器开关,而是把「已保存的查询」打包成可调度任务。没保存的查询无法加入批作业,这是最常卡住的一步。
- 写完并测试通过的查询,必须点击「文件」→「保存」,给它起个名字(如
backup_mydb.sql),否则在批作业里找不到 - 点击顶部「自动运行」→「新建批处理作业」→ 在左侧「可用的工作」中找到刚保存的查询,双击或拖入右侧「已选择的工作」
- 保存批作业时,Navicat 会提示输入操作系统密码(Windows 登录密码),这是为了以当前用户身份调用 SQL Server 连接——若用 SQL Server 账户登录,此处仍需输 Windows 密码
- 保存后才出现「设置任务计划」按钮;触发器里选「每天」「每周」等,注意时区按本地系统时间算,不是数据库服务器时间
异地备份必须让 SQL Server 服务能写入网络路径
直接把备份路径写成 '92.168.1.100ackup...' 会失败:SQL Server 服务默认以 NT SERVICEMSSQLSERVER 身份运行,它没有访问网络共享的凭据。
- 方案一(推荐):在 SQL Server 服务器上,用管理员权限运行
net use Z: \192.168.1.100ackup /user:domainuser password,然后在脚本中用Z:...路径 - 方案二:启用
xp_cmdshell(高风险),在备份前执行EXEC xp_cmdshell 'net use ...',但需 DBA 显式开启,且每次备份都重新映射,不稳定 - 方案三(最稳):改用 Windows 任务计划 +
sqlcmd,绕过 Navicat,把权限控制收归系统层 - 无论哪种,都要检查 SQL Server 服务账户对目标路径是否有「写入」和「修改」权限,仅「读取」不够
还原时 RESTORE DATABASE 必须显式指定文件路径
从 Navicat 图形化还原界面点「从文件还原」看似简单,但若原库文件路径和目标服务器不一致(比如 C:Program Files...data),还原会报错「无法覆盖现有文件」或「拒绝访问」。
- 务必勾选「覆盖现有数据库」(
WITH REPLACE) - 点击「生成 SQL」后,手动检查生成的语句中
MOVE子句:两个逻辑名(xxx_data和xxx_log)是否对应目标服务器上真实存在的 MDF/LDF 路径 - 如果目标是空实例或 Docker 容器,MDF/LDF 路径很可能不存在,需提前创建目录,或改用
CREATE DATABASE ... FOR ATTACH方式挂载 - 还原前建议先断开所有连接:
ALTER DATABASE [dbname] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
真正的难点不在 Navicat 点几下,而在于搞清 SQL Server 服务账户的权限边界、网络路径的认证链路、以及还原时文件所有权的继承关系。很多“备份成功但还原失败”的问题,根源都在这些底层细节被跳过了。











