迁移是 ERP 生命周期中风险最高的操作之一——数据丢失、自定义模块损坏和停机时间延长都是真正的风险,需要仔细规划和执行。
迁移是 ERP 生命周期中风险最高的操作之一——数据丢失、自定义模块损坏和停机时间延长都是真正的风险,需要仔细规划和执行。
本指南为从 Odoo 17 或 Odoo 18 迁移到 Odoo 19 Enterprise 的组织提供了实用的分步迁移方法。它涵盖了从初始评估和数据映射到自定义模块更新、测试程序和上线切换计划的所有内容。
要点
- 自定义模块兼容性必须根据 Odoo 19 的 API 更改进行验证
- 数据迁移通过Odoo官方升级平台或OpenUpgrade运行
- 生产切换前必须有并行测试环境
- 切换前必须关闭财务周期以避免对账问题
- 所有第三方集成在迁移后都需要重新验证
- 回滚计划必须在上线前记录并测试
迁移规划:评估阶段
在编写单个迁移脚本之前,请花时间进行彻底评估。迁移失败最常见的原因是规划不充分,而不是技术复杂性。
第 1 步:清点您当前的环境
记录当前 Odoo 安装的每个组件:
Current Environment Inventory:
- Odoo version: 17.0.x or 18.0.x
- Edition: Community or Enterprise
- Database size: X GB, Y records in sale.order, Z in account.move
- Installed modules: [list all modules]
- Custom modules: [list with developer contact]
- Third-party connectors: [Amazon, Shopify, etc.]
- Active integrations: [API, webhooks, cron jobs]
- Customized reports: [list]
- Custom fields (Studio or code): [list]
- Server specs: RAM, CPU, disk
- PostgreSQL version:
步骤 2:对自定义模块进行分类
对于每个自定义模块,确定:
| 分类 | 定义 | 移民行动 |
|---|---|---|
| 标准使用 | Odoo Marketplace 中的模块未发生变化 | 重新下载 Odoo 19 |
| 轻微修改 | 少量字段添加、视图更改 | 更新和测试 |
| 深度定制 | 业务关键型 Python 逻辑 | 完整的开发者审查 |
| 已弃用 | Odoo 核心中现已提供功能 | 删除并重新配置 |
| 不兼容 | 取决于已删除的 Odoo 19 API | 需要重写 |
选择您的迁移路径
路径一:Odoo官方升级服务
Odoo SA 在 upgrade.odoo.com 提供自动升级服务。您提交数据库,他们运行由 Odoo SA 开发和维护的迁移脚本,然后您会收到升级后的数据库。
优点:
- Odoo SA 的官方支持和测试
- 自动处理数据库模式更改
- 适用于标准 Odoo,只需最少的定制
缺点:
- 需要将生产数据提交到 Odoo 的服务器
- 对迁移过程的控制有限
- 自定义模块迁移是您的责任
路径 2:OpenUpgrade(社区工具)
OpenUpgrade 是一个开源项目,为社区提供迁移脚本。
路径 3:全新安装并导入数据
对于高度定制的实例或非常旧的版本:
- 设置新的 Odoo 19 Enterprise 实例
- 重新配置所有模块和设置
- 从旧系统导出关键数据
- 通过Odoo的导入工具或自定义迁移脚本导入
- 手动重新输入期初余额进行会计处理
这条路径速度较慢,但提供了最干净的起点。
推荐用于大多数 Odoo 17/18 → 19 迁移:路径 1 或 2 与并行自定义模块重新开发工作相结合。
迁移前准备
截止财务期:
迁移前:
- 在 Odoo Accounting 中锁定当前月份之前的所有期间
- 运行账龄应收账款和应付账款报告并调节差异
- 核对迁移日期之前的所有银行对账单
- 过帐应包含在历史数据中的所有草稿发票
备份所有内容:
# PostgreSQL backup
pg_dump -h localhost -U odoo_user -Fc odoo_production > \
odoo_prod_backup_$(date +%Y%m%d_%H%M%S).dump
# Filestore backup (attachments, images)
tar -czf odoo_filestore_$(date +%Y%m%d).tar.gz \
/var/lib/odoo/.local/share/Odoo/filestore/
# Configuration backup
cp /etc/odoo/odoo.conf odoo_conf_backup_$(date +%Y%m%d).conf
设置迁移环境
基础设施设置:
# Install Odoo 19 Enterprise on migration server
# Install PostgreSQL 15+
sudo apt install postgresql-15 postgresql-contrib
# Install Python 3.12 and dependencies
sudo apt install python3.12 python3.12-dev python3.12-venv \
libxml2-dev libxslt1-dev libldap2-dev libsasl2-dev \
libtiff5-dev libjpeg8-dev libopenjp2-7-dev zlib1g-dev \
libfreetype6-dev liblcms2-dev libwebp-dev libharfbuzz-dev \
libfribidi-dev libxcb1-dev
# Clone Odoo 19 Enterprise
git clone https://github.com/odoo/odoo.git -b 19.0 /opt/odoo19
git clone https://github.com/odoo/enterprise.git -b 19.0 /opt/odoo19-enterprise
# Install Python dependencies
pip3.12 install -r /opt/odoo19/requirements.txt
自定义模块迁移
这个阶段是最耗时的。每个定制模块需要:
1.更新清单版本:
# Change from:
'version': '17.0.1.0.0',
# To:
'version': '19.0.1.0.0',
2.更新视图语法:
<!-- Old (v16 and earlier): -->
<field name="state" attrs="{'invisible': [('active', '=', False)]}"/>
<!-- New (v17+): -->
<field name="state" invisible="not active"/>
3.独立测试每个模块:
# Install and test each custom module
python3 odoo-bin -d test_db -i my_custom_module --stop-after-init
python3 odoo-bin -d test_db --test-enable -u my_custom_module
数据验证和测试
记录计数验证:
比较源数据库和迁移数据库之间的记录计数:
# Run on both source and target to compare
models_to_check = [
'res.partner', 'product.template', 'product.product',
'sale.order', 'purchase.order', 'account.move',
'stock.quant', 'mrp.production', 'hr.employee'
]
for model in models_to_check:
count = env[model].search_count([])
print(f"{model}: {count}")
用户验收测试清单:
- 所有菜单和导航项均可访问
- 关键流程:销售订单→发货→发票→付款
- 会计:日记账分录、银行余额调节表、报告
- 库存:收货、交货、库存估价
- 制造:BOM、工作订单、质量检查(如果适用)
- HR:员工、休假管理、工资单(如果适用)
- 业务用户验证的自定义模块功能
- 报告正确生成并与迁移前输出匹配
- 外部集成(API、webhooks)在暂存阶段进行了测试
上线切换计划
切换窗口规划:
选择对业务影响最小的切换窗口:
- 周末(大多数企业为周六晚上至周日早上)
- 财政月末(简化期初余额输入)
- 银行假期前最后一个工作日之后(额外缓冲时间)
切换清单:
T-48 hours:
[ ] Final communication to all users about downtime window
[ ] Freeze all non-critical transactions in old system
[ ] Verify migration server is ready
[ ] Complete last data validation run
T-0 (Cutover Start):
[ ] Put old system in maintenance mode (disable user access)
[ ] Create final backup of production database
[ ] Run final migration on this backup
[ ] Verify record counts and financial balances
[ ] Test all critical workflows
[ ] DNS/URL cutover to new system
[ ] Smoke test from user devices (desktop, mobile)
T+2 hours (Go-Live Verification):
[ ] All users can log in
[ ] Create test sale order, confirm, ship, invoice
[ ] Verify email sending works
[ ] Check integrations are receiving/sending data
[ ] Monitor error logs for first 30 minutes
回滚计划:
如果在割接过程中发现严重问题:
- 将 DNS 切换回旧服务器
- 为用户重新启用旧系统
- 记录所有发现的问题
- 安排后续迁移窗口
常见问题
我可以从 Odoo 17 直接跳到 Odoo 19,还是必须经过 18?
使用Odoo的官方升级服务,通常可以直接从17升级到19。Odoo SA的迁移脚本可以处理多版本跳转。请务必检查 OpenUpgrade 存储库以获取您需要的特定版本。
典型的 Odoo 迁移需要多长时间?
时间表在很大程度上取决于定制级别。迁移本身(数据库升级)需要数小时;时间是在测试、模块更新和验证上。
迁移期间 Studio 自定义会发生什么情况?
Studio 自定义内容存储为标准 Odoo 数据(视图、字段、自动化),并通过标准数据库升级流程进行迁移。但是,如果 Odoo 19 更改了底层表单结构,某些视图自定义可能需要手动审核。迁移后始终测试所有 Studio 自定义。
迁移后我需要重新输入期初余额吗?
不需要,如果直接迁移数据库。所有历史日记账分录和余额都随数据库传输。如果您选择“全新安装并导入数据”路径,则需要输入截至转换日期的期初余额,这需要与您的会计团队仔细协调。
后续步骤
Odoo 迁移是直接影响业务连续性的高风险项目。顺利迁移和痛苦迁移之间的区别取决于准备、专业知识和严格的测试方法。
我们的迁移方法涵盖全面评估、自定义模块更新、并行测试以及带有回滚程序的记录转换计划。
作者
ECOSIRE Research and Development Team技术写作
ECOSIRE 技术写作团队的内容涵盖 Odoo ERP、Shopify 电子商务、AI 智能体、Power BI 分析、GoHighLevel 自动化以及企业软件最佳实践。我们的指南帮助企业做出明智的技术决策。
相关文章
AI 支持的客户细分:从 RFM 到预测聚类
了解 AI 如何将客户细分从静态 RFM 分析转变为动态预测聚类。使用 Python、Odoo 和真实 ROI 数据的实施指南。
用于供应链优化的人工智能:可见性、预测和自动化
利用人工智能改变供应链运营:需求感知、供应商风险评分、路线优化、仓库自动化和中断预测。 2026年指南。
B2B 批发电商指南:买家门户、账期与客户专属定价
打造买家真正愿意用的 B2B 批发门户:客户专属定价、账期与信用额度、采购单与审批结账,以及基于订单历史的一键复购。