0

有没有办法可以跟踪 Oracle 中修改后的表?

是否有一个主表来跟踪所有其他表的行?例如,如果我向 table1 添加一行,它将更新行数,说明 table1 现在有 5 行。

我正在考虑跟踪dba_tablesall_tables或,user_tables但我不确定哪个实际计算每个表的行数。

4

3 回答 3

1

通过将它们与表监控收集的信息相结合,您可以对刚刚查询的 user/all/dba_statistics 进行改进。

视图 DBA/ALL/USER_TAB_MODIFICATIONS 填充了自上次收集统计信息以来表上的插入、更新、删除和截断数。视图是异步填充的,因此调用 DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO 将最新的内存数据刷新到表中。

请记住,统计数据本身可能是估计的,尽管在大多数表上准确度都非常好,即使估计百分比低得惊人(甚至低至 5% 或更低),但如果您需要准确的数字,则必须查询带有 count(*) 的表本身。您可以将一个流水线函数放在一起,通过单个查询对多个表执行此操作。

于 2013-09-06T17:30:11.150 回答
0
SELECT TABLE_NAME, NUM_ROWS
FROM USER_TABLES

我非常怀疑您实际上使用的是 Oracle 3.1。此查询至少在 11g 中有效(我目前没有其他实例要测试)。

请记住,这是一个数据字典表,在您在任何模式表中插入一行后,它不会自动更新。必须运行 Gather Statistics 过程来更新这些记录。

于 2013-09-06T00:26:06.027 回答
0
  1. 唯一的区别dba|user|all_tables是范围。user_tables将输出限制为您拥有的表,all_tables基本上是user_tables+ 来自您已被授予访问权限的其他模式的表,并且dba_tables是数据库中存在的所有内容。

  2. num_rows是跟踪表中行数的有效选项。不幸的是,它不是实时计算的,而是作为表统计收集操作的一部分。我知道没有实时跟踪行数的开箱即用选项。

于 2013-09-06T12:16:23.490 回答