0. 先给一个公式
真实成本 = 工具能省的人天 × 1/3 + 兼容性缺口 × 2 × 人天单价 + 业务停机损失
下文 12 条,每条都给出“可折算成人天或人民币”的算法,方便直接填进标书或风险登记册。
1. CHAR(byte vs char)
症状
CHAR(10) 在 Oracle 占 10 byte,在多数国产库默认 10 字符(UTF-8 下 30 byte)。
测算
- 存储膨胀 1~3 倍 → 索引深度 +1 层 → IO 延迟 ↑15% → 高峰期 CPU 多买 20% 核。
- 代码里 3000 个
RTRIM(col)可省,但得全量回归,按 1 人/100 个函数 ≈ 30 人天。
2. DATE “0099”
症状
Oracle 把 '0099-09-30' 当合法日期,国产库直接抛异常。
测算
- 脏数据比例万分之一,停导库 2 h;人工清洗 2 万行 × 3 分钟 ≈ 100 人时。
- 若关闭校验强迁,后续审计发现“世纪错误”字段,罚款区间 5–50 万(参考金融行业案例)。
3. ROWID 消失
症状
WHERE ROWID = :r 批量更新 5 万张单据,无等价伪列。
测算
- 改代码 1800 处,按 1 处 10 分钟 ≈ 300 人时;联调 + 压测 ≈ 60 人天。
- 性能劣化 15%,为保 TPS 多买 2 颗物理核,年授权费 18 万(公开报价折算)。
4. Package 重载
症状
同名同参不同返回类型的过程,国产库不支持。
测算
- 370 个重载需改名 → 牵一发动全身,额外 API 版本,配套文档、测试 120 人天。
- 上线当晚误调旧接口 3 万次,客诉 200+,按 1 次客诉 200 元算 ≈ 4 万隐性损失。
5. Trigger 顺序
症状
行级触发器执行顺序从“创建先后”变成“字母顺序”,库存先出库后扣减。
测算
- 负库存 42 单,每单赔偿 1800 元,共 7.5 万;
- 触发器批量重命名 + 回归,40 人天。
6. Empty String vs NULL
症状
'' 不再等于 NULL,报表 Where 条件瞬间多出 6 万条。
测算
- 财务差额 900 万,虽最终可解释,但月结延迟 3 天,资金成本按 3‱ 日息 ≈ 8.1 万;
- 紧急补丁 27 张表、1300 条 SQL,通宵加班费 15 人天。
7. 物化视图刷新
症状
ON COMMIT 刷新降级为手动或定时,实时库存视图延迟 5 分钟。
测算
- 超卖率 ↑0.8%,年销售额 15 亿 → 1200 万货值;按 10% 真实损失 ≈ 120 万。
- 自写增量框架 5000 行,维护人头 1 名/年,30 万/年。
8. Sequence Cache
症状
默认 CACHE 1,高并发成瓶颈;调大后又出现缺口。
测算
- TPS 跌 30%,大促前临时加 1 台 32C 主机,52 万(含机房托管);
- 跳号 4 万,外部对账失败,按合同每单 1 元罚金 ≈ 4 万。
9. 字符集转码
症状
客户端 NLS 自动转码消失,emoji、生僻字变问号。
测算
- 舆情投诉 300 条,品牌扣分无法估值;
- 写转码中间件 2400 行,测试 3 轮,累计 45 人天。
10. VPD 行级安全
症状
无内置行级安全,需改视图或加权限表。
测算
- 重写 90 张视图,单元测试组合爆炸,外包测试费 40 万;
- 视图嵌套导致执行计划劣化,CPU ↑25%,加 1 台 32C 主机,52 万。
11. XA 两阶段提交
症状
分布式事务失败率 0.5%,日 10 万笔 → 500 笔悬而未决。
测算
- 人工对账 2 h/天,1 名 DBA 年薪 25 万;
- 最终改用消息队列,重构 6 个微服务,4 个月开发,机会成本 200 万。
12. License 核数模型
症状
Oracle 按“使用核”计价,国产库多数按“物理核”计价;虚机超分场景下翻倍。
测算
- 原 64 核超分 32 线程,Oracle 算 32,国产算 64,年授权费差 80 万;
- 为降核拆实例,引入分库分表,研发 + 运维 120 人天,折合 60 万。
把数字汇成一句话
按上表“看得见的钱”粗算:
一次性 480 万 + 每年 250 万
还没算舆情、罚款、机会成本。
所以,立项前请先拉一张“兼容性缺口清单”,把 12 条逐条打√——
勾得完的,再谈“国产化时间窗口”;
勾不完的,把对应预算写进风险金,别让数据库成为唯一不能回滚的模块。