我不想根据页面请求经常访问数据库,所以我计划使用单独的C#编码[exe文件]创建一个xml文件并放入从不同页面/项目访问的公共路径,这将执行命中东西每天早上,所以你能解释我如何按计划的方式从sql job或agent执行exe文件?
我的场景:数据库表只会更新一次,所以我要找一个XML/txt文件.
谢谢,S.Venkatesh
我有一段代码需要在指定的时间每天运行.现在的代码就是我的Web应用程序的一部分.有两个存储过程来获取/保存代码使用的数据.
如何设置Microsoft SQL Server Management Studio 2008 R2以执行我的代码以及SQL代理作业中的存储过程.我以前从未这样做过,似乎无法找到文档.
我一直在尝试使用SQL Server 2005找到示例代码,我需要启动一个代理作业并等到它完成进程然后获得成功或失败.
我知道我可以用
EXEC MSDB.dbo.sp_start_job @Job_Name = 'JobName'
Run Code Online (Sandbox Code Playgroud)
开始工作,但我找不到任何示例代码来轮询msdb.dbo.sp_help_job以了解它何时完成,然后查明它是成功还是失败.
情景
某些SQL代理作业计划在一天中每隔几分钟运行一次.
在合法的时间里,它会错过下一个时间表,因为它仍然按照之前的时间表运行.
每隔一段时间,一份工作可能会"挂起".这不会导致失败(因为作业尚未停止).发生这种情况时,可以手动停止作业,并在下次运行时正常工作.它的设计目的是从它停止的地方回来.
什么是最有效的方式......?
我想要一种方法来确定名为"JobX"的SQL代理作业当前正在运行多长时间(以秒为单位).如果它当前没有运行,我们可以返回零.
这样,如果工作已经超过某个阈值的时间,我可以停止工作.
我认为xp_sqlagent_enum_jobs和sysjobhistory的组合可以使用,但我是否有更好的解决方案在那里好奇...并希望能够从其余的你已经运行到和周围工作的障碍受益.
我正在尝试按年和月分区表.我将分区的列是具有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 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 …
我有下面的代码(只有需要的部分)
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)
但它不起作用.我也在网上搜索任何想法/语法等..但现在没有运气.
有任何想法吗?
我在午夜运行的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
我正在使用SQL Server 2005中的SQL Server代理作业执行存储过程.
这项工作一直持续到昨天.从昨天起,这项工作耗时超过1小时而不是2分钟.
我在SSMS中执行了存储过程,执行时间不到1分钟.
我无法弄清楚为什么它作为SQL Server代理作业执行时需要超过1小时?
我有两个在 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
sql-agent-job ×10
sql-server ×8
sql ×3
t-sql ×3
c# ×2
sql-agent ×2
dynamic-sql ×1
partitioning ×1