是SQL Server的新手,并尝试学习如何执行SQL Server作业。我在已经安装的SQL Server Express实例中从msdn执行了这个简单的例子。
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 当我执行此脚本时,系统时间为21小时23分钟。所以,这项工作应该在3分钟后完成。 我等到21:30,然后检查了作业执行历史,但看不到它: 我使用这个脚本来查看作业执行的历史记录:
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
我还尝试了从网上获得的另一个脚本:
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版本。请帮忙。
答案 0 :(得分:2)
@Pondlife和@criticalfix(在上面的评论中)是对的。 SQL Agent是SQL Server的调度程序。没有SQL代理,您的预定作业将无法运行。
要考虑的另一种方法是使用Windows的AT调度程序。这是一篇SO文章,讨论了一个很好的命令行调用来进行备份:What is a simple command line program or script to backup SQL server databases?
答案 1 :(得分:1)
“Express”是免费版。 “工作”是您购买非免费版本时获得的功能。
因此,如果您是开发人员并且想要编写工作代码,您可以做什么?
您可以以适中的价格购买“Developer Edition”,但不能将其部署到Developer Edition上。
但您可以使用Developer Edition创建作业。
以下是一个例子: