【问题标题】:Do I need to use partition for cleaning old data on a Oracle 10g table?我需要使用分区来清理 Oracle 10g 表上的旧数据吗?
【发布时间】:2017-02-28 21:18:33
【问题描述】:

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

实现这一目标的最佳方法是什么? 创建一个不断删除旧数据的程序? 我需要使用分区吗?

如有必要,我可以删除/截断/删除整个表。

这是桌子:

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

【问题讨论】:

    标签: oracle oracle10g partition


    【解决方案1】:

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

    • 截断/删除分区将比删除更快
    • 您将拥有更好的空间管理。

    【讨论】:

      【解决方案2】:
      1. 在您的日期列上创建一个索引(如果还没有的话)。
      2. 让夜间作业运行以下 SQL:

      delete table_logs where date > sysdate - 7;

      提交;

      如果您的数据库经过良好调整,这应该不到 1 分钟。

      【讨论】:

      • 不应该是
      • 如果我使用这种方法,磁盘空间会怎样?新数据是否会使用已删除记录的相同磁盘空间?我的意思是,我认为该表将使用相同的空间。我是对的吗?会不会突然用完所有磁盘空间?
      • 删除语句“释放”的空间最终将被回收。也许:) 这真的取决于。如果一个数据块已满,以至于它已从空闲列表中删除,则可能需要从该块中删除几行,然后才能将其放回空闲列表中。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-10
      • 2016-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多