跟踪Oracle中的行号

时间:2013-09-05 22:42:59

标签: sql oracle

有没有办法跟踪Oracle中修改过的表?

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

我正在考虑跟踪dba_tablesall_tablesuser_tables,但我不确定哪一个实际上计算了每个表的行数。

3 个答案:

答案 0 :(得分:1)

通过将用户/ all / dba_statistics与表监控收集的信息相结合,您可以对其进行改进。

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

请记住,统计数据本身可能会被估算出来,虽然大多数表格的准确度都相当不错,即使估算百分比水平低得惊人(甚至低至5%或更低),如果您需要准确的数字,您还可以使用count(*)查询表本身。您可以将一个流水线函数放在一起,通过一个查询为多个表执行此操作。

答案 1 :(得分:0)

SELECT TABLE_NAME, NUM_ROWS
FROM USER_TABLES

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

请记住,这是一个数据字典表,在任何模式表中插入行后,它不会自动更新。必须运行“收集统计信息”过程才能更新这些记录。

答案 2 :(得分:0)

  1. dba|user|all_tables之间的唯一区别是范围。 user_tables将输出限制为您拥有的表,all_tables基本上是user_tables +来自您被授予访问权限的其他模式的表,而dba_tables是存在于其中的所有模式数据库。

  2. num_rows是跟踪表格中行数的有效选项。遗憾的是,它不是实时计算的,而是作为表统计信息收集操作的一部分。没有开箱即用的选项可以实时跟踪行数。