首页 > 数据库技术 > 详细

16. SQL - JOB 作业

时间:2015-03-24 19:37:58      阅读:335      评论:0      收藏:0      [点我收藏+]

SQLJOB

 

  • 创建定时作业

如果在SQL Server 里需要定时或者每隔一段时间执行某个存储过程或3200 字符以内的SQL 语句时,可以用管理->SQL Server 代理->作业来实现。

(1)、管理->SQL Server 代理->作业(按鼠标右键)->新建作业

(2)、新建作业属性(常规)->名称[自定义本次作业的名称]->启用的方框内是勾号->分类处可选择也可用默认的[未分类(本地)]->所有者默认为登录SQL Server 用户[也可选其它的登录]->描述[填写本次工作详细描述内容];

 

创建作业分类的步骤:

SQLServer 代理->作业->右键选所有任务->添加、修改、删除

(3)、新建作业属性(步骤)->新建->步骤名[自定义第一步骤名称]->类型

[Transact-SQL(TSQL)脚本]->数据库[要操作的数据库]->命令 [ 如果是简单的SQL 直接写进去即可,也可用打开按钮输入一个已写好的*.sql。文件如果要执行存储过程,填execp_procedure_namev_parameter1,[ v_parameter2v_parameterN] ->确定 (如果有多个步骤,可以再次调用下面的新建按钮;也可以对已有的多个步骤插入、编辑、删除);

(4)、建作业属性(调度)->新建调度->名称[自定义调度名称]->启用的方框内是勾号->调度->反复出现-> 更改[调度时间表]->确定(如果只要保存此作业,不要定时做可以把启用的方框内是勾号去掉);

(5)、建作业属性(通知)->用默认的通知方法就好[当作业失败时,写入Windows 应用程序系统日志] ->确定。

(6)、跟作业执行相关的一些SQL Server 知识:

SQLServer Agent 服务必须正常运行,启动它的NT 登录用户要跟启动SQL Server数据库的NT 登录用户一致;

点作业右键可以查看作业执行的历史记录情况,也可以立即启动作业和停止作业。

 

 

 

最近在看作业历史记录时,发现有的作业记录的历史记录多,有的作业记录的记录的历史记录少。如何能使某些作业按各自的需求,保留一段时间.比如保留一个月的历史记录.

看了SQL Server 的在线帮助文档,里

面介绍说:

在管理->SQL Server 代理->右键选属性->作业系统->限制作业历史记录日志的大小作业历史记录日志的最大大小(行数) ,默认为1000 。如果某台机器的作业数量很多,一定要提高它,例如为100000每个作业历史记录日志的最大行数,默认为100。如果作业每天执行两次,需要保留一个月的日志,可以设为60

它们之间有一个相互制约关系, 我们可以根据自己的需要来改.

如果SQL Server 服务器改过机器名, 管理是旧名称时建立的job的时候可能会遇到。

错误14274: 无法添加、更新或删除从MSX 服务器上发起的作业(或其步骤或调度)。看了

Microsoft的文档:http:

//support.microsoft.com/default.aspx?scid=kb;en-us;281642说SQL Server 2000 系统里msdb..sysjobs 里originating_server 字段里存的是原来的服务器的名称。24X7 在用的系统肯定不能按上面Microsoft 的文档说的那样把名字改回来又改过去。于是想,msdb..sysjobs 能否update originating_server 字段成现在在用的新服务器名?

Solution:

 

usemsdb

select* from sysjobs

找到originating_server 字段还是旧服务器的job_id,

 

然后执行update 语句:

updatesysjobs set originating_server=‘new_server_name‘

wherejob_id=‘B23BBEBE-A3C1-4874-A4AB-0E2B7CD01E14‘

(所影响的行数为1 行)

这样就可以添加、更新或删除那些曾经出error 14274 的作业了。

 

如果想把作业由一台机器迁移到另一台机器,可以先保留好创建作业的脚本, 然后在另一台机器上运行。

12.2、导出所有作业的创建脚本操作步骤:

管理->SQL Server 代理->作业(鼠标右键)->所有任务->生成SQL 脚本->保存到操作系统下的某个sql 文件导出某一个作业的创建脚本操作步骤:

(1)、管理->SQL Server 代理->作业->选中待转移的作业(鼠标右键)->所有任务->生成SQL 脚本->保存到OS 下的某个sql 文件

(2)、然后在目的服务器上运行刚才保存下来的创建作业的sql 脚本。( 如果建作业的用户或者提醒的用户不存在,则会出错; 我们需要在目的服务器上建立相关的WINDOWS 用户或者SQL Server 数据库登录, 也可以修改创建作业的脚本, 把目的服务器上不存在的用户替换成已经有的用户。如果生成日志的物理文件目录不存在,也应该做相关的修改,

 

例如d:\区转f:\区等字符串的 @command 命令里有分隔符号 go 也会出错, 可以把它去掉)。

 

  • SQL作业的操作:

--定义创建作业

DECLARE @jobid uniqueidentifier

EXEC msdb.dbo.sp_add_job

@job_name = N‘作业名称‘,

@job_id = @jobid OUTPUT

--定义作业步骤

DECLARE @sql nvarchar(400),@dbname sysname

SELECT @dbname=DB_NAME(), --作业步骤在当前数据库中执行

@sql=N‘--作业步骤内容‘ --一般定义的是使用TSQL处理的作业,

这里定义要执行的Transact-SQL语句

EXEC msdb.dbo.sp_add_jobstep

@job_id = @jobid,

@step_name = N‘作业步骤名称‘,

@subsystem = ‘TSQL‘, --步骤的类型,一般为TSQL

@database_name=@dbname,

@command = @sql

--创建调度(使用后面专门定义的几种作业调度模板)

EXEC msdb..sp_add_jobschedule

@job_id = @jobid,

@name = N‘调度名称‘,

@freq_type=4, --每天

@freq_interval=1, --指定每多少天发生一次,这里是天.

@freq_subday_type=0x8, --重复方式,0x1=在指定的时间,0x4=多少分钟,0x8=多少小时执行一

次

@freq_subday_interval=1, --重复周期数,这里每小时执行一次

@active_start_date = NULL, --作业执行的开始日期,为NULL时表示当前日期,格式为YYYYMMDD

@active_end_date = 99991231, --作业执行的停止日期,默认为,格式为YYYYMMDD

@active_start_time = 00000, --作业执行的开始时间,格式为HHMMSS

@active_end_time = 235959 --作业执行的停止时间,格式为HHMMSS

--添加目标服务器

DECLARE @servername sysname

SET @servername=CONVERT(nvarchar(128),SERVERPROPERTY(N‘ServerName‘))

EXEC msdb.dbo.sp_add_jobserver

@job_id = @jobid,

@server_name = @servername --使用当前SQL实例

--调度模板定义

--/*--日调度

EXEC msdb..sp_add_jobschedule

@job_id = @jobid,

@name = N‘调度名称‘,

@freq_type=4, --每天

@freq_interval=1, --指定每多少天发生一次,这里是天.

@freq_subday_type=0x8, --重复方式,0x1=在指定的时间,0x4=多少分钟,0x8=多少小时执行一次

@freq_subday_interval=1, --重复周期数,这里每小时执行一次

@active_start_date= NULL, --作业执行的开始日期,为NULL时表示当前日期,格式为YYYYMMDD

@active_end_date= 99991231, --作业执行的停止日期,默认为,格式为YYYYMMDD

@active_start_time= 00000, --作业执行的开始时间,格式为HHMMSS

@active_end_time= 235959 --作业执行的停止时间,格式为HHMMSS

--*/

--/*--周调度

EXEC msdb.dbo.sp_add_jobschedule

@job_id= @jobid,

@name= N‘调度名称‘,

@freq_type= 8, --每周

@freq_recurrence_factor= 1, --每多少周执行一次,这里是每周

@freq_interval= 62, --在星期几执行,由POWER(2,N)表示,N的值为~6,代表星期日~

星期六,如果指定两个,则将值相加,例如,值为表示在星期天和星期日执行(POWER(2,0)+POWER(2,6))

@freq_subday_type= 0x8, --重复方式,0x1=在指定的时间,0x4=多少分钟,0x8=多少小时

执行一次

@freq_subday_interval= 1, --重复周期数,这里每小时执行一次

@active_start_date= NULL, --作业执行的开始日期,为NULL时表示当前日期,格式为

YYYYMMDD

@active_end_date= 99991231, --作业执行的停止日期,默认为,格式为YYYYMMDD

@active_start_time= 00000, --作业执行的开始时间,格式为HHMMSS

@active_end_time= 235959 --作业执行的停止时间,格式为HHMMSS

--*/

--/*--月调度(每X个月的每月几号)

EXEC msdb.dbo.sp_add_jobschedule

@job_id= @jobid,

@name= N‘调度名称‘,

@freq_type= 16, --每月

@freq_recurrence_factor= 2, --每多少月执行一次,这里是每个月

@freq_interval= 2, --在执行月的第几天执行,这里是第天

@freq_subday_type= 0x8, --重复方式,0x1=在指定的时间,0x4=多少分钟,0x8=多少小时

执行一次

@freq_subday_interval= 1, --重复周期数,这里每小时执行一次

@active_start_date= NULL, --作业执行的开始日期,为NULL时表示当前日期,格式为

YYYYMMDD

@active_end_date= 99991231, --作业执行的停止日期,默认为,格式为YYYYMMDD

@active_start_time= 00000, --作业执行的开始时间,格式为HHMMSS

@active_end_time= 235959 --作业执行的停止时间,格式为HHMMSS

--*/

--/*--月调度(每X个月的相对时间)

EXEC msdb.dbo.sp_add_jobschedule

@job_id= @jobid,

@name= N‘调度名称‘,

@freq_type= 32, --每月

@freq_recurrence_factor= 2, --每多少月执行一次,这里是每个月

@freq_interval= 9, --在当月的那个时间执行,1~7=星期日至星期六,8=日,9=工作

日,10=周末

@freq_relative_interval= 1, --在第几个相对时间执行,允许的值为,2,4,8代表第~4个相对

时间,16表示最后一个相对时间

@freq_subday_type= 0x8, --重复方式,0x1=在指定的时间,0x4=多少分钟,0x8=多少小时

执行一次

@freq_subday_interval= 1, --重复周期数,这里每小时执行一次

@active_start_date= NULL, --作业执行的开始日期,为NULL时表示当前日期,格式为

YYYYMMDD

@active_end_date= 99991231, --作业执行的停止日期,默认为,格式为YYYYMMDD

@active_start_time= 00000, --作业执行的开始时间,格式为HHMMSS

@active_end_time= 235959 --作业执行的停止时间,格式为HHMMSS

--*/

--/*--在特定时候执行的作业调度

EXEC msdb.dbo.sp_add_jobschedule

@job_id= @jobid,

@name= N‘调度名称‘,

@freq_type= 64 --64=在SQLServerAgent 服务启动时运行,128=计算机空闲时运行

--*/

--/*--只执行一次的作业调度

EXEC msdb..sp_add_jobschedule

@job_id= @jobid,

@name= N‘调度名称‘,

@freq_type=1, --仅执行一次

@active_start_date= NULL, --作业执行的开始日期,为NULL时表示当前日期,格式为

YYYYMMDD

@active_start_time= 00000 --作业执行的开始时间,格式为HHMMSS

--*/__


本文出自 “Ricky's Blog” 博客,请务必保留此出处http://57388.blog.51cto.com/47388/1623799

16. SQL - JOB 作业

原文:http://57388.blog.51cto.com/47388/1623799

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!