16. SQL - JOB 作业

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;281642SQL 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

--*/__


你可能感兴趣的:(sql,job)