数据库做业

SQL Server:定时做业的设置方法
--------------------------------------------------------------------------------

若是在SQL Server 里须要定时或者每隔一段时间执行某个存储过程或3200字符之内的SQL语句时,能够用管理->SQL Server代理->做业来实现。

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

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

建立做业分类的步骤: SQL Server代理->做业->右键选全部任务->添加、修改、删除

三、 新建做业属性(步骤)->新建->步骤名[自定义第一步骤名称]->类型[Transact-SQL(TSQL)脚本]->数据 库[要操做的数据库]->命令 [ 若是是简单的SQL直接写进去便可,也可用打开按钮输入一个已写好的*.sql。文件若是要执行存储过程,填 exec p_procedure_name v_parameter1,[ v_parameter2…v_parameterN] ->肯定 (若是有多个步骤,能够再次调用下面的新建按钮;也能够对已有的多个步骤插入、编辑、删除);

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

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

跟做业执行相关的一些SQL Server知识:

SQL Server 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 字段成如今在用的新服务器名?

use msdb
select * from sysjobs


找到originating_server 字段仍是旧服务器的job_id, 而后执行update语句:

update sysjobs set originating_server='new_server_name'
where job_id='B23BBEBE-A3C1-4874-A4AB-0E2B7CD01E14'


(所影响的行数为 1 行)

这样就能够添加、更新或删除那些曾经出error 14274 的做业了。

若是想把做业由一台机器迁移到另外一台机器,能够先保留好建立做业的脚本, 而后在另外一台机器上运行。

导出全部做业的建立脚本操做步骤:

管理->SQL Server代理->做业(鼠标右键)->全部任务->生成SQL脚本->保存到操做系统下的某个sql文件

导出某一个做业的建立脚本操做步骤:

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

然 后在目的服务器上运行刚才保存下来的建立做业的sql脚本。( 若是建做业的用户或者提醒的用户不存在, 则会出错; 咱们须要在目的服务器上创建相关的WINDOWS用户或者SQL Server数据库登陆, 也能够修改建立做业的脚本, 把目的服务器上不存在的用户替换成已经有的用户。若是生成日志的物理文件目录不存在,也应该作相关的修改,例如d:\区转f:\区等字符串的 @command 命令里有分隔符号 go 也会出错, 能够把它去掉)sql

********************************************数据库

--每个月执行的做业
exec p_createjob @jobname='mm',@sql='select * from syscolumns',@freqtype='month'
--每周执行的做业
exec p_createjob @jobname='ww',@sql='select * from syscolumns',@freqtype='week'
--每日执行的做业
exec p_createjob @jobname='a',@sql='select * from syscolumns'
--每日执行的做业,天天隔4小时重复的做业
exec p_createjob @jobname='b',@sql='select * from syscolumns',@fsinterval=4
--*/
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_createjob]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_createjob]
GO
create proc p_createjob
@jobname varchar(100),--做业名称
@sql varchar(8000),--要执行的命令
@dbname sysname='',--默认为当前的数据库名
@freqtype varchar(6)='day',--时间周期,month 月,week 周,day 日
@fsinterval int=1,--相对于每日的重复次数
@time int=170000--开始执行时间,对于重复执行的做业,将从0点到23:59分
as
if isnull(@dbname,'')='' set @dbname=db_name()
--建立做业
exec msdb..sp_add_job @job_name=@jobname
--建立做业步骤
exec msdb..sp_add_jobstep @job_name=@jobname,
@step_name = '数据处理',
@subsystem = 'TSQL',
@database_name=@dbname,
@command = @sql,
@retry_attempts = 5, --重试次数
@retry_interval = 5 --重试间隔
--建立调度
declare @ftype int,@fstype int,@ffactor int
select @ftype=case @freqtype when 'day' then 4
when 'week' then 8
when 'month' then 16 end
,@fstype=case @fsinterval when 1 then 0 else 8 end
if @fsinterval<>1 set @time=0
set @ffactor=case @freqtype when 'day' then 0 else 1 end
EXEC msdb..sp_add_jobschedule @job_name=@jobname,
@name = '时间安排',
@freq_type=@ftype , --天天,8 每周,16 每个月
@freq_interval=1,--重复执行次数
@freq_subday_type=@fstype,--是否重复执行
@freq_subday_interval=@fsinterval, --重复周期
@freq_recurrence_factor=@ffactor,
@active_start_time=@time --下午17:00:00分执行
-- 添加目标服务器
EXEC msdb.dbo.sp_add_jobserver
@job_name = @jobname ,
@server_name = N'(local)'
go
——建立存储过程—在“管理”—“做业”中进行操做服务器

相关文章
相关标签/搜索