【发布时间】:2014-08-04 15:36:38
【问题描述】:
我们有一个包含大约 4K 表的 Oracle 数据库。以及大约 30 个不同的应用程序访问数据。我们有一个问题,其中一个应用程序正在删除我们的一个表中的一行。我们不知道哪个应用程序以及为什么。我试图弄清楚,但是,我首先想到的是在删除某些内容并记录它时使用触发器,但是,有没有办法找出哪个应用程序在 oracle 中删除了它?
谢谢
【问题讨论】:
-
来自触发器内?
v$session可能会告诉您,如果应用程序正确识别自己,但它可能只是说一些通用的东西,比如 JDBC;或者,如果应用程序位于单独的框中,您可以获得会话的 IP 地址。您是否考虑过内置的审计工具? -
启用补充日志记录后,确定哪个用户做了什么将是微不足道的。
-
@AlexPoole 我不是 Oracle 专家,我会研究内置的审计工具。我只是在寻找关于从哪里开始的指针。请让我知道答案中是否还有其他方式。谢谢。
-
不同的应用程序是否有不同的凭据,或者它们都以同一用户身份连接到数据库?
-
This might be useful too。
v$session(和相关视图)和sys_context可以显示类似的信息,但只会显示应用程序名称,如果它设置它,我怀疑这不太可能,你只会看到 JDBC。堆栈跟踪可能会为您提供线索。不过没有灵丹妙药。