如何跟踪哪些表已/已被修改
Posted
技术标签:
【中文标题】如何跟踪哪些表已/已被修改【英文标题】:How to track which table(s) has/have been modified 【发布时间】:2020-12-22 08:40:42 【问题描述】:我想创建一个触发器,以显示哪些表已/已被修改,以及谁(哪些用户)更改了该表上的数据。
我发现下面的查询列出了过去 30 天内被 ALTER 语句修改但没有成功的所有表:
select schema_name(schema_id) as schema_name,
name as table_name,
create_date,
modify_date
from sys.tables
where modify_date > DATEADD(DAY, -30, CURRENT_TIMESTAMP)
order by modify_date desc;
它显示错误 ORA-00942 表或视图不可用。
这是类似问题的链接,但适用于 mysql: enter link description here
@rjh @Ike Walker 能否请您帮助如何使用 SQL Tools 1.8 进行查询?
我应该在触发器上使用 oracle 审计来执行此操作吗?我正在使用 SQL Tools 1.8 b38。
我创建了一个新表:
enter image description here
这是我用来制作表格的查询:
CREATE TABLE nag_Historic (
id NUMBER(10) NOT NULL,
tst_date DATE DEFAULT SYSDATE NOT NULL,
Ändere VARCHAR2(20) DEFAULT USER NOT NULL,
title VARCHAR2(100) NOT NULL
);
ALTER TABLE nag_Historic
ADD (
CONSTRAINT nag_pk PRIMARY KEY (id)
);
CREATE SEQUENCE nag_id START WITH 1 INCREMENT BY 1;
我也做了触发器:
CREATE OR REPLACE TRIGGER trg_nag_histry
BEFORE INSERT OR UPDATE OR DELETE ON nag_historic
FOR EACH ROW
BEGIN
SELECT nag_ID.nextval
INTO :new.id
FROM dual;
END;
这是我插入值的方式:
INSERT INTO nag_Historic (title)
VALUES ('johan');
我已经为审计找到了这个查询:
SELECT * FROM DBA_STMT_AUDIT_OPTS;
SELECT * FROM dba_priv_audit_opts;
但这仍然没有显示哪些表已被修改(更改)。请帮帮我,我完全被卡住了。
【问题讨论】:
检查这个oracle-base.com/articles/8i/auditing ..你需要启用它 我找不到我的 'init.ora' 如何在 SQL 中启用我的审计?有没有办法使用 SQL 工具中的查询来激活它?我还尝试运行几个查询:“AUDIT ALL BY SO BY ACCESS;通过访问审核更新表、删除表、插入表;通过访问审核执行过程;”它只说“审计,在 8 毫秒内执行”,但没有给出任何结果。 @Sujitmohanty30 再次回到我原来的问题。我想创建一个触发器,该触发器将显示哪些表已/已被修改以及谁(哪些用户)更改了该表上的数据。我需要为此使用 oracle SQL 审计的方法是否正确? @ellawidya 在管理大量使用的额外磁盘空间方面,使用 Oracle AUDIT 是一项相当艰巨的任务,对于我发现的大量数据,查询特定信息可能会占用大量资源。要使用它,需要 DBA 输入和设置。通过 TRIGGERS 滚动您自己的审计可以更容易实施和控制。 @TenG - 我强烈反对。 “通过 TRIGGERS 进行自己的审计”只是重新发明了 Oracle 已经做过的***。并保证效率较低。如果您实施适当的内务管理,就不会占用大量资源,就像您需要使用本地审计表一样。当然,这需要与 DBA 协调。但这就是 DBA 的工作。开发人员和 DBA 应该密切合作。 【参考方案1】:不,您不想创建触发器。您尝试在那里捕获的所有内容都已通过正确配置的 AUDIT 完成。在您的链接教程中,对 init.ora 的引用确实应该是对 init.ora 的引用。因此,如果您的数据库名为“fred”,那么您的 init 文件应该是 $ORACLE_HOME/dbs/initfred.ora。 (或者,如果 Windows %ORACLE_HOME%\database\initfred.ora)。但实际上您根本不应该使用 init.ora,而应该使用 spfile ($ORACLE_HOME/dbs/spfilefred.ora)。请注意,这是一个二进制文件,不得使用文本编辑器进行编辑。你用'alter system set ....'修改参数
您发出的审计命令没有返回您的预期结果,因为这不是它们的用途。只需将数据库指示开始审计指定的内容。他们不报告任何事情。来自 dba_*_audit_opts 的任何选择都只报告正在审计的内容 - 有哪些审计规则。
要真正获得审计活动的审计报告,您必须查询DBA_AUDIT_TRAIL。
而且审计不具有追溯力。在您启用审核规则之前,审核跟踪将没有任何记录。
【讨论】:
以上是关于如何跟踪哪些表已/已被修改的主要内容,如果未能解决你的问题,请参考以下文章