1

所以我正在尝试修复数据加载,但是当我在我的 web 应用程序中执行特定操作时,我需要知道哪些表正在被更改。有没有办法检查数据库查询,即使它们来自我的应用程序,或者至少有一种方法可以找出正在修改哪些表,以便我可以手动跟踪更改?这适用于 Oracle 11g。

4

3 回答 3

0

我建议你试试这个:

EXEC dbms_output.enable(1000000);
DECLARE
  lc_seq_value VARCHAR(50);
  CURSOR table_list(p_field_like VARCHAR2) IS
    SELECT table_name  
      FROM all_tables
      WHERE table_name LIKE UPPER(p_field_like);
BEGIN
  FOR i IN table_list('TEST%') LOOP
    EXECUTE IMMEDIATE 'SELECT TO_CHAR(SCN_TO_TIMESTAMP(MAX(ORA_ROWSCN))) FROM '||
      i.table_name INTO lc_seq_value;
    dbms_output.put_line(lc_seq_value);
  END LOOP;
END;
/
于 2012-08-22T15:31:45.500 回答
0

在 Oracle 11g 中,您可以使用 ASH(活动会话历史记录)来查找在给定时间哪个 SQL 处于活动状态。您确实需要调整或诊断包的许可证才能合法使用它。有关小演示,请参阅Oracle 活动会话历史记录 (ASH)

于 2012-08-22T05:25:10.103 回答
0

最简单的方法 - 对你的数据库进行备份并在 Web 应用操作之后进行比较,否则只需添加一种审计触发器。当然,您可能会弄乱闪回查询。您也可以启用具有所需详细化级别的跟踪,以便查看您的 sql。

例如

SELECT * FROM employees
 AS OF TIMESTAMP
  TO_TIMESTAMP('2004-04-04 09:30:00', 'YYYY-MM-DD HH:MI:SS')
于 2012-08-21T19:58:35.800 回答