Ubuntu Oracle数据库如何进行数据迁移
导读:Ubuntu 上 Oracle 数据库迁移实用指南 一 方案选型与前置检查 明确迁移范围:是同版本同平台(如 Ubuntu 20.04 → 22.04)、跨平台(Linux → Linux/Windows)、还是跨版本(如 12c → 1...
Ubuntu 上 Oracle 数据库迁移实用指南
一 方案选型与前置检查
- 明确迁移范围:是同版本同平台(如 Ubuntu 20.04 → 22.04)、跨平台(Linux → Linux/Windows)、还是跨版本(如 12c → 19c/21c)。
- 检查两端平台是否支持跨平台传输:在 SQL*Plus 执行
SELECT * FROM V$TRANSPORTABLE_PLATFORM ORDER BY PLATFORM_NAME;
若源/目标平台字节序不同(Endianness 不同),不能使用 RMAN 的 CONVERT DATABASE;可用Data Pump、**可传输表空间(Transportable Tablespaces,配合 RMAN CONVERT TABLESPACE)**等替代。若字节序相同,可考虑 RMAN CONVERT DATABASE。 - 兼容性核对:字符集建议保持一致;目标库版本需满足兼容性要求;若使用 RMAN 备份集传输,通常要求 COMPATIBLE ≥ 12.0。
- 一致性与可用性:迁移窗口内尽量让源库保持只读或停机;先做全量备份;准备回滚方案。
二 方法一 Data Pump 逻辑迁移(最通用)
- 适用:同/跨平台、同/跨版本、部分对象迁移、结构+数据一体化。
- 源库操作(oracle 用户):
- 创建目录对象并赋权
sqlplus / as sysdba
CREATE OR REPLACE DIRECTORY tmpDir AS ‘/tempFile’;
GRANT READ, WRITE ON DIRECTORY tmpDir TO your_user; - 导出(示例按 schema)
expdp your_user/pwd@//IP:1521/service_name SCHEMAS=your_schema DIRECTORY=tmpDir DUMPFILE=export.dmp LOGFILE=export.log PARALLEL=4
- 创建目录对象并赋权
- 传输文件
scp -P 2222 /tempFile/export.dmp user@target:/home/tempFile/ - 目标库操作:
- 创建同名目录对象并赋权
sqlplus / as sysdba
CREATE OR REPLACE DIRECTORY tmpDir AS ‘/tempFile’;
GRANT READ, WRITE ON DIRECTORY tmpDir TO your_user; - 导入(示例按 schema,含重映射)
impdp your_user/pwd@//IP:1521/service_name DIRECTORY=tmpDir DUMPFILE=export.dmp LOGFILE=import.log REMAP_SCHEMA=your_schema:target_schema REMAP_TABLESPACE=src_ts:target_ts PARALLEL=4
- 创建同名目录对象并赋权
- 提示:可按需选择参数如 TABLES、INCLUDE/EXCLUDE、CONTENT=DATA_ONLY、REMAP_TABLE 等;大数据量建议分 schema/表并行导出导入。
三 方法二 RMAN 跨平台传输(同字节序整库迁移)
- 适用:同字节序的跨平台整库迁移,停机时间较短。
- 源库准备:
- 只读打开
sqlplus / as sysdba
STARTUP MOUNT;
ALTER DATABASE OPEN READ ONLY; - 可选:检查可转换性(PL/SQL 块)
SET SERVEROUTPUT ON
DECLARE db_ready BOOLEAN;
BEGIN
db_ready := DBMS_TDB.CHECK_DB(‘TARGET_PLATFORM_NAME’, DBMS_TDB.READ_ONLY);
END;
/ - 使用 RMAN 转换数据库(生成目标平台脚本与数据文件)
rman target /
RMAN> CONVERT DATABASE
ON TARGET PLATFORM
NEW DATABASE ‘newdb’
FORMAT ‘/tmp/%U’
TRANSPORT SCRIPT ‘crdb.sql’
TO PLATFORM ‘Linux x86 64-bit’;
- 只读打开
- 传输与在目标端建库:
将生成的数据文件、TRANSPORT SCRIPT(crdb.sql)、PFILE等复制到目标主机;在目标端
sqlplus / as sysdba
STARTUP NOMOUNT;
@/target-dir/crdb.sql - 重要限制:仅当源/目标字节序相同时可用 CONVERT DATABASE;字节序不同需用Data Pump或可传输表空间 + RMAN CONVERT TABLESPACE。
四 方法三 可传输表空间 TTS(大数据量高效)
- 适用:跨平台或同平台的大数据量迁移,停机时间可很短。
- 基本流程:
- 在源库将要迁移的表空间置为只读:
ALTER TABLESPACE tbs_name READ ONLY; - 导出元数据(仅元数据,不导出数据):
expdp system/pwd DIRECTORY=tmpDir DUMPFILE=tts_meta.dmp LOGFILE=tts_meta.log TRANSPORT_TABLESPACES=tbs_name TRANSPORT_FULL_CHECK=YES - 复制数据文件与元数据转储文件到目标库。
- 目标库导入元数据:
impdp system/pwd DIRECTORY=tmpDir DUMPFILE=tts_meta.dmp LOGFILE=tts_imp.log TRANSPORT_DATAFILES=‘/u01/oradata/tbs01.dbf’ - 校验并恢复读写:
ALTER TABLESPACE tbs_name READ WRITE;
- 在源库将要迁移的表空间置为只读:
- 跨字节序场景:在源端或目标端使用 RMAN CONVERT TABLESPACE 将数据文件转换为目标平台字节序后再导入。
五 迁移后验证与常见问题
- 验证清单:
- 对象数量与结构:统计表、索引、视图、存储过程、触发器、同义词等是否一致。
- 数据一致性:对关键表抽样或全量校验(如校验和/计数/对比工具)。
- 约束与索引:检查无效对象、禁用/启用约束、重建/收集统计信息。
- 应用连通:应用回归测试,确认连接串、字符集、时区、NLS 设置正确。
- 备份与监控:切换后立刻做一次全备,并验证归档、告警、监听等。
- 常见问题与处理:
- 字符集不一致导致乱码:迁移前统一字符集,或按需在导入时处理。
- 字节序不同误用 CONVERT DATABASE:改用 Data Pump 或 TTS + RMAN CONVERT TABLESPACE。
- 目录对象/权限问题:确保 DIRECTORY 存在且用户有读写权限。
- 版本不兼容:按官方支持矩阵升级目标库版本后再迁移。
- 大数据量性能:合理设置 PARALLEL、分批次/分 schema 迁移,避免一次性全量冲击。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Oracle数据库如何进行数据迁移
本文地址: https://pptw.com/jishu/750979.html
