Ubuntu 上 Oracle 迁移步骤解析
一 迁移方案选型与前置准备
- 明确目标与约束:迁移范围(整库/按Schema/按表)、版本(如 11g/12c/19c/23ai)、是否跨平台(如 Windows→Ubuntu Linux x86-64)、停机窗口、字符集(常见 AL32UTF8)、是否使用 CDB/PDB、存储与目录权限等。
- 评估与规划:使用 Cloud Premigration Advisor Tool(CPAT) 进行兼容性评估与问题优先级排序;结合 AutoUpgrade 规划升级路径;若需尽量零停机,评估 Zero Downtime Migration(ZDM) 或 GoldenGate;若走云上,可评估 OCI Database Migration 托管服务。
- 备份与回滚:全量备份(RMAN/冷备)、导出元数据与统计信息、准备回滚方案与演练计划。
- 网络与传输:打通 SSH/SCP 等传输通道,准备中转存储或对象存储,确保带宽与稳定性。
- 目标库准备:安装对应版本 Oracle Database,创建所需目录对象(用于 Data Pump)、表空间与用户、参数文件与监听就绪。
二 方法一 Data Pump 逻辑迁移(通用、跨平台、易上手)
- 源端导出(示例)
- 以 oracle 用户登录,创建目录对象并授权:
sqlplus / as sysdba
create or replace directory tmpDir as ‘/tempFile’;
grant read, write on directory tmpDir to <schema_user>;
- 导出全库或指定对象:
expdp /@ directory=tmpDir dumpfile=export.dmp logfile=export.log full=y;
或按 Schema:schemas=<schema_name>;按表:tables=tab1,tab2;可按需加 exclude/include、parallel、compression 等参数。
- 传输文件
使用 SCP 将 export.dmp 复制到 Ubuntu 目标库服务器相同目录对象指向的路径(如 /tempFile):
scp -P /tempFile/export.dmp @<ubuntu_ip>:/tempFile
- 目标端导入(示例)
- 以 oracle 用户登录,创建同名目录对象并授权;
- 导入:
impdp /@ directory=tmpDir dumpfile=export.dmp logfile=import.log full=y;
或按 Schema/表导入,必要时使用 remap_schema、remap_tablespace、table_exists_action=replace/skip/append 等。
- 校验
核对对象数量、数据量、无效对象、约束与索引状态、统计信息、应用连通性。
三 方法二 RMAN 跨平台物理迁移(同平台或跨平台,停机更可控)
- 适用场景:同平台同字节序可直接 备份→传输→还原;跨平台(如 Windows→Linux x86-64)需做跨平台转换。
- 基本流程
- 源库准备:全备(RMAN),记录 DBID、兼容性、文件位置;跨平台时建议将库置于 只读 或短暂停机窗口;
- 转换与传输:
- 跨平台转换(示例思路):RMAN> CONVERT DATABASE NEW_DATABASE TO PLATFORM ‘Linux x86 64-bit’ FORMAT ‘/tmp/%U’;
将生成的文件(含 transport script 等)传到 Ubuntu;
- 目标库还原:
- 按转换脚本创建控制文件/目录结构,RMAN 还原数据文件,执行 recover 与 open resetlogs;
- 若同平台同字节序,可简化流程:RMAN 备份→SCP→在目标库 restore/ recover→open。
- 校验与性能:检查 alert.log、无效对象、统计信息收集、必要时重建/并行重建索引。
四 方法三 仅迁移数据文件目录(同平台、同版本、停机窗口可控)
- 适用前提:同平台同版本、仅变更 数据文件路径(如从旧磁盘到新磁盘),不建议跨平台。
- 操作步骤(示例)
- 确认 归档模式:archive log list;
- 将表空间离线:alter tablespace offline;
- 操作系统层 mv/cp 数据文件到新目录;
- 控制文件重命名:alter tablespace rename datafile ‘/old/path.dbf’ to ‘/new/path.dbf’;
- 上线表空间:alter tablespace online;
- 若是 system 等系统表空间,需 shutdown immediate → startup mount → alter database rename file … → alter database open。
- 注意:非 system 表空间离线期间业务受影响;若数据文件 offline 过久,可能需要介质恢复(recover datafile)后再 online。
五 方法四 迁移到非 Oracle 数据库(如 PostgreSQL/IvorySQL,使用 Ora2Pg)
- 适用:从 Oracle 迁至 PostgreSQL/IvorySQL 等异构数据库。
- 核心步骤
- 在 Ubuntu 安装 Ora2Pg(依赖 DBI/DBD::Oracle),配置 ora2pg.conf(Oracle DSN、SCHEMA、导出类型等);
- 评估迁移成本:ora2pg -t SHOW_REPORT --estimate_cost -c ora2pg.conf;
- 导出对象与数据:ora2pg -c ora2pg.conf(生成 TABLE/INDEX/TRIGGER/FUNCTION/PROCEDURE 等 SQL 与数据文件);
- 在目标库(如 IvorySQL/PostgreSQL)创建库与用户,先导入结构脚本,再导入数据脚本:
psql -U -h -p -f TABLE_output.sql
psql -U -h -p -f DATA_output.sql
- 修正不兼容对象(PL/SQL→PL/pgSQL)、索引/约束、触发器、序列、权限等差异。