前言
如果在SQL Server 里需要定时或者每隔一段时间执行某个存储过程或3200字符以内的SQL语句时, 可以用SQL Server代理->作业来实现。
实施步骤
1、哪里有作业?
在数据库的SQL Server 代理中,可以看到作业,当启动代理服务的时候,作业也就可以启动了。
2、什么情况下用作业?
一般的存储过程是在用户进行触发的时候执行的,但是假如用户一直不触发这个事件,但是却想执行,这时候就可以用作业了。它广泛应用于数据库备份、定时定点地更新数据库表等操作中。
3、怎么建立作业?
(1)右击作业—>新建作业—>常规中—>填写各作业属性:
其中,名称是自定义本次作业的名称,勾选[启用],分类处可选择也可用默认的[未分类(本地)],所有者默认为登录SQL Server用户,也可选其它的登录,说明中填写本次工作详细描述内容。
(2)步骤—>常规—>新建作业步骤—>填写步骤名称、数据库、运行的sql语句或者是存储过程等:
步骤名是自定义第一步骤名称,类型可填Transact-SQL(TSQL)脚本,数据库是要操作的数据库,命令中如果是简单的SQL直接写进去即可,也可打开一个已写好的*.sql文件;如果要执行存储过程,填exec p_procedure_name v_parameter1,[ v_parameter2…v_parameterN] ],最后确定。另外,如果有多个步骤,可以再次调用下面的新建按钮,也可以对已有的多个步骤插入、编辑、删除!
(3)、点击计划—>新建—>新建作业计划:
警告、通知、目标等可以写,也可以不写,最后点击确定,这就制作出一个作业来啦。
(4)、启动上述作业的服务:
后话:
实际中,写的一般都是带有很多逻辑的存储过程,同时作业不存储在具体的用户数据库下面,而是存储在我们的系统库msdb中,所以里面有关于作业的详细记录,比一般的表要大。我们在msdb中经常会用他的系统表来查询关于作业的信息,所以,这些系统表我们还是很有必要去看看的。
另附跟作业执行相关的一些SQL Server知识:
1、登录用户要一致
SQLSERVERAGENT服务必须正常运行,启动它的NT登录用户要跟启动SQL Server数据库的NT登录用户一致。
右键点作业可以查看作业执行的历史记录情况,也可以立即启动作业和停止作业。
2、保留历史记录
最近在看作业历史记录时,发现有的作业记录的历史记录多,有的作业记录的记录的历史记录少。
如何能使某些作业按各自的需求,保留一段时间,比如保留一个月的历史记录?
在SQL Server代理->右键选属性->历史记录:勾选并设置[限制作业历史记录日志的大小]
3、作业迁移
如果想把作业由一台机器迁移到另一台机器,可以先保留好创建作业的脚本,然后在另一台机器上运行:
先导出所有作业的创建脚本操作步骤:管理->SQL Server代理->作业(鼠标右键)->所有任务->生成SQL脚本->保存到操作系统下的某个sql文件 ;
然后,导出某一个作业的创建脚本操作步骤:管理->SQL Server代理->作业->选中待转移的作业(鼠标右键)->所有任务->生成SQL脚本->保存到OS下的某个sql文件 。
接着,在目的服务器上运行刚才保存下来的创建作业的sql脚本。 ( 如果建作业的用户或者提醒的用户不存在,则会出错;我们需要在目的服务器上建立相关的WINDOWS用户或者SQL Server数据库登录,也可以修改创建作业的脚本,把目的服务器上不存在的用户替换成已经有的用户。如果生成日志的物理文件目录不存在,也应该做相关的修改,例如d:/区转f:/区等字符串的 @command 命令里有分隔符号 go 也会出错,可以把它去掉)