作者:蓝鸟 1974CSDN:https://blog.csdn.net/weixin_42767242关键字大表迁移、存储过程批量归档、定时 JOB、索引维护、统计信息收集、NOLOGGING、BULK COLLECT、FORALL一、场景概述在医院 HIS/EMR 系统中,业务流水表、病历明细表数据增长极快,单表数据量轻松突破1 亿条。若不及时归档清理,会引发查询变慢、索引膨胀、数据库 IO 压力高、业务响应卡顿等问题。本文记录 Oracle 超亿级大表在线归档迁移至历史表的落地实操方案:采用存储过程批量分批迁移 + 定时 JOB 调度,同时配套索引管理、统计信息收集、性能优化、日志管控全套落地规范,适合生产直接复用。二、整体设计思路数据留存策略:只保留近 90 天业务热数据,超期数据迁移至历史备份表,原表只留增量常用数据。分批处理机制:采用BULK COLLECT + FORALL批量读取、批量插入、批量删除,避免单行循环性能瓶颈。批次可控:设置单次最大处理条数、每批提交行数,防止一次性加载数据导致 undo、日志暴涨。低峰调度:业务低峰凌晨 1-6 点定时 JOB 执行,避开白天业务高峰期锁竞争与资源争抢。性能加速:迁移期间临时开启NOLOGGING减少重做日志生成,迁移完毕恢复LOGGING保障数据安全。配套运维:迁移完成后维护索引、及时收集表统计信息,保证执行计划不走偏。三、核心存储过程实现3.1 过程设计要点定义全局控制参数:单次最大处理量、每批批量提交大小;通过关联业务主表筛选超期归档数据,住院 + 门诊数据合并筛选;游标批量抓取主键 RID,避免全表扫描多次逻辑读;FORALL 批量插入历史表、批量删除原表数据,分批 COMMIT;异常捕获自动回滚、关闭游标、抛出异常便于 JOB 监控告警;迁移前后自动切换表日志模式,兼顾速度与数据安全。3.2 完整存储过程代码sqlCREATE OR REPLACE PROCEDURE PRO_EMR_BL_DLNR_TOLS ASV_DATE DATE;-- 全局控制参数:单次任务最大处理条数V_ONCE_MAX PLS_INTEGER := 1000000;-- 每批批量处理提交条数V_BATCH_SIZE CONSTANT PLS_INTEGER := 1000;BEGIN-- 设定保留近90天热数据
oracle 大表(1亿以上)迁移笔记一
发布时间:2026/5/15 19:12:15
作者:蓝鸟 1974CSDN:https://blog.csdn.net/weixin_42767242关键字大表迁移、存储过程批量归档、定时 JOB、索引维护、统计信息收集、NOLOGGING、BULK COLLECT、FORALL一、场景概述在医院 HIS/EMR 系统中,业务流水表、病历明细表数据增长极快,单表数据量轻松突破1 亿条。若不及时归档清理,会引发查询变慢、索引膨胀、数据库 IO 压力高、业务响应卡顿等问题。本文记录 Oracle 超亿级大表在线归档迁移至历史表的落地实操方案:采用存储过程批量分批迁移 + 定时 JOB 调度,同时配套索引管理、统计信息收集、性能优化、日志管控全套落地规范,适合生产直接复用。二、整体设计思路数据留存策略:只保留近 90 天业务热数据,超期数据迁移至历史备份表,原表只留增量常用数据。分批处理机制:采用BULK COLLECT + FORALL批量读取、批量插入、批量删除,避免单行循环性能瓶颈。批次可控:设置单次最大处理条数、每批提交行数,防止一次性加载数据导致 undo、日志暴涨。低峰调度:业务低峰凌晨 1-6 点定时 JOB 执行,避开白天业务高峰期锁竞争与资源争抢。性能加速:迁移期间临时开启NOLOGGING减少重做日志生成,迁移完毕恢复LOGGING保障数据安全。配套运维:迁移完成后维护索引、及时收集表统计信息,保证执行计划不走偏。三、核心存储过程实现3.1 过程设计要点定义全局控制参数:单次最大处理量、每批批量提交大小;通过关联业务主表筛选超期归档数据,住院 + 门诊数据合并筛选;游标批量抓取主键 RID,避免全表扫描多次逻辑读;FORALL 批量插入历史表、批量删除原表数据,分批 COMMIT;异常捕获自动回滚、关闭游标、抛出异常便于 JOB 监控告警;迁移前后自动切换表日志模式,兼顾速度与数据安全。3.2 完整存储过程代码sqlCREATE OR REPLACE PROCEDURE PRO_EMR_BL_DLNR_TOLS ASV_DATE DATE;-- 全局控制参数:单次任务最大处理条数V_ONCE_MAX PLS_INTEGER := 1000000;-- 每批批量处理提交条数V_BATCH_SIZE CONSTANT PLS_INTEGER := 1000;BEGIN-- 设定保留近90天热数据