navicat本身不支持批处理作业失败触发短信或webhook,因其无内置失败回调、事件钩子或通知模块;它仅串行执行操作且不捕获退出状态、不提供条件分支,失败告警必须由外部脚本(如powershell)通过日志关键词匹配后调用api实现。

Navicat 本身不支持“批处理作业失败时触发短信或 Webhook”——它没有内置的失败回调、事件钩子或通知模块。所有你看到的「批处理作业」界面,实际只是按顺序执行多个独立操作(如备份 → 同步 → 导出),但**不捕获每一步的退出状态,也不提供条件分支或错误跳转能力**。
如果你需要失败告警,必须把逻辑移出 Navicat,用外部脚本控制流程并承担通知职责。
Navicat 的「批处理作业」到底能做什么
它只是 GUI 封装的串行调用器:Backup → Synchronize → Export,每步都走自己的连接和参数配置。但:
- 不返回标准退出码(exit code),无法被系统级调度器判断成败
- 日志只记录“已启动”,不记录 SQL 执行结果或报错详情
- 即使某步失败(比如导出时磁盘满),后续步骤仍会继续执行
- 没有
on_failure、webhook_url或phone_number这类配置项
真正可行的失败通知方案:用 PowerShell / Python 接管全流程
把 Navicat 当作一个“数据库命令执行器”,所有逻辑、判断、通知都由外部脚本完成:
- 用
Start-Process调用navicat.exe -run "MyJob"启动批处理作业 - 用
Wait-Process等待结束,再检查其进程退出码(注意:Navicat 自身几乎总是返回 0,不可靠) - 改用日志文件判据更可靠:让 Navicat 把输出重定向到文件,再 grep 关键词
- 失败判定建议用组合条件:
if ($log -match "Error|failed|ORA-|1064|SQLSTATE") { Send-SmsViaApi ... } - 短信需调用运营商 HTTP API(如容联云、腾讯云短信),Webhook 直接
Invoke-RestMethod -Method Post -Uri $url -Body $json
Start-Process -FilePath "C:\Program Files\PremiumSoft\Navicat Premium 16\navicat.exe" `
-ArgumentList '/run "ProdDailySync"', '/log "C:\navi_logs\sync_$(Get-Date -f yyyyMMdd).log"' `
-Wait
$log = Get-Content "C:\navi_logs\sync_$(Get-Date -f yyyyMMdd).log" -Tail 50
if ($log -match "Error|failed|SQLSTATE|ORA-") {
$body = @{msg = "Navicat sync failed at $(Get-Date)"} | ConvertTo-Json
Invoke-RestMethod -Uri "https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXX" `
-Method Post -Body $body -ContentType 'application/json'
}
为什么不能依赖 Navicat 自带的「高级选项 → 邮件通知」
那个邮件开关只对四类任务生效:Backup、Restore、Synchronize、Export,且仅在「单任务」模式下可用;一旦放进「批处理作业」里,该选项就灰掉不可用。更重要的是:
- 它只发成功通知,不支持失败触发
- 不支持短信、Webhook、钉钉/企微机器人等任意第三方通道
- 邮件配置是全局的,无法为不同作业设不同收件人或模板
容易被忽略的关键点
Navicat 不会帮你解析错误语义——"Warning: Data truncated" 和 "ERROR 1062: Duplicate entry" 在日志里都是普通文本,脚本里得自己定义哪些算“失败”。别指望靠 exit code 判断;也别把告警逻辑写进 Navicat 查询窗口里,那根本不会被执行。











