none
维护计划中,备份数据库任务不会等待‘执行SQL Server代理作业’任务执行完成后再执行么? RRS feed

  • 问题

  • 例如:我想创建一个维护计划,每天做一次完整备份。备份盘上保存3次最近的备份文件。

    BACKUP.bak,BACKUP-2.bak,BACKUP-3.bak

    步骤1将BACKUP-3.bak备份文件删除,然后把前两天的备份文件改名。

    这个步骤写成了一个bat文件,使用SQL Server代理作业来完成。

    步骤1执行完之后再做步骤2“备份数据库”的任务。

    结果发现,没等步骤1执行完毕,步骤2就已经开始跑了。

    导致每次我的BACKUP.bak文件都没来得及重命名成BACKUP-2.bak

    就已经被新的备份文件给覆盖了。

    难道我非得创建成2个子计划,时间上设置一个先后么?

    2014年5月28日 5:48

答案

  • 是起了作用的, 只是“执行 SQL 代理作业”, 这个操作本身是启动 Job 就算完成任务了, 它并不 是像执行sql 那样会等待完成
    • 已标记为答案 ajiangg 2014年5月28日 9:44
    2014年5月28日 9:41

全部回复

  • 没有找到有设置等待Job 执行完成的, 你可以考虑在中间加个 sql 任务, 自己去判断 job 是否执行完成

    sp_help_job 返回的第一个结果集的 current_execution_status  反应了Job 的当前状态

    2014年5月28日 7:24
  • 既然只有三个文件直接用SQL 生成的带时间戳的不好?还可以直接删除几天之前的备份文件,直接用维护计划就可以了。

    另外你如果想要自己写,可以在备份之前先更改之前的备份文件名称,然后备份啊。


    Please Mark As Answer if it is helpful.

    2014年5月28日 8:26
  • 为啥在job和备份数据库之间那个“完成”的约束是摆设呢?

    难道job的话就不起作用了?

    2014年5月28日 9:19
  • 是起了作用的, 只是“执行 SQL 代理作业”, 这个操作本身是启动 Job 就算完成任务了, 它并不 是像执行sql 那样会等待完成
    • 已标记为答案 ajiangg 2014年5月28日 9:44
    2014年5月28日 9:41
  • 了解了,那我还是老老实实用清除维护任务来做这个第一步吧。

    • 已编辑 ajiangg 2014年5月28日 9:51
    2014年5月28日 9:44