完整的SQL语句历史记录

时间:2018-01-22 14:44:02

标签: sql oracle oracle11g

我在数据库中的特定表上遇到问题。行没有任何原因被删除(我有一些程序和触发器修改表中的信息,但它们已经过测试)。 所以我需要看看对表执行了哪些DML语句。 我已经尝试了一些方法,比如使用这个查询:

select SQL_FULLTEXT, FIRST_LOAD_TIME, ROWS_PROCESSED, PARSING_SCHEMA_NAME from v$sql;

按我的表名过滤,或尝试SQL日志。

这两种方法都没有向我显示执行SQL的完整历史记录(例如,我无法查看程序执行的语句)。

任何人都可以给我一些建议,告诉我在哪里可以看到数据库中执行的所有DML?

1 个答案:

答案 0 :(得分:0)

您使用的是Oracle数据库上下文中未定义的一些术语,包括“句子”和“注册”。

然而

如果您希望看到世界卫生组织在一个不好的地方触摸您的数据,导致其被删除或更改,那么您有两个选择。

立即检查您的REDO日志。我们有一个包dbms_logmnr,它允许您查看已记录的活动。假设您的表未使用NOLOGGING子句创建,则应记录那些UPDATE和DELETE。

蒂姆有一篇关于这个特征here的好文章。

更好的解决方案是AUDITING。您需要在数据库中启用审核以记录WHO正在对您的表/数据执行什么操作。它包含在数据库企业版的一部分中。性能受到打击,您决定录制的越多,所需的资源就越多。但它可能值得支付这个价格。当然,您必须管理维护这些日志所需的空间。

现在,关于'SQL Developer'和它的HISTORY功能。它只记录您在SQL工作表中执行的内容。它不会看到别人在做什么。它在这里无法帮助您 - 除非这是一个单人数据库,并且您只是使用SQL Developer进行更改。即使这样,它也不可靠,因为它有一个限制,只记录通过工作表完成的更改。