如何知道触发器何时为 disabled/enabled?

How to know when a trigger was disabled/enabled?

数据库上禁用了一个触发器。有什么方法可以让我从 oracle(可能是 metadata/data 字典 table )知道它何时被禁用?

使用这个查询:

SELECT OWNER, TRIGGER_NAME, STATUS
FROM ALL_TRIGGERS
WHERE STATUS = 'DISABLED';

您也可以使用

SELECT t.OWNER, TRIGGER_NAME, t.STATUS, LAST_DDL_TIME
FROM ALL_OBJECTS obj
    JOIN ALL_TRIGGERS t ON t.owner = obj.owner AND TRIGGER_NAME = OBJECT_NAME;

LAST_DDL_TIME 显示最后一个 DDL,这可能是在触发器被禁用时。但是,它可以是已修改的任何其他内容。

如果您为 ALTER TRIGGER 或 ALTER TABLE 启用了审计(默认情况下未启用),则可以通过 Oracle AUDIT 执行此操作。

否则你可能可以从USER_OBJECTS.LAST_DDL_TIME推断出触发器,但显然这个时间是由其他DDL设置的,除了启用或禁用之外。

使用下面的查询:

SELECT object_name, last_ddl_time FROM dba_objects WHERE object_name IN ( SELECT object_name FROM dba_triggers WHERE status = 'DISABLED' ) ORDER BY 1;