数据迁移方案.md 2.3 KB

水利安监数据库 — 数据迁移方案

环境

Oracle(源) 瀚高 PostgreSQL(目标)
地址 同事本地测试库 192.168.0.149:5866/highgo
Schema SLAJ / SLAJ_UPDATE / SLAJ_PERSTEST / SLAJ_ROHS slaj(153张空表已建好)
工具 ora2pg psql / \COPY

规则

  1. 工具:用 ora2pg 从 Oracle 导出 → PG 导入
  2. 主源:所有表优先从 SLAJ schema 取
  3. 跳过
    • 51 张无 DDL 的表(如 T_SYS_USER、DESU_ROLE 等,表结构待补充)
    • ATT_MED_BASE(1680万行附件表,最后单独处理)
  4. 去重:多源同名表,列数相同的只迁 SLAJ 一份;列数不同的才需要合并

需要合并的表(仅 4 张)

这 4 张表在多个 schema 里列数不同,需从各源取出后按 GUID 去重合并:

表名 数据源(按列数排序) 合并优先级
OBJ_HAZ SLAJ(46列) > SLAJ_UPDATE(33列) > SLAJ_PERSTEST(31列) 以 SLAJ 为准,其他 GUID 不存在时补充
OBJ_HIDD SLAJ_ROHS(32列) > SLAJ(32列) > SLAJ_PERSTEST(30列) 列数相同,直接取 SLAJ
OBJ_ACCI SLAJ_ROHS(30列) > SLAJ(28列) > SLAJ_PERSTEST(25列) 以 SLAJ_ROHS 为准
BIS_HIDD_RECT_ACCE SLAJ_ROHS(16列) > SLAJ(15列) > SLAJ_PERSTEST(12列) 以 SLAJ_ROHS 为准

合并 SQL 模板:

-- 从多个源合并,按 GUID 去重
INSERT INTO slaj.obj_haz
SELECT DISTINCT ON (guid) * FROM (
  SELECT * FROM oracle_fdw.SLAJ.OBJ_HAZ
  UNION ALL
  SELECT * FROM oracle_fdw.SLAJ_UPDATE.OBJ_HAZ  -- 结构不同,补缺失列
) t;

执行顺序

批次 内容 表数
1 基础主数据:ATT_ORG_BASE、ATT_PERS_BASE、ATT_AD_BASE ~20
2 工程对象:ATTENG*、OBJ_ENG、OBJ_HAZ、OBJ_HIDD 等 ~40
3 业务表:BIS*、REL* ~80
4 系统配置:SYS*、COLL、IWHR_ ~10
5 合并那 4 张重复表 4
后续补充:51 张无 DDL 表
最后:ATT_MED_BASE 1

DDL 脚本

已在瀚高 slaj schema 建好 153 张表,全部空表,结构就绪。

如需重新建表:

psql -h 192.168.0.149 -p 5866 -U highgo -d highgo -f migration/output/schemas/slaj/all.sql

完整表清单和每张表的源 schema 见 migration/output/table-final.json