如何跟踪已修改的表

问题描述

我想创建一个触发器,以显示哪些表已被修改以及谁(哪些用户)更改了该表上的数据。

我发现下面的查询列出了最近30天内被ALTER语句修改过的所有表,但没有成功:

api.php

它显示错误ORA-00942表或视图不可用。

这是具有类似问题的链接,但对于MySQL: enter link description here

@rjh @Ike Walker,能否请您帮助使用SQL Tools 1.8进行查询?

我应该在触发器上使用oracle Audit吗?我正在使用SQL Tools 1.8 b38。

我创建了一个新表:

enter image description here

这是我用来制作表格的查询:

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;

我也做了触发:

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');

但是,这仍然不会显示哪些表已被修改(更改)。请帮助我,我完全被困住了。

解决方法

否,您不想创建触发器。您尝试捕获的所有内容均已通过正确配置的AUDIT完成。在您的链接教程中,对init.ora的引用实际上应该是init.ora。因此,如果您的数据库名为“ fred”,则您的初始化文件应为$ 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

并且审核不是追溯的。在启用审核规则之前,审核跟踪将没有任何记录。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...