SQL Server Job 简单使用
-- 根据SP来检查用的那个作业
SELECT*
FROMmsdb.dbo.sysjobs JOB WITH( NOLOCK)
INNERJOIN msdb.dbo.sysjobsteps STP WITH(NOLOCK )
ON STP .job_id = JOB .job_id
WHERE STP .commandLIKE N'% sp_name %'
-- 禁用JOB
EXECmsdb..sp_update_job
@job_name='Job_name',
@enabled=0 -- 0为禁用,1为启用
-- 删除JOB ,具体参数查 MSDN,此处不再多说
EXECmsdb.dbo.sp_delete_job @job_name='Job_name'; -- job_name 参看select name from msdb.dbo.sysjobs
EXECmsdb.dbo.sp_start_job @job_name='Job_name'
EXECmsdb.dbo.sp_stop_job @job_name='Job_name'
-- 查询已经启用 Job 的执行状态
select b.name, a.step_name, msdb.dbo.agent_datetime( run_date, run_time) AS'RunDateTime' ,
a.run_duration,
case when a.run_status=0then'Failed'
when a.run_status=1then'Succeeded'
when a.run_status=2then'Retry'
when a.run_status=3then'Canceled'
else'Unknown'
endasrun_status,
a.[message]
from msdb .dbo.sysjobhistory a innerjoin msdb .dbo. sysjobs b on a.job_id =b .job_id
innerjoin msdb.dbo.sysjobsteps s on a .job_id = s .job_id and a.step_id = s .step_id
where b .enabled =1
-- 查询那些JOB 是禁用的
SELECT job_id ,name , enabled FROMmsdb.dbo.sysjobs
where enabled =0
-- 常用 Job 表
SELECT*FROMmsdb.dbo.sysjobs --存储将由 SQL Server 代理执行的各个预定作业的信息
SELECT*FROMmsdb.dbo.sysjobsteps; --包含 SQL Server 代理要执行的作业中的各个步骤的信息
SELECT*FROM msdb.dbo.sysjobhistory --包含有关 SQL Server 代理执行预定作业的信息
SELECT*FROMmsdb.dbo.sysjobstepslogs; --包含所有 SQL Server 代理作业步骤的作业步骤日志
SELECT*FROMmsdb.dbo.sysjobschedules --包含将由 SQL Server 代理执行的作业的计划信息
SELECT*FROMmsdb.dbo.sysjobactivity; --记录当前 SQL Server 代理作业活动和状态
SELECT*FROMmsdb.dbo.sysjobservers --存储特定作业与一个或多个目标服务器的关联或关系
SELECT*FROMmsdb.dbo.sysjobs_view; --
SELECT*FROMmsdb.dbo.syscategories --包含由 SQL Server Management Studio 用来组织作业、警报和操作员的类别
以上均为SQL描述,日常基本够用吧,或者还可以参考一下:http://www.cnblogs.com/kerrycode/p/3279559.html 这个文章,写的很全。
在此处补充一下 JOb 设置属性,有的时候我们可能看某个JOB但是发现其历史记录没有,或者只有1天的,可能就是设置的原因
这个地方可以根据实际的需求也对其进行日志,记录行数进行调整。
要查看某个JOB的历史记录也可以直接右击---查看历史记录,便能够看到其历史记录及执行状态。
Sql Server中维护计划无法删除的解决方法
1. 先执行下面的语句将维护计划的ID查出。
select * from sysmaintplan_plans
2. 将查出的ID填入到下面几句话中的''中,并执行。
delete from sysmaintplan_log where plan_id = ''
delete from sysmaintplan_subplans where plan_id = ''
delete from sysmaintplan_plans where id = ''
3. 在Sql Agent中删除相应的Job(维护计划会自动建立相应的Job).
但是这个方法不能确定是否已将所有的系统表中的关于这个维护计划的记录都删除了,希望大家有知道的能给点意见,以上的方法自己使用过很多次了是可以的。
导出SQL Server中所有Job的最简单方法
应用场景:
在将源SQL Server数据库服务器中的所有Job(作业)迁移至目标数据库服务器的过程中,需要先将这些Job导出为SQL脚本。
操作步骤:
1、在Microsoft SQL Server Management Studio中,选择SQL Server Agent->Jobs,按F7打开Object ExplorerDetails窗口,选中所有Job;
2、点击鼠标右键,选择Script Job as->CREATE To->New Query Editor Windows,然后所有Job会以SQL脚本的方式显示在查询窗口中。