Linux上Oracle数据库如何迁移
导读:Linux 上 Oracle 数据库迁移实操指南 一、迁移方法选型 Data Pump 逻辑迁移(expdp/impdp):适合跨版本、跨字符集、跨目录结构的迁移;停机时间短(导出/导入窗口),对现网影响可控;支持按schema/表空间/...
Linux 上 Oracle 数据库迁移实操指南
一、迁移方法选型
- Data Pump 逻辑迁移(expdp/impdp):适合跨版本、跨字符集、跨目录结构的迁移;停机时间短(导出/导入窗口),对现网影响可控;支持按schema/表空间/全库粒度操作。
- RMAN 物理迁移:同平台同字节序时停机最短(仅切换归档/数据文件时间点);支持增量备份+恢复;跨平台需做字节序和数据文件转换。
- XTTS 跨平台传输表空间:适合超大数据量且需跨平台/跨字节序的场景;可分阶段迁移并支持增量同步,复杂度较高。
- GoldenGate/Data Guard:适合零或近零停机的在线迁移与持续同步,支持异构与跨版本,成本与运维复杂度更高。
- 补充:中小规模或文件型数据可用 SQL*Loader 批量导入。
二、Data Pump 实操步骤(推荐优先)
- 源库准备
- 创建目录对象并授权(需 Oracle 目录对象与 OS 目录一致且权限正确):
mkdir -p /home/expdp chown oracle:dba /home/expdp sqlplus / as sysdba SQL> create or replace directory expdir as '/home/expdp'; SQL> grant read,write on directory expdir to system; - 导出(示例按 schema):
expdp system/oracle@orcl \ directory=expdir \ dumpfile=exp_20251218.dmp \ logfile=exp_20251218.log \ schemas=SCOTT \ parallel=4 \ compression=all
- 创建目录对象并授权(需 Oracle 目录对象与 OS 目录一致且权限正确):
- 传输到目标库
scp -P 22 /home/expdp/exp_20251218.dmp oracle@target:/home/expdp/ - 目标库导入
- 目录对象与权限(同上),必要时预建表空间/用户;导入示例:
impdp system/oracle@orcl \ directory=expdir \ dumpfile=exp_20251218.dmp \ logfile=imp_20251218.log \ schemas=SCOTT \ remap_schema=SCOTT:SCOTT_NEW \ remap_tablespace=USERS:USERS_NEW \ table_exists_action=REPLACE \ parallel=4 - 常用参数说明:
- remap_schema:源用户→目标用户;remap_tablespace:源表空间→目标表空间。
- table_exists_action:skip(默认)/replace(先 drop 再建)/append(追加)/truncate(先 truncate 再插)。
- 导入前可用
select username,default_tablespace from user_users;确认默认表空间。
- 目录对象与权限(同上),必要时预建表空间/用户;导入示例:
三、RMAN 物理迁移步骤(同平台优先)
- 源库备份(含归档,便于时间点恢复)
rman target / RMAN> run { allocate channel c1 type disk; backup database plus archivelog delete input; backup current controlfile format '/backup/ctl_%U'; backup spfile format '/backup/spfile_%U'; release channel c1; } - 目标库恢复
- 安装同版本 Oracle 软件,创建相关目录;将备份集拷贝到目标端相同目录结构或记录新路径。
- 若数据文件路径不同,设置转换参数并启动到 NOMOUNT:
sqlplus / as sysdba SQL> alter system set db_file_name_convert='/u01/oradata/src','/u01/oradata/tgt' scope=spfile; SQL> alter system set log_file_name_convert='/u01/oradata/src','/u01/oradata/tgt' scope=spfile; SQL> shutdown immediate; SQL> startup nomount; - RMAN 恢复(示例):
rman target / RMAN> startup nomount; RMAN> restore spfile to pfile '/tmp/init.ora' from '/backup/spfile_*.bkp'; RMAN> restore controlfile from '/backup/ctl_*.bkp'; RMAN> alter database mount; RMAN> restore database; RMAN> recover database; RMAN> alter database open resetlogs;
- 提示:跨平台需检查字节序(见下节)并在 RMAN 中进行相应转换;同平台通常无需字节序转换。
四、跨平台与大数据量方案要点
-
跨平台检查与 RMAN Convert Database(同字节序场景)
- 检查平台支持与字节序:
sqlplus / as sysdba SQL> select platform_id, platform_name, endian_format from v$transportable_platform where platform_name in ('Linux x86 64-bit','AIX-Based Systems (64-bit)'); - 源库只读并做可传输性检查:
SQL> startup mount SQL> alter database open read only; SQL> set serveroutput on SQL> declare b boolean; begin b:=dbms_tdb.check_db('Linux x86 64-bit',dbms_tdb.skip_none); end; / SQL> declare e boolean; begin e:=dbms_tdb.check_external; end; / - RMAN 生成转换脚本与数据文件(在源库执行):
rman target / RMAN> convert database new database 'NEWDB' transport script '/tmp/transport.sql' to platform 'Linux x86 64-bit' db_file_name_convert '/u01/oradata/src','/tmp/xtts'; - 将转换后的数据文件与控制脚本拷贝至目标端,编辑脚本中的路径与参数后执行建库脚本。
- 检查平台支持与字节序:
-
XTTS 跨平台传输表空间(适合 TB 级,支持增量)
- 核心思路:将表空间置为只读,导出元数据;在目标端创建与转换数据文件;通过增量备份追平增量;最后导入元数据并校验。
- 适用场景:跨平台/跨字节序、停机窗口极短、数据量大;但流程与参数较多,需严格按步骤执行与回放增量。
五、迁移前后关键检查与最佳实践
- 兼容性核对
- 版本与补丁:尽量保持源/目标版本一致;跨版本导入时关注不兼容特性与升级脚本。
- 字符集与 NLS:字符集建议保持一致;如必须变更,先做全量评估与转换验证。
- 平台与字节序:跨平台前查询 V$TRANSPORTABLE_PLATFORM;字节序不同需 RMAN 转换或采用 XTTS。
- 对象与权限
- 预建必要的表空间、用户、角色、目录对象;确保导入用户对目录具备 READ/WRITE 权限。
- 导入时合理使用 remap_schema/remap_tablespace/table_exists_action 处理对象冲突与重映射。
- 网络与传输
- 大文件传输建议使用 scp -C(压缩)或分片/断点续传;确保链路稳定与带宽充足。
- 备份与回退
- 迁移前做好全量备份与必要的逻辑/物理回退方案;迁移窗口内保留源库只读或同步链路。
- 校验与性能
- 迁移后核对:数据量、对象数量、约束/索引/触发器有效性、无效对象、统计信息;抽样对比关键业务数据。
- 按需收集统计信息并做性能基线对比与调优。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux上Oracle数据库如何迁移
本文地址: https://pptw.com/jishu/775597.html
