代码之家  ›  专栏  ›  技术社区  ›  arvin_v_s

从Oracle表中找出最近选定的行,我可以在每次访问该表时更新上次访问的列吗

  •  0
  • arvin_v_s  · 技术社区  · 8 年前

    我有一个数据库表,其中有100多万条记录,由GUID列唯一标识。我想知道这些记录或行中的哪些是在过去5年中选择或检索的。选择查询可以在多个位置进行。有时该行将作为单行返回。有时它将是一组行的一部分。有一个select查询,它从java代码的jdbc连接中提取数据。此外,SQL过程还从表中提取数据。

    我的目的是清理数据库表。我想删除过去5年中从未使用过(通过select query检索)的所有行。

    oracle DB是否有任何内置元数据可以提供此信息。

    这个问题有什么优雅的解决方案吗?

    2 回复  |  直到 8 年前
        1
  •  1
  •   gvenzl    8 年前

    Oracle Database 12c引入了一个名为 Automatic Data Optimization 这给了你 Heat Maps currently to be licensed under the Advanced Compression Option or In-Memory Option .

    一旦你得出了这个结论,你可以使用 In-Database Archiving 将行标记为已存档,或者直接清除行。如果您碰巧对数据进行了分区,那么可以很容易地完成 DROP PARTITION 清除一个或多个分区的操作,而不必执行常规操作 DELETE 声明。

        2
  •  0
  •   arvin_v_s    8 年前

    我无法使用任何内置解决方案。我尝试了以下解决方案 1) select语句的DB审计功能。 2) 每当对表执行select查询时,添加触发器以更新日期列。

    两者都被丢弃了。审计会占用大量空间并影响性能。同样,触发器的性能也受到了影响。

    最后,我通过维护一个单独的表来解决这个问题,表中插入了仍然在查询中使用或选择的5年以上的条目。删除时,我会交叉检查此表,避免删除此表中的条目。