news 2026/5/15 17:48:43

oracle 大表(1亿以上)迁移笔记一、二

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
oracle 大表(1亿以上)迁移笔记一、二

作者:蓝鸟 1974

CSDN:https://blog.csdn.net/weixin_42767242

关键字

大表迁移、存储过程批量归档、定时 JOB、索引维护、统计信息收集、NOLOGGING、BULK COLLECT、FORALL、分区表、分区归档、分区索引

一、场景概述(笔记一)

在医院 HIS/EMR 系统中,业务流水表、病历明细表数据增长极快,单表数据量轻松突破1 亿条。若不及时归档清理,会引发查询变慢、索引膨胀、数据库 IO 压力高、业务响应卡顿等问题。

本文记录 Oracle 超亿级大表在线归档迁移至历史表的落地实操方案:采用存储过程批量分批迁移 + 定时 JOB 调度,同时配套索引管理、统计信息收集、性能优化、日志管控全套落地规范,适合生产直接复用。

二、整体设计思路(笔记一)

  1. 数据留存策略:只保留近 90 天业务热数据,超期数据迁移至历史备份表,原表只留增量常用数据。
  1. 分批处理机制:采用BULK COLLECT + FORALL批量读取、批量插入、批量删除,避免单行循环性能瓶颈。
  1. 批次可控:设置单次最大处理条数、每批提交行数,防止一次性加载数据导致 undo、日志暴涨。
  1. 低峰调度:业务低峰凌晨 1-6 点定时 JOB 执行,避开白天业务高峰期锁竞争与资源争抢。
  1. 性能加速:迁移期间临时开启NOLOGGING减少重做日志生成,迁移完毕恢复LOGGING保障数据安全。
  1. 配套运维:迁移完成后维护索引、及时收集表统计信息,保证执行计划不走偏。

三、核心存储过程实现(笔记一)

3.1 过程设计要点

  1. 定义全局控制参数:单次最大处理量、每批批量提交大小;
  1. 通过关联业务主表筛选超期归档数据,住院 + 门诊数据合并筛选;
  1. 游标批量抓取主键 RID,避免全表扫描多次逻辑读;
  1. FORALL 批量插入历史表、批量删除原表数据,分批 COMMIT;
  1. 异常捕获自动回滚、关闭游标、抛出异常便于 JOB 监控告警;
  1. 迁移前后自动切换表日志模式,兼顾速度与数据安全。

3.2 完整存储过程代码

sql
CREATE OR REPLACE PROCEDURE PRO_EMR_BL_DLNR_TOLS AS
    V_DATE          DATE;
    -- 全局控制参数:单次任务最大处理条数
    V_ONCE_MAX     PLS_INTEGER := 1000000;
    -- 每批批量处理提交条数
    V_BATCH_SIZE   CONSTANT PLS_INTEGER := 1000;
BEGIN
    -- 设定保留近90天热数据
    V_DATE := TRUNC(SYSDATE) - 90;

    -- 迁移期间临时关闭日志,提升插入删除性能
    BEGIN EXECUTE IMMEDIATE 'ALTER TABLE emr_bl_dlnr NOLOGGING'; EXCEPTION WHEN OTHERS THEN NULL; END;
    BEGIN EXECUTE IMMEDIATE 'ALTER TABLE emr_bl_dlnr_ls NOLOGGING'; EXCEPTION WHEN OTHERS THEN NULL; END;

    DECLARE
        -- 游标筛选需归档的主键数据:住院+门诊超期数据
        CURSOR C_DATA IS
            SELECT rid AS RID
            FROM (
                -- 住院超期数据筛选
                SELECT r.jlxh AS RID
                  FROM emr_bl_dlnr r
                 WHERE r.zymz = 1
                   AND EXISTS (select 1
                          from zy_brry y
                         where y.zyh = r.jzhm
                           and y.cypb = 8
                           and y.cyrq < v_date )
                UNION ALL
                -- 门诊超期数据筛选
                SELECT r.jlxh AS RID
                  FROM emr_bl_dlnr r
                 WHERE r.zymz = 2
                   AND EXISTS (select 1
                          from ys_mz_jzls l
                         where l.jzxh = to_number(r.jzhm)
                           and l.kssj < v_date )
            )
            WHERE ROWNUM <= V_ONCE_MAX;

        TYPE T_RIDS IS TABLE OF C_DATA%ROWTYPE INDEX BY BINARY_INTEGER;
        V_RIDS   T_RIDS;
    BEGIN
        OPEN C_DATA;
  

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/15 17:47:28

OpenRegistry私有镜像仓库:轻量部署与生产实践指南

1. 项目概述&#xff1a;一个面向容器生态的私有镜像仓库如果你在团队里负责过容器化应用的部署和维护&#xff0c;大概率遇到过镜像管理的痛点。从Docker Hub拉取公共镜像&#xff0c;速度慢不说&#xff0c;安全性和稳定性也完全不可控&#xff1b;把所有镜像都放在开发者的本…

作者头像 李华
网站建设 2026/5/15 17:45:10

常用图像绘制在线实验闯关

第1关&#xff1a;散点图绘制import matplotlib matplotlib.use("Agg") import matplotlib.pyplot as plt import numpy as np import pandas as pd plt.rcParams[font.sans-serif][simhei] plt.rcParams[font.family]sans-serif plt.rcParams[axes.unicode_minus] …

作者头像 李华
网站建设 2026/5/15 17:43:23

3步解锁中文BurpSuite:打造无障碍安全测试工作流

3步解锁中文BurpSuite&#xff1a;打造无障碍安全测试工作流 【免费下载链接】BurpSuiteCN-Release BurpSuite汉化发布 项目地址: https://gitcode.com/gh_mirrors/bu/BurpSuiteCN-Release 你是否曾在使用BurpSuite进行Web安全测试时&#xff0c;因为英文界面而频繁切换…

作者头像 李华
网站建设 2026/5/15 17:41:08

STFT音高迁移:C++实现音频变调不变速的核心原理与工程实践

1. 项目概述&#xff1a;音频处理的“时间魔法师”如果你玩过音乐制作或者做过音频分析&#xff0c;肯定遇到过这样的场景&#xff1a;一段人声录音的音调有点低&#xff0c;你想把它调高一点&#xff0c;但又不想改变它说话的速度和节奏感。或者反过来&#xff0c;一段背景音乐…

作者头像 李华
网站建设 2026/5/15 17:40:12

AI专著撰写秘籍!一键生成20万字专著,高效写作工具大揭秘!

撰写学术专著不仅是对学术能力的一种考验&#xff0c;还是对心理承受力的极大挑战。与依赖团队合作的论文写作不同&#xff0c;专著的创作往往是“一个人战斗”的过程。从选题、构建框架到具体内容的写作与修改&#xff0c;几乎每一个步骤都需要研究者亲自完成。这样的孤独写作…

作者头像 李华