Oracle 通过删除旧行自动强制最大数据库表大小
我有一个Oracle表,其中包含应用程序的事件日志消息。我们不希望这个表失去控制并占用太多空间,所以我们希望将它可以包含的行数设置为一个上限,比如一百万 因此,我们想告诉Oracle,当表变得太大时,它应该删除最旧的行,以便为新行留出空间 有没有办法做到这一点?我想我们可以用触发器或用存储过程进行所有插入来实现这一点,但还有更简单的方法吗 编辑:有几个答案建议了涉及分区的解决方案。我们目前不划分这个表,尽管我们有能力在必要时这样做。然而,从这个问题来看,似乎即使我们对表进行分区,我们仍然需要某种计划作业来删除旧分区,等等。因此,我们决定放弃分区,转而使用计划作业来检查行数,并根据需要每天删除一次旧行Oracle 通过删除旧行自动强制最大数据库表大小,oracle,Oracle,我有一个Oracle表,其中包含应用程序的事件日志消息。我们不希望这个表失去控制并占用太多空间,所以我们希望将它可以包含的行数设置为一个上限,比如一百万 因此,我们想告诉Oracle,当表变得太大时,它应该删除最旧的行,以便为新行留出空间 有没有办法做到这一点?我想我们可以用触发器或用存储过程进行所有插入来实现这一点,但还有更简单的方法吗 编辑:有几个答案建议了涉及分区的解决方案。我们目前不划分这个表,尽管我们有能力在必要时这样做。然而,从这个问题来看,似乎即使我们对表进行分区,我们仍然需要某种
谢谢大家的帮助。取决于您对“更简单”的定义
我的偏好是安排一个定期(比如说,每晚)运行的作业,以便删除最早的行。如果您希望在一天内生成一百万个事件日志,那么您可能希望作业运行得更频繁,但对于大多数人来说,每晚就足够了。这样做的好处是异步的,这样您就不会在每次执行插入时计算一百万行的开销,以确定是否必须清除某些数据。另一方面,设置作业可能需要一些管理。您有分区选项吗
如果是这样,这是滚动分区窗口的一个很好的候选者。随着警报日志的老化,您可以删除最旧的分区。您不能告诉Oracle将我的表保持在特定的大小。如果这是新闻,分区可能不适合您。否则,我完全同意尼克的看法 记住,1米只是一个你决定保留的神奇数字,如果它在清理之前达到1.1米就可以了。如果您使用滚动分区,则需要放弃1M号码几天才能保留。您将根据您的标准创建、每日、每周或任何分区,并删除最旧的分区
在您的问题中添加一条注释,说明您是否有分区。如果您只有几千行,请确保简单的删除即可。但是,如果您希望增长或者已经有大量数据,那么分区是您最好的方法
- “删除”可能容易撤消空间错误
- 删除可能容易导致快照到旧错误
- 删除不会减少表格HWM(高水位线)
- 根据数据大小,删除可能需要一段时间李>
- 删除会生成大量重做(取决于实际删除的数据量)
- 删除分区只会产生很少的重做
- 分区可以改进Oracle执行分区消除的某些查询