你能帮我解决我的数据库清除计划吗?

时间:2015-12-07 15:23:33

标签: database oracle

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

我的计划是这样的:我希望数据库每6个月将所有已经存在一年多的数据(我有审计字段)传递到另一个数据库,这个数据库可以用作仓库旧数据..对于这个仓库数据库,我希望每6个月删除超过5年的所有数据。

但是,我一直在研究网络,我一直在寻找清除VS删除,传输数据,迁移等内容......我仍然不知道该怎么做。 根据我的理解,迁移是关于从不同类型的数据库传输数据(例如,Oracle< - > SQL Server)。顺便说一下,我想要使用的所有这三个数据库都是Oracle(SQL Developer)。 我应该为此定义存储过程吗?对这些问题感到抱歉,但我真的是管理数据库的新手。谢谢。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

如果没有,你可以接近删除(问题更多)部分:

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

最大的好处是你不需要删除,你使用简单的截断分区。

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

  • 重组表格并保留较旧的记录

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

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

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

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

在数据仓库部分,我明确建议在审计时间定义分区表 - interval partition

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

一般情况我建议您使用最符合您要求的方式。

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