如何知道触发器何时为 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;
数据库上禁用了一个触发器。有什么方法可以让我从 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;