首页 >
问答 >
云计算 >
Ubuntu Oracle如何进行数据迁移
Ubuntu Oracle如何进行数据迁移
小樊
33
2025-12-16 18:42:43
Ubuntu 上 Oracle 数据迁移实操指南
一、迁移方法选型
Data Pump 逻辑迁移(expdp/impdp) :最通用,支持同构/异构平台、跨版本(受限)、跨字符集;适合按用户/表空间/全库 迁移与重组。
RMAN 可传输表空间(TTS) :以数据文件为单位,停机时间短;两端字节序(Endian)不同时用 RMAN 转换,相同可直接拷贝;适合大容量、少停机。
RMAN Convert Database :整库迁移,要求两端字节序相同 ;自动生成传输脚本与参数文件,重建控制文件与联机日志;适合“同字节序”整库搬迁。
传统 Export/Import(exp/imp) :兼容老版本客户端/服务器,性能与功能弱于 Data Pump,建议仅作兼容或小规模迁移。
二、Data Pump 实操步骤(推荐)
源库准备
创建目录对象并赋权:
sqlplus / as sysdba
create or replace directory DMPDIR as ‘/u01/dmp’ ;
grant read, write on directory DMPDIR to your_user ;
导出(示例按 schema):
expdp your_user/pwd@//host:1521/service schemas=your_user directory=DMPDIR dumpfile=exp_20251216.dmp logfile=exp_20251216.log job_name=exp_job
传输
scp -P 22 /u01/dmp/exp_20251216.dmp user@target:/u01/dmp/
目标库准备
创建同名表空间/用户(如原库使用自定义表空间,需先创建;否则使用默认表空间):
create tablespace TS_DATA datafile ‘/u01/oradata/TS_DATA01.dbf’ size 500M autoextend on next 100M maxsize unlimited ;
create temporary tablespace TS_TEMP tempfile ‘/u01/oradata/TS_TEMP01.dbf’ size 200M autoextend on next 50M ;
create user your_user identified by pwd default tablespace TS_DATA temporary tablespace TS_TEMP ;
grant connect, resource, dba to your_user ;
create or replace directory DMPDIR as ‘/u01/dmp’ ;
grant read, write on directory DMPDIR to your_user ;
导入(示例)
同 schema:
impdp your_user/pwd@//host:1521/service directory=DMPDIR dumpfile=exp_20251216.dmp logfile=imp_20251216.log job_name=imp_job
变更 schema(跨库重映射):
impdp system/pwd@//host:1521/service directory=DMPDIR dumpfile=exp_20251216.dmp logfile=imp_20251216.log remap_schema=src_user:dest_user remap_tablespace=TS_SRC:TS_DEST table_exists_action=REPLACE
常用参数
table_exists_action:REPLACE/TRUNCATE/APPEND/SKIP
parallel:提升大库导入速度(如 parallel=4 )
大文件导入建议:增加 UNDO 表空间或临时表空间容量,避免 ORA-01555/ORA-01652。
三、RMAN 可传输表空间与整库迁移
可传输表空间(TTS,适合大容量、少停机)
源库:将要迁移的表空间置为只读
alter tablespace TS1 read only;
检查平台与可转换性
select platform_name, endian_format from v$transportable_platform;
转换数据文件(两端 Endian 不同在源库转换;相同可省略)
RMAN> convert tablespace TS1,TS2 to platform ‘Linux x86 64-bit ’ db_file_name_convert ‘/u01/oradata’,‘/u01/transport’ FORMAT ‘/u01/transport/%U’;
导出元数据(仅元数据,不包含数据文件)
expdp system/pwd directory=DMPDIR dumpfile=tts_meta.dmp logfile=tts_meta.log transport_tablespaces=TS1,TS2 transport_datafiles=‘/u01/transport/*.dbf’
目标库:创建目标用户/表空间,导入元数据并改为读写
impdp system/pwd directory=DMPDIR dumpfile=tts_meta.dmp logfile=tts_imp.log transport_datafiles=‘/u01/transport/*.dbf’
alter tablespace TS1 read write;
RMAN Convert Database(整库,要求同字节序)
源库准备
startup mount; alter database open read only;
使用 DBMS_TDB 检查可传输性与外部对象
set serveroutput on
exec dbms_tdb.check_db(‘Linux x86 64-bit ’);
exec dbms_tdb.check_external;
执行转换(生成传输脚本与数据文件)
RMAN> convert database new database NEWDB transport script /u01/transport/transport.sql to platform ‘Linux x86 64-bit ’ db_file_name_convert ‘/u01/oradata’,‘/u01/transport’
目标库
依据生成的 PFILE 调整参数(如 DB_NAME、CONTROL_FILES、DB_RECOVERY_FILE_DEST 等)
运行 transport.sql 创建新库并 OPEN RESETLOGS
处理外部表、DIRECTORY、BFILE 等需手工迁移对象。
四、迁移前后关键检查与常见问题
版本与兼容性
Data Pump 两端版本建议≥10.1.0.2 ;跨版本导入时,对象定义以目标库版本为准,可能需调整(如并行度、压缩、INMEMORY 等特性)。
字符集与 NLS
尽量保持两端 NLS_CHARACTERSET/NLS_NCHAR_CHARACTERSET 一致;不一致时,Data Pump 会在导入端做字符集转换,先小范围演练验证数据正确性。
字节序与平台
使用 TTS 时,若两端 Endian 不同,必须用 RMAN 做字节序转换;使用 Convert Database 时,两端 Endian 必须相同。
目录与权限
Oracle 目录对象必须存在且对目标用户授予 READ/WRITE ;操作系统目录需 oracle:oinstall 权限且磁盘空间充足。
表空间与配额
目标库需预先创建同名表空间或按需 remap_tablespace ;用户配额足够,避免导入时报 ORA-01950。
大对象与回滚
大表/LOB 导入建议提高 UNDO 表空间与 DB_CACHE_SIZE ,并使用 parallel ;导入前清理目标端历史数据,减少冲突。
一致性校验
迁移后对比关键表的 COUNT(*) 、CHECKSUM (如 DBMS_CRYPTO.CHECKSUM)与近期业务报表结果,抽样验证约束、索引、触发器、物化视图等对象有效性。