0

今天,我的系统中有人更新了意外的声明。所以这使我的系统运行不正确。现在,我想看看是谁(或哪个会话)做了它。我可以在 AWR 报告中找到它吗?如果我能在 AWR 报告中找到它,它特别在哪里?非常感谢 !

4

1 回答 1

1

更改可能来自许多来源,具体取决于更改方式。只有最后一个选项 Log Miner 会为您提供您想要的一切。但这也需要最大的努力。一些消息来源不会告诉您会话,但也许仅仅查看相关的 SQL 就足以弄清楚是谁做的。

  1. V$SQL - 所有的 SQL 语句都在里面,但是它们在共享池中过期了,所以你需要快速搜索。如果他们使用了一个独特的查询,您可以使用类似select * from v$sql where lower(sql_text) like '%table_name%';.
  2. AWR - 您可能可以在 中找到 SQL select * from dba_hist_sqltext where lower(sql_text) like '%table_name%';,然后如果幸运的话,您可以从 中找到一些会话信息select * from dba_hist_active_sess_history where sql_id = '<sql id>';。Active Session History 仅对活动进行采样,如果查询运行得非常快,则很有可能不会出现在其中。
  3. 闪回查询- 如果你幸运的话,UNDO 仍然存在,你可以确切地看到它是如何从闪回查询中改变的。这可能会给你准确的时间,以及发生了什么变化。 select VERSIONS_STARTSCN, VERSIONS_STARTTIME, VERSIONS_ENDSCN, VERSIONS_ENDTIME, VERSIONS_XID, VERSIONS_OPERATION, your_table.* from your_table versions between scn minvalue and maxvalue;
  4. Log Miner - 我没用过这个,但据说它是完成这项工作的完美工具。在文档中阅读有关它的更多信息。
于 2014-03-07T06:41:00.503 回答