SQLSERVER 作业

作业系统表

    与作业有关的系统表、视图大致有下面9个,下面就不费口舌详细解说每一个系统表的作用了,MSDN文档上有详细的解说,有兴趣的翻看一下即可。

 

SELECT * FROM msdb.dbo.sysjobs            --存储将由 SQL Server 代理执行的各个预定作业的信息

SELECT * FROM msdb.dbo.sysjobschedules    --包含将由 SQL Server 代理执行的作业的计划信息

SELECT * FROM msdb.dbo.sysjobactivity;    --记录当前 SQL Server 代理作业活动和状态

SELECT * FROM msdb.dbo.sysjobservers      --存储特定作业与一个或多个目标服务器的关联或关系

SELECT * FROM msdb.dbo.sysjobsteps;       --包含 SQL Server 代理要执行的作业中的各个步骤的信息

SELECT * FROM msdb.dbo.sysjobstepslogs;   --包含所有 SQL Server 代理作业步骤的作业步骤日志

SELECT * FROM msdb.dbo.sysjobs_view;      --

SELECT * FROM msdb.dbo.sysjobhistory      --包含有关 SQL Server 代理执行预定作业的信息

SELECT * FROM msdb.dbo.syscategories      --包含由 SQL Server Management Studio 用来组织作业、警报和操作员的类别

-- 根据SP来检查用的那个作业
SELECT *
FROM msdb.dbo.sysjobs JOB WITH( NOLOCK)
INNER JOIN msdb. dbo.sysjobsteps STP WITH(NOLOCK )
ON STP .job_id = JOB .job_id
WHERE STP .command LIKE N'% sp_name %'

 

-- 禁用JOB
EXEC msdb..sp_update_job
    @job_name = 'Job_name',
    @enabled =0        -- 0为禁用,1为启用

-- 删除JOB ,具体参数查 MSDN,此处不再多说
EXEC msdb.dbo.sp_delete_job  @job_name = 'Job_name';  -- job_name 参看select name  from msdb.dbo.sysjobs
EXEC msdb.dbo.sp_start_job @job_name='Job_name'
EXEC msdb.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=0 then 'Failed'  
         when a.run_status= 1 then 'Succeeded'
         when a.run_status= 2 then 'Retry'
         when a.run_status= 3 then 'Canceled'
         else 'Unknown'  
         end as run_status,  
       a.[message]  
from msdb .dbo. sysjobhistory a inner join msdb .dbo. sysjobs b    on a.job_id =b .job_id 
inner join msdb. dbo.sysjobsteps s on a .job_id = s .job_id and a.step_id = s .step_id
where b .enabled = 1 


--查看历史情况
select run_status,a.run_time, a.* 
    from msdb.dbo.sysjobhistory a 
        inner join msdb.dbo.sysjobs b on a.job_id=b.job_id
    where b.name='作业名'

作业的执行状态run_status: 
0 = 失败
1 = 成功
2 = 重试
3 = 取消
4 = 正在进行

--------------

create view V_JOB_CHECK
as
with T1 as
(
select category = jc.name, category_id = jc.category_id, job_name = j.name, 
job_enabled = j.enabled, 
last_run_time = cast(js.last_run_date as varchar(10)) + '-' + cast(js.last_run_time as varchar(10)), 
last_run_duration = js.last_run_duration, 
last_run_status = js.last_run_outcome, 
last_run_msg = js.last_outcome_message + cast(nullif(js.last_run_outcome,1) as varchar(2)), 
job_created = j.date_created, 
job_modified = j.date_modified 
from msdb.dbo.sysjobs j 
inner join msdb.dbo.sysjobservers js on j.job_id = js.job_id 
inner join msdb.dbo.syscategories jc on j.category_id = jc.category_id 
where j.enabled = 1 and js.last_run_outcome in (0,1,3,5) 
),
-- 0:Fail 1:Succ 3:Cancel 5:First run and jc.category_id not between 10 and 20 -- repl 
T2 as
(
select job_name as 作业名称,case job_enabled when 1 then '已启动' when 0 then '已禁用' end as 状态,
last_run_time as 执行时间,
case last_run_status when 0 then '失败' 
                     when 1 then '成功'
                     when 2 then '重试'
                     when 3 then '取消'
                     when 4 then '正在进行'
end  as 执行状态
from T1 
)

select 作业名称,状态,tdate+' '+
case LEN(tTime) when 5 then '0'+LEFT(tTime,1)+':'+substring(tTime,2,2)+':'+substring(tTime,4,2)
               when 6 then LEFT(tTime,2)+':'+substring(tTime,3,2)+':'+substring(tTime,5,2)
               end as 执行时间,
执行状态 from (
select *,convert(nvarchar(10),convert(datetime,left(执行时间,PATINDEX('%-%', 执行时间)-1)),120) as tdate
,substring(执行时间,PATINDEX('%-%', 执行时间)+1,LEN(执行时间)) as Ttime
 from T2
 )a
 
 
 --作业的执行状态run_status: 
--0 = 失败
--1 = 成功
--2 = 重试
--3 = 取消
--4 = 正在进行

### SQL Server 作业管理 #### 创建SQL Server作业 通过SQL Server代理(SQL Server Agent),可以创建并调度各种类型的自动化任务,称为作业。这些作业可以在特定时间执行、响应某些条件触发或是按需手动启动。 为了创建一个新的SQL Server作业,可以通过SQL Server Management Studio (SSMS) 或者T-SQL命令来实现: 1. 使用图形界面工具 SSMS 进行设置: - 打开对象资源管理器中的“SQL Server代理” - 右键点击“作业”,选择新建作业选项 - 输入作业名称和其他必要信息,在步骤页面定义具体要执行的操作 2. 利用 T-SQL 脚本完成相同功能: ```sql USE msdb ; GO EXEC dbo.sp_add_job @job_name = N'Weekly Sales Data Backup' ``` 上述脚本用于向 `msdb` 数据库添加名为 "Weekly Sales Data Backup" 的新作业[^1]。 #### 故障排除技巧 当遇到与SQL Server作业有关的问题时,可以从以下几个方面着手解决问题: - **查看历史记录**: 每次作业完成后都会生成一条日志条目,其中包含了关于该次运行的结果详情以及可能存在的错误消息。这有助于快速定位问题所在。 - **启用调试模式**: 如果怀疑问题是由于编程逻辑引起的,则可以在编写Transact-SQL语句时加入额外的日志输出以便更好地理解程序流。 - **检查权限配置**: 确认负责执行此作业的服务账户具有足够的访问权去读取/写入目标文件夹路径以及其他所需资源。 - **验证依赖项状态**: 对于那些依赖其他组件(比如网络连接或其他应用程序接口APIs)正常工作的复杂作业来说,还需要确认所有外部因素都处于良好工作状态下才能顺利进行下去[^2].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值