标签: sql-agent-job

如何从sql代理或作业执行exe文件?

我不想根据页面请求经常访问数据库,所以我计划使用单独的C#编码[exe文件]创建一个xml文件并放入从不同页面/项目访问的公共路径,这将执行命中东西每天早上,所以你能解释我如何按计划的方式从sql job或agent执行exe文件?

我的场景:数据库表只会更新一次,所以我要找一个XML/txt文件.

谢谢,S.Venkatesh

c# sql sql-agent-job

14
推荐指数
2
解决办法
3万
查看次数

在SQL代理作业中运行C#代码

我有一段代码需要在指定的时间每天运行.现在的代码就是我的Web应用程序的一部分.有两个存储过程来获取/保存代码使用的数据.

如何设置Microsoft SQL Server Management Studio 2008 R2以执行我的代码以及SQL代理作业中的存储过程.我以前从未这样做过,似乎无法找到文档.

c# sql-server sql-agent-job

13
推荐指数
2
解决办法
1万
查看次数

需要启动代理作业并等到完成并获得成功或失败

我一直在尝试使用SQL Server 2005找到示例代码,我需要启动一个代理作业并等到它完成进程然后获得成功或失败.

我知道我可以用

EXEC MSDB.dbo.sp_start_job @Job_Name = 'JobName' 
Run Code Online (Sandbox Code Playgroud)

开始工作,但我找不到任何示例代码来轮询msdb.dbo.sp_help_job以了解它何时完成,然后查明它是成功还是失败.

t-sql sql-server-2005 sql-agent-job

10
推荐指数
2
解决办法
9342
查看次数

SQL代理作业:确定它运行的时间

情景

某些SQL代理作业计划在一天中每隔几分钟运行一次.

在合法的时间里,它会错过下一个时间表,因为它仍然按照之前的时间表运行.

每隔一段时间,一份工作可能会"挂起".这不会导致失败(因为作业尚未停止).发生这种情况时,可以手动停止作业,并在下次运行时正常工作.它的设计目的是从它停止的地方回来.

什么是最有效的方式......?

我想要一种方法来确定名为"JobX"的SQL代理作业当前正在运行多长时间(以秒为单位).如果它当前没有运行,我们可以返回零.

这样,如果工作已经超过某个阈值的时间,我可以停止工作.

我认为xp_sqlagent_enum_jobs和sysjobhistory的组合可以使用,但我是否有更好的解决方案在那里好奇...并希望能够从其余的你已经运行到和周围工作的障碍受益.

sql sql-server sql-server-2008 sql-agent-job

10
推荐指数
1
解决办法
2万
查看次数

如何按月对表进行分区("两年"和"年")并自动创建每月分区?

我正在尝试按分区表.我将分区的列是具有ISO格式('20150110',20150202'等)的日期时间类型列.

例如,我有2010年,2011年,2012年的销售数据.我希望按年划分数据,每年也按月划分数据.(2010/01,2010/02,... 2010/12,2011/01,... 2015/01 ......)

EX:

Sales2010Jan,Sales2010Feb,Sales2011Jan,Sales2011Feb,Sales2012Dec等

我的问题是:它甚至可能吗?如果是,我如何使用SSIS自动化流程?

sql sql-server partitioning dynamic-sql sql-agent-job

10
推荐指数
1
解决办法
2万
查看次数

如何准确检测SQL Server作业是否正在运行并处理已在运行的作业?

我目前正在使用这样的代码来检测SQL服务器作业是否正在运行.(这是SQL Server 2005,所有SP的)

return (select isnull(  
(select top 1 CASE 
    WHEN current_execution_status = 4 THEN 0
    ELSE 1
    END
from openquery(devtestvm, 'EXEC msdb.dbo.sp_help_job')
where current_execution_status = 4 and
    name = 'WQCheckQueueJob' + cast(@Index as varchar(10))
), 1)
)
Run Code Online (Sandbox Code Playgroud)

那里没有问题,一般来说,它运作得很好.

但....(总是一个但是)

有时,我会调用它,取回"工作未运行"的结果,此时我会尝试通过以下方式启动工作

exec msdb.dbo.sp_start_job @JobName
Run Code Online (Sandbox Code Playgroud)

并且SQL将返回"SQLAgent拒绝启动该作业,因为它已经有待处理的请求".

好.也不是问题.可以想象,在此代码启动之前,可以启动目标作业的一个小窗口,但在检查它是否已启动之后.但是,我可以将它包装在try catch中,然后忽略错误,对吧?

begin try
if dbo.WQIsQueueJobActive(@index) = 0 begin
    exec msdb.dbo.sp_start_job @JobName
    break
end         
end try begin catch
    -- nothing here
end catch
Run Code Online (Sandbox Code Playgroud)

不过这是问题所在.

10次​​中有9次,这很好用.SQL代理将引发错误,它被捕获,并且处理继续,因为作业已经运行,没有任何伤害没有犯规.

但偶尔,我会在"作业历史记录"视图中收到一条消息(请记住上面的代码,以检测特定作业是否正在运行,如果没有实际从另一个作业运行则启动它)说该作业失败,因为"SQLAgent已经拒绝开始工作,因为它已经有待处理的请求".

当然,这是TRY CATCH应该处理的确切错误!

当发生这种情况时,正在执行的工作就会消失,但不能立即从我所知道的情况开始,只是非常接近.我把日志记录到了所有地方并且没有一致性.有一次它失败了,它将在a处,a下一次在b处.在某些情况下,地方A和地方B只有一个

select @var = 'message'
Run Code Online (Sandbox Code Playgroud)

在他们之间.很奇怪.基本上,这项工作似乎是毫不客气地被抛弃的,而且在工作中要执行的任何事情都不会被执行.

但是,如果我删除"exec …

t-sql sql-server sql-server-agent sql-agent-job

9
推荐指数
1
解决办法
2万
查看次数

如何将参数传递给将执行存储过程的SQL作业

我有下面的代码(只有需要的部分)

EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'SomeStep', 
        @step_id=1, 
        @cmdexec_success_code=0, 
        @on_success_action=1, 
        @on_success_step_id=0, 
        @on_fail_action=2, 
        @on_fail_step_id=0, 
        @retry_attempts=0, 
        @retry_interval=0, 
        @os_run_priority=0, @subsystem=N'TSQL', 
        @command=N'exec [dbo].[PORT_Insert_Record] ''https://localhost''',  
        @database_name=N'MyDatabase', 
        @flags=0
Run Code Online (Sandbox Code Playgroud)

现在,我想将https://localhost值传递给变量并传递给存储过程(由于某种原因,我无法将其传递给SP).

所以我试过了

DECLARE @domainName varchar(max)
DECLARE @sp varchar(max)
SET @domainName ='https://localhost:'
SET @sp ='exec [dbo].[PORT_Insert_Record]' + @domainName

EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'InsertRecordIntoResellerOpportunities', 
        @step_id=1, 
        @cmdexec_success_code=0, 
        @on_success_action=1, 
        @on_success_step_id=0, 
        @on_fail_action=2, 
        @on_fail_step_id=0, 
        @retry_attempts=0, 
        @retry_interval=0, 
        @os_run_priority=0, @subsystem=N'TSQL', 
        @command=@sp,  
        @database_name=N'MyDatabase',  
        @flags=0
Run Code Online (Sandbox Code Playgroud)

但它不起作用.我也在网上搜索任何想法/语法等..但现在没有运气.

有任何想法吗?

t-sql sql-server sql-server-2008 sql-agent-job

9
推荐指数
1
解决办法
3万
查看次数

SQL维护计划在未配置邮件时发送邮件

我在午夜运行的SQL Server 2008 R2下有一个维护计划.在此维护任务中,没有通知操作员任务.在执行维护计划的SQL代理作业中,没有电子邮件警报.但是,每次运行此作业时,我都会收到来自SQL Server的主题为"SQL Server消息"的电子邮件.我无法理解为什么这封邮件不断发送.这是邮件正文开头的内容:

Microsoft(R)服务器维护实用程序(Unicode)版本10.50.1617报告是在"SERVERNAME"上生成的.维护计划:我的维护计划持续时间:00:01:02状态:成功.细节:

任何想法为什么这个邮件发送,我应该更新配置,以便它只发送失败或根本不发送?

sql-server database-mail sql-server-2008 maintenance-plan sql-agent-job

9
推荐指数
1
解决办法
4144
查看次数

SQL Server代理作业运行缓慢

我正在使用SQL Server 2005中的SQL Server代理作业执行存储过程.

这项工作一直持续到昨天.从昨天起,这项工作耗时超过1小时而不是2分钟.

我在SSMS中执行了存储过程,执行时间不到1分钟.

我无法弄清楚为什么它作为SQL Server代理作业执行时需要超过1小时?

sql-server sql-server-2005 sql-agent sql-agent-job

7
推荐指数
1
解决办法
8500
查看次数

如何在 Linux 上跨可用性组副本同步 SQL Server 代理作业?

我有两个在 Linux 上运行的 SQL Server 2019 实例。这两个实例都包含一个使用 AlwaysOn 可用性组同步的数据库。数据库中的数据是同步的,但问题是SQL代理作业不是数据库本身的一部分。

因此,当我在主副本上创建 SQL Server 代理作业时,此配置不会复制到辅助副本。因此,在创建每个工作之后,我总是必须去中学并在那里创建工作。我必须时刻记录我所做的所有改变。

使用可用性组时,是否有内置方法可以在 Linux 上自动执行 SQL Server 作业的跨副本同步?AG 副本之间的作业同步似乎应该已经由 SQL Server/SQL Server Agent 工具原生支持,但我没有从 Microsoft 找到任何内容,只有一个名为DBA Tools的第三方工具,我可以用它来编写自己的自动化脚本在 PowerShell 中。

sql-server high-availability sql-agent sql-agent-job availability-group

6
推荐指数
1
解决办法
4252
查看次数