我是否需要使用分区来清理 Oracle 10g table 上的旧数据?

Do I need to use partition for cleaning old data on a Oracle 10g table?

我在 Oracle 10g 上有一个非常简单的 table,它保留来自进程的日志消息。 table 每天生成大约 1 GB。我只想保留 1 周的数据。

完成此任务的最佳方法是什么? 创建一个不断删除旧数据的程序? 我需要使用分区吗?

如有必要,我可以delete/truncate/drop整个table。

这是table:

CREATE TABLE "TABLE_LOGS" 
   (    
    "TABLE_ID" VARCHAR2(200 BYTE), 
    "TABLE_NUMBER" NUMBER(19,0), 
    "DESCRIPTION" VARCHAR2(2000 BYTE), 
    "DATE" TIMESTAMP (6), 
    "TYPE" VARCHAR2(100 BYTE), 
    "LEVEL" NUMBER(*,0)
   )

这不是强制性的,但分区可能是一种有效的策略。经常使用术语信息生命周期管理 (ILM)。如果您创建按天分区的 table 范围,那么您可以简单地 truncate/drop 最旧的分区,这样您只有 7(或 8)个活动分区。这样做的好处是

  • Truncate/drop分区会比删除快
  • 你会有更好的space管理。
  1. 在您的日期列上创建一个索引(如果还没有的话)。
  2. 有一份夜间工作运行以下SQL:

删除 table_logs where date > sysdate - 7;

提交;

如果您的 DB 调整得当,这应该不会超过 1 分钟。