问题标签 [sql-agent-job]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
981 浏览

sql-server - sql server 2008 r2 中的 Sql 作业执行

我想知道我的数据库服务器是否一次执行多个 sql 作业(长时间运行/复杂),这会给你其他查询超时吗?

作业可能属于不同的数据库,在不同的驱动器上运行。

提前致谢

0 投票
2 回答
920 浏览

sql-server - 在 SQL Server 中执行长时间运行的作业

我正在使用 SQL Server 2008。使用代理,我创建了一个作业并安排它每分钟执行一次。该作业执行一个存储过程,将数据从表 XXX 移到临时表,然后最终移到 YYY 表中。

作业的执行可能需要一分钟以上 - 因为数据相当大。

  1. 即使第一个实例仍在运行,是否会启动作业的第二个实例?

  2. 如果是这样,我是否应该在临时表(状态 = 1)中标记记录以指示这些记录正在由作业的先前实例处理?

  3. 有没有办法让我检查作业的实例当前正在运行,这样我就不会启动作业的第二个实例?

  4. 有没有我不知道的另一种解决方案?(吞吐量很重要)

0 投票
1 回答
2771 浏览

sql-server - 来自 SSIS 包的 Windows 事件日志访问在 SQL 代理作业中运行

我创建了一个 SSIS 包,它将部署到客户端 SQL 安装(2005、2008 或 2008 R2)以执行数据提取,为我们的产品提供支持工具。部署过程需要创建一个 Windows AD 帐户(普通用户,没有提升的权限),因为它用作服务帐户,通过凭据和代理帐户在 SQL 代理作业中执行 SSIS 包。这一切都完美无缺,意味着我可以限制执行这项工作所需的权限。

但是,我想将 SSIS 包中的错误日志记录到 Windows 事件日志中。当我在 BIDS 中运行包(当然使用我自己的凭据)并强制包失败时,它记录得很好。当我在由 SQL 代理作业运行时强制包失败(通过将 duff 连接字符串放入配置文件中)时,不会记录任何内容。正在使用服务帐户,它是我的 SQL Server 主机上的经过身份验证的用户,但它不会写入事件日志。如果我将服务帐户添加到本地管理员组,它会很好地写入日志,但我认为 Windows 事件日志的想法是您不需要提升权限来写入它?

我们的支持团队热衷于使用 Windows 事件日志,但如果不向服务帐户授予高权限,我将无法这样做,而我宁愿不这样做。我错过了什么吗?SSIS 作业步骤页面中的“日志记录”选项卡似乎并没有做很多事情,但也许这就是我所缺少的?

如果这更适合 ServerFault,我深表歉意,但我无法确定这属于哪一边,因为这是开发过程中遇到的问题。如果是的话,我会重新安置它。

非常感谢

史蒂夫

0 投票
2 回答
6406 浏览

sql-server - SQL Server 2008 插入触发器未触发

我在一个简单地执行作业的表上有一个 INSERT 触发器。

例子:

当我在该表中插入一条记录时,该作业被解雇而没有任何问题。但是,有一些人的权限比我低(仅数据库上的 db_datareader/db_datawriter);他们能够向表中插入记录,但触发器不会触发。

我是 SQL Server 新手,我的印象是用户不需要提升权限来触发触发器(我认为这是最大的好处之一!)。这是触发器级别的权限问题,还是作业级别的权限问题?我能做些什么来绕过这个限制?

0 投票
3 回答
23704 浏览

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

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

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

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

有时,我会调用它,返回“作业未运行”结果,此时我将尝试通过以下方式启动作业

SQL 将返回“SQLAgent 已拒绝启动作业,因为它已经有一个待处理的请求”。

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

不过,这就是问题所在。

10次​​中有9次,这工作得很好。SQL 代理将引发错误,它被捕获,然后继续处理,因为作业已经在运行,没有伤害没有犯规。

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

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

发生这种情况时,正在执行的工作就会死掉,但据我所知,不会立即死掉,只是非常接近。我已经把日志记录在所有地方,并且没有一致性。一次失败,它会在a地,下一次在b地。在某些情况下,地点 A 和地点 B 只有一个

在他们之间。很奇怪。基本上,该作业似乎被毫不客气地转储了,并且该作业中剩下要执行的任何内容都不会+执行。

但是,如果我删除“exec StartJob”(或者只调用一次,当我知道目标作业还不能运行时),一切都会完美运行,并且我在作业中的所有处理都会运行。

这一切背后的目的是让一个工作作为触发器的结果开始(除其他外),如果工作已经开始,真的没有必要“重新开始”。

任何人都曾在 SQL 代理的作业处理中遇到过这样的行为吗?

编辑:当前的控制流程是这样的:

  1. 更改为表(更新或插入)...
  2. 触发触发调用...
  3. 一个存储过程,它调用...
  4. sp_Start_Job 其中...
  5. 开始一项特定的工作...
  6. 调用另一个存储过程(称为 CheckQueue)...
  7. 执行一些处理并...
  8. 检查几个表,根据它们的内容可能...
  9. 在另一个作业上调用 sp_start_job 以启动第二个同时作业来处理额外的工作(第二个作业也调用 CheckQueue 存储过程,但两个调用对完全独立的数据集进行操作)
0 投票
1 回答
1681 浏览

ssis - 来自 SSIS/SQL 代理的数据库用户密码

我有一个试图从 SQL 作业运行的 SSIS 包。但是,它失败了,并且日志声称连接字符串中指定的用户的密码错误。为了进行测试,我将保护级别设置为 EncryptSensitiveWithKey,并且它在 BIDS 中运行良好。当我将它导入 SSIS 时,我将其更改为 ServerStorage。(我对文档的理解表明这应该有效。不过我可能是错的。)在导入过程中,它要求我提供解密密钥,一切似乎都很好。

当我在 SQL Server 代理中设置作业时,它似乎也很好。但是,当我运行该作业时,它会失败并且日志显示该用户的密码不正确。不是说有权限问题,而是说密码错误。

我已经通过连接并仔细检查了用于访问数据库的用户名和密码。我可以用那个用户名和密码组合很好地连接。这是用于连接到数据库的用户。执行该作业似乎没有任何问题。

对此的任何帮助将不胜感激。

0 投票
1 回答
144 浏览

sql-server - 将任务作为 Windows 服务在 iis 范围外运行

我们有一个 Web 应用程序,其中调用了对长时间运行或高处理器进程的请求。

我们想创建一个 Windows 服务来从 IIS 服务器上卸载它。我们将在多台机器上安装此服务以减少这些作业的等待时间。我们正在研究的一个想法是将Job对象序列化到 Sql Server 中,并将其JobType作为另一列。

作业服务将通过使用其指示器更新行来声明该作业,这将阻止其他服务获取它。作业完成后,服务将删除该条目。

我正在寻找的是其他可能更好的想法来完成作业服务排队。

0 投票
2 回答
1341 浏览

sql - 在 SQL Server 2008 代理作业中使用谁的登录

我有一个 SSIS 包,可以将一些表传输到网络驱动器上的 CSV 文件;它在我的电脑上手动运行良好。我将它存储在 MSDB 数据库中的服务器上并从那里执行它并且运行良好,但是当我创建一个具有从 MSDB 运行 SSIS 包的步骤的作业时,它失败说它找不到 CSV 文件名。

我昨天花了一整天时间弄清楚这意味着在整个工作中使用的任何登录凭据都存在权限问题。作业所有者显示为域/myuserid,步骤属性显示他们正在使用我的用户名进行 Windows 身份验证。问题是,我知道我可以访问这个文件夹。

错误日志的第一行显示:“以用户身份执行:servername\SYSTEM”。所以我确保用户“SYSTEM”可以访问我想要加载文件的网络文件夹,但我仍然得到同样的错误。

命令行看起来像 @command=N'/SQL "\SSIS package name" /SERVER servername /CHECKPOINTING OFF /REPORTING E'

编辑:我发现SQL Server 代理工作帐户问题,有人询问工作在谁下运行,marc_s 说“我似乎无法找到任何明确的答案,真的。因为我的工作通常选择和更新数据库中的内容,我假设默认情况下将使用“所有者”帐户,除非您在给定步骤中指定其他帐户“

这也让我相信它正在使用我可以访问的登录信息

0 投票
3 回答
15653 浏览

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

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

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

0 投票
2 回答
590 浏览

c# - 如何使用 C# 从 SQL Server 2008 的作业生成脚本?

我知道我们可以使用 SSMS 来生成 SQL Server 作业的脚本。现在我想用 C# 来做这个,怎么做?