2013-05-06 105 views
0

SQL Server新手,并试图学习如何执行SQL Server作业。我从安装的SQL Server Express实例中的msdn中执行了这个简单的示例。SQL Server作业不运行

USE msdb ; 
GO 
EXEC dbo.sp_add_job 
    @job_name = N'Weekly Backup' ; 
GO 
EXEC sp_add_jobstep 
    @job_name = N'Weekly Backup', 
    @step_name = N'Set database to read only', 
    @subsystem = N'TSQL', 
    @command = N'ALTER DATABASE SALES SET READ_ONLY', 
    @retry_attempts = 5, 
    @retry_interval = 5 ; 
GO 
EXEC dbo.sp_add_schedule 
    @schedule_name = N'ROce', 
    @freq_type = 1, 
    @active_start_time = 212600 ; 
USE msdb ; 
GO 
EXEC sp_attach_schedule 
    @job_name = N'Weekly Backup', 
    @schedule_name = N'ROce'; 
GO 
EXEC dbo.sp_add_jobserver 
    @job_name = N'Weekly Backup'; 
GO 
-- Start the job 
USE msdb; 
GO 
EXEC dbo.sp_start_job N'Weekly Backup'; 
GO 

我已经设置了 @active_start_time = 212600 当我执行这个脚本,系统时间为21hrs23minutes。所以,工作应该在3分钟内完成。 我等到21.30hrs然后检查作业执行的历史,但没有看到它: 我用这个脚本,看jobs'执行的历史:

SELECT sj.name, 
sja.run_requested_date, 
CONVERT(VARCHAR(12), sja.stop_execution_date- sja.start_execution_date, 114) Duration 
FROM msdb.dbo.sysjobactivity sja 
INNER JOIN msdb.dbo.sysjobs sj 
ON sja.job_id = sj.job_id 
WHERE sja.run_requested_date IS NOT NULL 
ORDER BY sja.run_requested_date desc 

我也尝试另一个脚本我从拿到web:

select 
j.name as 'JobName', 
msdb.dbo.agent_datetime(run_date, run_time) as 'RunDateTime', 
((run_duration/10000*3600 + (run_duration/100)%100*60 + run_duration%100 + 31)/60) 
    as 'RunDurationMinutes' 
From msdb.dbo.sysjobs j 
INNER JOIN msdb.dbo.sysjobhistory h 
ON j.job_id = h.job_id 
where j.enabled = 1 --Only Enabled Jobs 
--and j.name = 'TestJob' --Uncomment to search for a single job 
order by JobName, RunDateTime desc 

但是没有列出任何作业。是否这项工作甚至没有执行?我尝试重命名作业并重新启动它,但没有...不起作用。我没有SQL Server代理,因为它不包含Express版本。请帮忙。

+1

正如你所说,你没有SQL Server代理,为什么你期望的工作运行? – Pondlife 2013-05-06 16:42:27

+1

是的,SQL Server代理作业非常有用,并且具有不错的错误行为和日志记录,但您确实需要SQL Server代理。 – criticalfix 2013-05-06 18:18:42

回答

2

@Pondlife和@criticalfix(在上面的评论中)是正确的。 SQL代理是SQL Server的调度程序。如果没有SQL代理,您的计划作业将不会运行。

要考虑的一种替代方法是使用Windows的AT调度程序。这里是一篇SO文章,讲述一个很好的命令行调用来做你的备份:What is a simple command line program or script to backup SQL server databases?

+0

+1谢谢。我不知道,我必须承认自己的无知/愚蠢,即使没有SQL Server Agent,工作也不会运行。 – Jean 2013-05-07 07:07:11

1

“Express”是免费版本。 “工作”是您购买非免费版本时获得的功能。

所以,如果你是一个开发人员,想编码工作,你能做什么?

您可以以适中的价格获得“Developer Edition”,但不能将其部署到Developer Edition。

但是您可以使用Developer Edition创建作业。

下面是一个例子:

LINK

+0

+1我不知道哪个标记为正确答案,因为两者都是正确的。谢谢。我不知道,我必须承认自己的无知/愚蠢,即使没有SQL Server Agent,工作也不会运行。 – Jean 2013-05-07 07:07:48

+0

无知是好的,这就是论坛的目的。愚蠢不是问这个问题......所以没有涉及愚蠢,恕我直言。 – granadaCoder 2013-05-07 15:02:00

相关问题