背景
为了应对系统投产两年多时间内,数据库中数据量不断增多。系统运行效率性能在海量不相关历史数据的影响下有下降风险。为提高系统运行效率,定时将有效期外(例如一年)的数据视为历史数据,迁移至历史表空间,同时清除当前库数据,或者采用数据归档入数仓后直接删除。
方案目的
- 历史数据完整迁移
- 正式库数据安全删除
- 迁移所涉及表可配置(增量、全量)
- 可手工操作、可定时任务(JOB),对于操作结果需要记录,方便审计及查询记录
方案概要
整个方案通过将源表(需要做数据清理的表)满足迁移条件的数据移动到历史表的方式来清理大表数据,所有历史表建立统一的历史表空间和用户。同时为了满足通用性,采用配置的方式来配置需要迁移的表及清理条件。同时将清理的结果记录到清理日志表。方便事后完整性验证。
迁移方式采用job+存储过程形式进行,由job定时拉起存储过程进行数据迁移,第一次迁移时采用手动的方式,此后每日增量数据采用定时任务进行自动清理。
迁移逻辑
- 建立历史用户和历史表空间,赋予历史用户对源表的SELECT、DELETE操作权限。这个工作可以在清理前完成,作为前置条件
select 'GRANT ALL ON 源表用户.'||table_name||' to 清理历史用户;' from all_tables where lower(owner)='源表用户';
- 在历史表空间中创建需要迁移的历史表(分区表