我有一个 SQL Server 代理作业设置为每分钟运行一次。
通常它正好在时钟的 :00 运行,但偶尔会等待几秒钟。
如下所示,其中一项作业在早上 6 点 32 分被触发运行,但实际上在 9 秒后才开始运行。
我想可能发生这种情况的原因有很多,但我的问题是:有什么方法可以查明导致这种情况的原因(而不是仅仅猜测、进行更改并希望能够解决问题)?
我阅读了这个问题和答案,但这不是我的问题。我确实有其他 SQL Server 代理作业,但在 6:32 没有其他作业在运行,并且也没有其他作业涉及此特定作业中涉及的任何表。当我尝试在该问题的公认答案中运行查询时,它总是导致 0 行数据。
我有这个登录触发器,只允许某些用户登录到 Oracle 数据库(即使他们有正确的密码进入数据库):
CREATE OR REPLACE TRIGGER SYS.LOGON_TRIGGER
AFTER LOGON ON DATABASE
DECLARE
THIS_USER VARCHAR2(50);
BEGIN
SELECT OSUSER INTO THIS_USER FROM V$SESSION WHERE SID = SYS_CONTEXT('USERENV','SID');
IF THIS_USER NOT IN (<List of Users>)
THEN RAISE LOGIN_DENIED;
ENDIF;
END;
/
Run Code Online (Sandbox Code Playgroud)
它用于阻止用户输入大多数模式,但不是所有模式(例如,无论用户如何,仍然可以输入SYS
或SYSTEM
模式 - 此登录触发器似乎已被完全绕过)。
即使对于这些SYS
类型的模式,有没有办法锁定这些用户?
一些上下文:
由于在我参与此之前做出的决定,该数据库的所有登录名都具有相同的密码。此外,大多数用户使用与我们许多自动读/写此数据库的进程相同的登录名。
我们不想简单地更改密码,因为要查看更改这些密码对系统实际产生的影响将是一项非常大的工作。(我们将不得不修改进程用来访问数据库的代码,并且有很多这样的代码。)对我们来说,一个更简单的解决方案是,如果可能的话,仅根据用户名进行锁定。