小编BBl*_*ake的帖子

SQL 代理如何以及何时更新 next_run_date/next_run_time 值?

我一直在研究 T-SQL 中的代码,以使用 msdb 数据库中的 sp_add_jobschedule proc 向 SQL 代理作业添加新计划。当我添加新计划(通常在特定日期/时间运行一次)并立即查看 sysjobschedules 和 sysschedules 中的值时,我可以看到新计划已添加并与我的 SQL 代理的 job_id 相关联工作。但是,next_run_date 和 next_run_time 的值在其中为 0。当我在 2 或 3 分钟后再次查看它们时,它们仍然显示为 0。但是,当我再过 5 或 10 分钟后再回来时,它现在可以正确显示与下一次计划运行相对应的日期和时间值。

所以我的问题是:

  • 这些值多久更新一次?
  • 更新这些值的过程是什么?
  • 如果我要添加一个计划,比如说,未来 1 分钟,这是否意味着该作业将不会运行,因为 next_run_date/time 尚未更新?

我用来添加新计划的代码示例:

exec msdb.dbo.sp_add_jobschedule @job_id = @jobID
                    , @name = @JobName
                    , @enabled = 1
                    , @freq_type = 1
                    , @freq_interval = 0
                    , @freq_subday_type = 0
                    , @freq_subday_interval = 0
                    , @freq_relative_interval = 0
                    , @freq_recurrence_factor = 0
                    , @active_start_date = …
Run Code Online (Sandbox Code Playgroud)

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

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

在 Oracle 中存储时间值 (HH:MM) 的最有效和实用的方法,使其易于搜索

我有一组需要存储在 Oracle 数据库中的开始和结束时间。我需要以一种易于搜索的方式存储它们(即,典型的搜索是查找时间值(例如上午 9:30)落在开始时间和结束时间之间的所有行。在 SQL Server 中,我只会使用 TIME 数据类型字段,但 Oracle 似乎没有等效项。

我看过许多博客和论坛,他们建议只使用 DATE 字段并使用 TO_CHAR 进行转换,然后进行比较,或者将时间值存储为 varchar(4 / HHMM) 或 varchar(6 / HHMMSS) 字段。这两者似乎都不必要地低效。

在 Oracle 中是否有更好或更有效的方法来完成此任务?

oracle

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

EXECUTE AS 似乎没有改变安全上下文

我们有仍然使用 xp_cmdshell 调用的遗留代码。当我们迁移到 SQL Server 2008 时,我们创建了一个使用以下模式代码的存储过程:

EXECUTE AS 'DOMAIN\ID2'
EXEC master..xp_cmdshell @command
REVERT
Run Code Online (Sandbox Code Playgroud)

当我将 WHOAMI 作为命令传递时,它显示的不是“DOMAIN\ID2”,而是运行 SQL Server 的服务帐户的 ID(即“DOMAIN\ID1”)。它不应该返回 'DOMAIN\ID2',因为它应该在不同的安全上下文下运行吗?如果是这样,知道为什么它不会改变上下文吗?这个过程是由另一个现在早已不复存在的开发人员创建的,我对安全性和模拟并不像我应该的那样熟悉。

sql-server-2008

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