繁体   English   中英

如何限制表中的记录数,以便删除旧记录,但保留新行?

[英]How do I limit number of records in table, so that old records are deleted, but new rows are kept?

我的oracle数据库中有一个表,该表根据Web应用程序中的用户会话跟踪下载。 在过去的几年中,此表已增长到数百万条记录,这使应用程序变慢。

我想将此表限制为仅保留上周的项目,并使其自动删除较旧的记录。 该表具有一个名为DOWNLOAD_DATE的日期字段,可用于此查询。

这是我可以使用触发器做的事情吗? 如果是这样,最好的方法是什么?

我认为触发器不是正确的选择,因为触发器在每个插入/更新/删除操作中都执行。 我建议为执行该语句的过程创建一个过程,例如“从table_name中删除,其中trunc(download_date)<trunc(sysdate-7);”。

然后,您可以根据需要安排该程序每小时或每天执行一次。

删除后,您可能需要使用“ DBMS_STATS.GATHER_TABLE_STATS('schema_name','table_name');”刷新表统计信息。

有关收集统计信息的更多信息,请参见: http : //www.dba-oracle.com/t_dbms_stats_gather_table_stats.htm

这是我可以使用触发器做的事情吗? 如果是这样,最好的方法是什么?

好吧,我想说,一个Statement level触发器非常适合这个问题。 在此处阅读有关语句级别触发器的信息

观看演示:

SQL> CREATE TABLE tab2 (
    col          VARCHAR(1),
    start_date   DATE,
    end_date     DATE
   );
  /
 Table created

SQL> Select * from tab2;
COL START_DATE  END_DATE
--- ----------- -----------
A   11-07-2019  18-07-2019
A   11-07-2019  31-07-2019
A   06-07-2019  31-07-2019
A   01-07-2019  31-07-2019  --- See this row is 10 days older than Sysdate

-- Created Statement level trigger 
SQL> CREATE OR REPLACE TRIGGER t1
  2  BEFORE  INSERT ON tab2
  3  BEGIN
  4      DELETE FROM tab2
  5      WHERE start_date <= SYSDATE - 7; -- Deleting records older that 7 days from sysdate
  6  END;
  7  /
Trigger created

SQL> Insert into tab2 values('A',sysdate+1,sysdate+10);
1 row inserted

SQL> commit;
Commit complete

-- You can see the records older that 7 days from sysdate is deleted
SQL> Select * from tab2;
COL START_DATE  END_DATE
--- ----------- -----------
A   11-07-2019  18-07-2019
A   11-07-2019  31-07-2019
A   06-07-2019  31-07-2019
A   12-07-2019  21-07-2019

如果我有这样的要求,我会这样:

步骤p1从table123开始删除循环---您可以在此处提供表名称,其中download_date <= SYSDATE-7 AND ROWNUM <= 10000; ---如果您想限制一次删除行

  EXIT WHEN SQL%ROWCOUNT = 0;

  COMMIT;

  DBMS_LOCK.sleep (10); ----- if you want to give sleep time as per your requirement

结束循环; 结束;

该作业将运行24 * 7,并删除所有7天以上的记录

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM