如何迁移 Linux Oracle 数据库
小樊
40
2025-12-06 15:42:50
Linux Oracle 数据库迁移实操指南
一 迁移方案选型
Data Pump 逻辑迁移(expdp/impdp) :适合跨版本、跨平台、结构调整、选择性迁移;停机时间可控但随数据量增大而增加。支持全库/按SCHEMA/TABLESPACE 导出导入,便于拆分与并行。
RMAN 物理迁移 :同平台同版本停机最短;支持整库备份恢复、增量备份;跨平台需满足字节序(ENDIAN_FORMAT)一致或使用 RMAN Convert Database ;路径变更通过DB_FILE_NAME_CONVERT/LOG_FILE_NAME_CONVERT 处理。
XTTS 跨平台传输表空间 :适合Unix/Linux 间大规模迁移与滚动升级,支持增量(减少停机),但配置复杂度较高。
GoldenGate/Data Guard :近零停机迁移与持续复制,适合高可用与平滑切换;需额外部署与授权。
补充:中小规模或文件型数据可用SQL*Loader 批量导入。
二 通用准备与评估
版本与兼容性 :确认源/目标Oracle 版本 、补丁、组件(如Advanced Compression/Partitioning )一致或兼容;跨平台需核对V$TRANSPORTABLE_PLATFORM 的ENDIAN_FORMAT 。
字符集与NLS :尽量保持一致;如变更需评估应用影响与转换策略。
容量与目录 :目标库磁盘、FRA/归档 空间充足;创建DIRECTORY 对象并赋权,确保备份/转储文件可读写。
对象与权限梳理 :统计用户/角色/表空间/目录/外部表/DB Link 等,制定迁移清单与回退预案。
网络与窗口 :专线/加密传输,明确停机窗口 与回滚条件。
三 方法一 Data Pump 逻辑迁移步骤
源库
创建目录对象并赋权
sqlplus / as sysdba
create or replace directory tmpDir as ‘/tempFile’;
grant read,write on directory tmpDir to ;
导出(示例按 SCHEMA)
expdp /@ schemas=<schema_name> directory=tmpDir dumpfile=export.dmp logfile=export.log parallel=4
传输
scp -P /tempFile/export.dmp @:/home/tempFile/
目标库
创建目录对象并赋权
create or replace directory tmpDir as ‘/tempFile’;
导入(示例按 SCHEMA)
impdp /@ schemas=<schema_name> directory=tmpDir dumpfile=export.dmp logfile=import.log parallel=4 \
table_exists_action=replace remap_schema=: remap_tablespace=<src_ts>:<tgt_ts>
提示:可按需拆分SCHEMA/TABLESPACE 并行导出导入;导入后校验对象数量、无效对象与统计信息。
四 方法二 RMAN 物理迁移步骤
同平台同版本(停机最短)
源库全备(含归档)
rman target /
backup database plus archivelog;
backup current controlfile format ‘/backup/%T_CTL_%U’;
backup spfile format ‘/backup/%T_SPFILE_%U’;
传输备份至目标并恢复
rman target /
startup nomount;
restore spfile from ‘/backup/…SPFILE %U’;
startup nomount;
restore controlfile from ‘/backup/…CTL %U’;
alter database mount;
restore database;
recover database;
alter database open resetlogs;
跨平台(ENDIAN 一致)
使用RMAN Convert Database 生成目标平台脚本与数据文件,传输后在目标端执行脚本完成转换与打开。
跨平台(ENDIAN 不一致)
采用XTTS 或先在同字节序平台转换后再迁移;使用DBMS_TDB 检查可传输性与外部对象。
路径变更
在目标库使用DB_FILE_NAME_CONVERT/LOG_FILE_NAME_CONVERT 或恢复时指定转换规则。
五 方法三 XTTS 跨平台传输表空间步骤
准备:确认平台支持与字节序;选择自包含 表空间集;源库准备可传输表空间(只读或按增量阶段处理)。
步骤
源库导出元数据(Data Pump)
expdp system/ DIRECTORY=xtts_dir DUMPFILE=xtts_meta.dmp LOGFILE=xtts_meta.log FULL=Y PARALLEL=4
传输数据文件与元数据至目标;必要时执行增量备份/应用 以缩短停机。
目标库导入元数据
impdp system/ DIRECTORY=xtts_dir DUMPFILE=xtts_meta.dmp LOGFILE=xtts_imp.log FULL=Y PARALLEL=4
校验:对象数量、数据一致性、无效对象与统计信息收集。
六 迁移后验证与常见问题
验证清单
数据一致性:关键表COUNT/CHECKSUM 、抽样比对;
对象完整性:DBA_OBJECTS 统计、无效对象编译、索引/约束/触发器启用;
权限与配额:DBA_USERS/DBA_ROLES/DBA_TAB_PRIVS/DBA_TS_QUOTAS ;
应用连通:连接串、监听、DB Link、定时任务与目录对象;
性能基线:AWR/ASH 对比,必要时调优。
常见问题与处理
字符集不一致导致乱码:迁移前统一或在导入阶段处理;
路径不同:RMAN 使用DB_FILE_NAME_CONVERT/LOG_FILE_NAME_CONVERT ;
外部表/目录/作业未迁移:清单化补齐或改写访问方式;
统计信息缺失:导入后执行DBMS_STATS 收集;
回退预案:保留源库只读窗口、备份与回滚脚本,确保可快速恢复。