2017-02-28 25 views
0

我在Oracle 10g上有一个非常简单的表,用于保存进程中的日志消息。该表每天产生大约1 GB的数据。我想只保留一周的数据。我是否需要使用分区清理Oracle 10g表中的旧数据?

完成此操作的最佳方法是什么? 创建一个不断删除旧数据的过程? 我是否需要使用分区?

如果需要,我可以删除/截断/删除整个表。

这是表:

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) 
    ) 

回答

2

这不是强制性的,但分区是一种有效的策略。通常使用术语信息生命周期管理(ILM)。如果您创建按天分区的表范围,则可以简单地截断/删除最老的分区,以便只有7个(或8个)活动分区。这样做的优点是

  • 截断/删除分区会比删除
  • 您将有更好的空间管理得更快。
2
  1. 在你的日期栏(如果还没有的话)上创建一个索引。
  2. 有夜间作业中运行的SQL语句:

删除table_logs其中date> SYSDATE - 7;

commit;

这应该只需不到1分钟,如果你DB很好地调整。

+0

不应该是 Rodrick

+0

如果我使用这种方法,磁盘空间会发生什么?新数据是否会使用已删除记录的相同磁盘空间?我的意思是,我认为桌子将使用相同的空间。我是对的?所有的磁盘空间会被突然使用吗? – Rodrick

+0

删除语句“释放”的空间最终将被回收。也许:)这真的取决于。如果一个数据块已满,并且已经从freelist中取出,那么可能需要从该块中删除几行,然后才能将其放回到freelist上。 – BobC

相关问题