ITPub博客

首页 > 数据库 > Oracle > 从 Oracle 迁移到 Greenplum:少走弯路的 10 个关键步骤

从 Oracle 迁移到 Greenplum:少走弯路的 10 个关键步骤

Oracle 作者:LogNode 时间:2026-10-16 17:25:14 0 删除 编辑

01 / 一句话讲清楚

从 Oracle 迁移到 Greenplum,不是简单的“建表、导数据”,而是一次 架构升级 。

  • Oracle :行存、OLTP 优化、强一致性

  • Greenplum :列存、MPP 并行、OLAP 优化

📌 迁移的核心策略: 数据模型重构 + SQL 语法转换 + 性能重新设计 。直接“搬过去”大概率跑得慢。

02 / Oracle vs Greenplum 架构差异

对比项
Oracle
Greenplum
迁移影响
架构
单机/共享存储
MPP 无共享
需要设计分布键
存储
行存
行存 + 列存
建议改为列存
索引
B-tree 为主
B-tree、Bitmap
需重新评估
并行能力
受限
全并行
查询重写
分区
支持
支持,更强
可利用分区剪裁
统计信息
自动收集
建议手动 ANALYZE
增加维护任务
序列
全局唯一
Segment 本地
需要特殊处理

03 / 迁移六步法

图片

3.1 第一步:迁移评估

评估项
内容
工具
表结构
表数量、大小、分区
Oracle 数据字典
存储估算
压缩后空间
Greenplum 压缩比预估
SQL 清单
常用查询、存储过程
业务日志、AWR 报告
依赖关系
物化视图、同义词、序列
Oracle 依赖查询

-- Oracle 端:统计表和大小

SELECT owner, table_name, num_rows, avg_row_len, 

       (avg_row_len * num_rows / 1024/1024/1024) as size_gb

FROM dba_tables 

WHERE owner = 'ORDERS'

ORDER BY size_gb DESC;

3.2 第二步:DDL 转换

Oracle → Greenplum 数据类型映射表:

Oracle 类型
Greenplum 类型
说明
NUMBER(p,s) numeric(p,s)
直接映射
VARCHAR2(n) varchar(n)
直接映射
DATE timestamp
Oracle DATE 含时间
TIMESTAMP timestamp
直接映射
CLOB text
直接映射
BLOB bytea
需要处理
ROWID
❌ 无
业务不应依赖

-- Oracle 原表

CREATE TABLE orders_oracle (

    order_id   NUMBER(12) PRIMARY KEY,

    user_id    NUMBER(10),

    amount     NUMBER(10,2),

    status     VARCHAR2(20),

    order_date DATE

);


-- Greenplum 目标表(优化后)

CREATE TABLE orders_gp (

    order_id   bigint,

    user_id    int,

    amount     numeric(10,2),

    status     varchar(20),

    order_date timestamp

) WITH (appendonly=true, orientation=column, compresstype=zstd)

DISTRIBUTED BY (user_id)          -- 按 user_id 分布

PARTITION BY RANGE (order_date);  -- 按日期分区

.3 第三步:SQL 语法转换

常用转换对照表:

Oracle 语法
Greenplum 语法
ROWNUM <= N LIMIT N
SYSDATE now()
 或  current_timestamp
TO_DATE('2025-01-01','YYYY-MM-DD') '2025-01-01'::date
NVL(col, default) coalesce(col, default)
DECODE(col, v1, r1, v2, r2, default) CASE WHEN ...
CONNECT BY
 层次查询
递归 CTE
MERGE INTO INSERT ... ON CONFLICT
SELECT * FROM DUAL
不需要 DUAL

3.4 第四步:数据迁移

迁移方案对比:

方式
速度
停机时间
适用数据量
gpfdist + 外部表
最快
最小
大表(>100GB)
COPY TO/FROM
中等
中等
中表(10-100GB)
Oracle 网关 + INSERT
慢
长
小表(<10GB)
第三方 ETL 工具
中
可控制
全量

# 推荐方案:Oracle → 导出 CSV → gpfdist 加载


# 1. Oracle 导出 CSV(使用 spool 或 Oracle SQL Developer)

sqlplus orders/xxx @export_orders.sql


# 2. 启动 gpfdist

gpfdist -d /data/export -p 8081 &


# 3. Greenplum 创建外部表

CREATE READABLE EXTERNAL TABLE ext_orders (LIKE orders_gp)

LOCATION ('gpfdist://gp-master:8081/orders_*.csv')

FORMAT 'CSV';


# 4. 并行加载

INSERT INTO orders_gp SELECT * FROM ext_orders;

3.5 第五步:迁移验证

-- 1. 行数对比

SELECT 'Oracle' as source, count(*) FROM oracle_orders

UNION ALL

SELECT 'Greenplum' as source, count(*) FROM orders_gp;


-- 2. 关键字段汇总对比

SELECT 'Oracle' as source, sum(amount), avg(amount), min(order_date), max(order_date)

FROM oracle_orders

UNION ALL

SELECT 'Greenplum' as source, sum(amount), avg(amount), min(order_date), max(order_date)

FROM orders_gp;


-- 3. 抽样数据对比

SELECT * FROM oracle_orders WHERE order_id IN (1,100,1000,10000,100000)

UNION ALL

SELECT * FROM orders_gp WHERE order_id IN (1,100,1000,10000,100000)

ORDER BY order_id, source;

3.6 第六步:性能调优

迁移后常见性能问题及解决方案:

问题
原因
解决方案
查询慢
分布键选错
按常用 JOIN/WHERE 列重建分布键
聚合慢
数据倾斜
改用随机分布或两阶段聚合
JOIN 慢
未对齐分布键
统一分布键或小表改复制表
全表扫描
未使用分区剪裁
查询条件用分区键直接比较

04 / 实战案例

案例:某医院 Oracle 数仓迁移到 Greenplum

背景 :

  • Oracle 两节点 RAC,核心订单表 50 亿行

  • 每日 ETL 跑 8 小时,报表查询 P99 > 30 秒

迁移步骤 :

阶段
工作内容
耗时
评估
分析 500+ 表、2000+ SQL
2 周
DDL 转换
改写表结构(行存改列存,设计分布键)
1 周
SQL 转换
改写存储过程、视图
3 周
数据迁移
使用 gpfdist 迁移 20TB 数据
2 天
测试验证
功能测试、性能压测
2 周
业务切换
灰度上线
1 天

迁移效果 :

指标
迁移前(Oracle)
迁移后(Greenplum)
改善
存储空间
20TB
6TB(列存+压缩)
70% ↓
ETL 时长
8 小时
1.5 小时
81% ↓
日报查询
35 秒
1.2 秒
96% ↓
年汇总查询
8 分钟
8 秒
98% ↓
并发支持
20
200+
10 倍 ↑

写在最后

Oracle 迁移到 Greenplum,核心原则:

原则
说明
模型重构
行存改列存,增加分区
分布键设计
是性能的关键
SQL 重写
优化器差异大
增量并行
利用 gpfdist 加速
验证充分
行数、汇总、抽样

迁移不是搬运,是升级。改好了性能翻倍,改坏了不如不迁。


软件分享,留言获取地址:
     一个开源的剪贴板管理工具,免费,Windows/Mac/Linux都能用。装好以后,你在后台看不到它,但它会默默记下你复制过的所有东西——文字、图片、链接,甚至带格式的HTML。
    需要用的时候,按一下 Ctrl+Shift+V ,一个小窗口弹出来,之前复制过的内容整整齐齐排着队,点一下就能粘贴。最实用的是,你还可以给不同项目建不同的标签页,比如“配文素材”“选题灵感”“数据表格”,再也不用翻来翻去找“昨天复制的那段话”。
图片


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70051295/viewspace-3185894/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2023-03-23

  • 博文量
    1
  • 访问量
    938