你能帮我制定数据库清除计划吗



这是我第一次尝试为数据库创建清除计划。我想做的是:我有一个数据库,它保存有关已执行进程的数据。为了确保数据库处于最佳状态并且不会变慢,我想实现一个清除计划。

我的计划是这样的:我希望数据库每6个月将保存一年以上的所有数据(我有审计字段)传递给另一个数据库,该数据库将作为旧数据的仓库。。至于这个仓库数据库,我希望每6个月消除所有超过5年的数据。

然而,我一直在研究网络,我发现了一些东西,比如清除VS删除、传输数据、迁移。。。我仍然不知道该怎么办。据我所知,迁移是指从不同类型的数据库(例如Oracle<->SQL Server)传输数据。顺便说一下,我想使用的这3个数据库都是Oracle(SQL Developer)。我应该为此定义存储过程吗?很抱歉有这些问题,但我真的是管理数据库的新手。非常感谢。

您可以编写一个Oracle存储过程,选择要删除的所有数据,将该数据插入另一个数据库或写入文件,然后从表中删除数据。我认为Oracle PL/SQL是最方便的,但我也看到了Java解决方案。我不知道你是否精通其中一种语言。我可以帮你解决一些具体的问题,但要为你提供一个完整的解决方案太费力了。

如果您的卷是低卷或中等卷,任何解决方案都可以工作。在测试环境中简单检查复制和删除6个月数据所需的时间。您将立即(或稍后)查看简单的插入/删除方法是否合适。

如果没有,你可以处理删除(更有问题的)部分两部分:

  • 对流程表进行分区(在审核日期进行范围分区)

最大的优点是不需要删除,只需要使用简单的截断分区。

缺点是,您需要对表进行一次性重组,并且必须验证查询是否运行良好(理论上,具有审计时间过滤器的查询应该从分区中获利)。

  • 表的重组,去掉旧的记录

一个简单的DIY方法是创建一个只包含新数据的表副本。

CREATE TABLE process_new as 
SELECT * FROM process
WHERE audit_date >= <your limit>;

如果您有一个离线维护窗口,只需将旧表替换为新表即可。Oracle通过在线重新定义提供了对这一概念的更微妙的变体-检查DBMS_redefinition

这种方法的最大优点是,您可以真正释放空间(DELETE不会收缩表,但会在表中留下漏洞),甚至可以重新排序记录以优化访问。

在数据仓库部分,我明确建议在审计时间定义一个分区的表间隔分区。

要复制数据,最简单的方法是通过DB链接插入它们。

将军,我建议你应该使用最简单的方法来满足你的要求。

最后但并非最不重要的一点是,检查您的审计日期是否为NULLABLE。如果是这样的话,如果有一些记录的审核日期为NULL,请记住它们永远不会被移动,因为NULL永远不会超过一年。。。

最新更新