Linux Oracle如何进行数据迁移与同步
导读:Linux Oracle 数据迁移与同步实操指南 一、常用方案与适用场景 Data Pump(expdp/impdp):适合同构或异构环境的全库/按用户/按表空间/按表迁移,支持跨字符集与版本升级/降级(受限制),可在停机窗口内完成,也可...
Linux Oracle 数据迁移与同步实操指南
一、常用方案与适用场景
- Data Pump(expdp/impdp):适合同构或异构环境的全库/按用户/按表空间/按表迁移,支持跨字符集与版本升级/降级(受限制),可在停机窗口内完成,也可做增量导入与网络导入。
- RMAN 备份恢复/克隆:适合同平台的整库迁移/克隆,停机时间短,支持增量备份与块级恢复,对大库效率高。
- RMAN Convert Database 跨平台整库迁移:仅当源/目标平台**字节序一致(Endian 相同)**时可用,能生成可在目标平台直接打开的数据库脚本与文件。
- 传输表空间(TTS):适合跨平台/跨版本迁移部分表空间或按业务分库,要求表空间集自包含,必要时做平台转换。
- GoldenGate(OGG):面向异构/同构的实时/准实时同步与零停机/低停机迁移,可做Oracle→Oracle或Oracle→MySQL/Kafka等链路。
- SQL*Loader:适合批量文件(CSV/定界)导入,常用于补数/小表或非 Oracle 源数据落地。
以上方法在 Linux 环境下均可用,选择时优先考虑停机窗口、数据量、平台差异与是否需要持续同步。
二、Data Pump 迁移步骤(逻辑迁移)
- 源库准备
- 创建目录对象并赋权:
SQL> create or replace directory tmpDir as ‘/tempFile’; - 导出(示例按 schema):
$ expdp user/pass@//ip:port/service schemas=dbTest directory=tmpDir dumpfile=export.dmp logfile=export.log - 传输 DMP 文件到目标库:
$ scp -P 2222 /tempFile/export.dmp user@target:/home/tempFile
- 创建目录对象并赋权:
- 目标库导入
- 创建同名目录对象:
SQL> create or replace directory tmpDir as ‘/tempFile’; - 导入(示例按 schema):
$ impdp user/pass@//ip:port/service schemas=dbTest directory=tmpDir dumpfile=export.dmp logfile=import.log job_name=myjob
- 创建同名目录对象:
- 常用增强
- 只迁移结构:CONTENT=METADATA_ONLY;只迁移数据:CONTENT=DATA_ONLY
- 重映射:REMAP_SCHEMA、REMAP_TABLESPACE、REMAP_DATAFILE
- 网络导入(免落地):impdp 使用 NETWORK_LINK 直连源库
- 增量导入:先导入全量,再用 INCREMENTAL=YES 的 Data Pump 增量导入(配合源库增量导出)
以上命令与流程适用于 Linux 上的 Oracle 实例,注意目录对象与 OS 目录权限一致。
三、RMAN 迁移与克隆(物理迁移)
- 同平台整库迁移/克隆(停机短)
- 源库全备(含归档):
$ rman target /
RMAN> backup database plus archivelog; - 将备份集拷贝到目标库相同/映射目录
- 目标库启动到 NOMOUNT,恢复 SPFILE/控制文件,再恢复数据文件:
RMAN> startup nomount;
RMAN> restore spfile to pfile ‘/tmp/init.ora’;
(按需编辑 pfile,设置 DB_FILE_NAME_CONVERT/LOG_FILE_NAME_CONVERT)
RMAN> restore controlfile from ‘/backup/ctl.bkp’;
RMAN> alter database mount;
RMAN> restore database;
RMAN> recover database;
RMAN> alter database open resetlogs;
- 源库全备(含归档):
- 跨平台整库 Convert Database(仅同字节序)
- 检查平台与字节序:
SQL> select platform_name, endian_format from v$transportable_platform where platform_id=(select platform_id from v$database); - 只读打开并校验可迁移性:
SQL> startup mount; alter database open read only;
SQL> set serveroutput on
SQL> DECLARE b BOOLEAN; BEGIN b := DBMS_TDB.CHECK_DB(‘目标平台名’, DBMS_TDB.SKIP_NONE); END; / - RMAN 执行转换并生成目标端脚本:
$ rman target /
RMAN> CONVERT DATABASE NEW DATABASE ‘newdb’ TO PLATFORM ‘目标平台名’ FORMAT ‘/tmp/%U’; - 将生成文件拷贝到目标机,按提示执行 crdb.sql 打开数据库。
以上流程覆盖同平台 RMAN 克隆与跨平台 Convert Database 的关键步骤与前提条件。
- 检查平台与字节序:
四、传输表空间 TTS 与 GoldenGate 实时同步
- 传输表空间(TTS,适合部分业务迁移/跨平台)
- 检查平台与字节序(见上一节)
- 检查表空间集自包含:
SQL> exec DBMS_TTS.TRANSPORT_SET_CHECK(‘TS1,TS2’, TRUE);
SQL> select * from TRANSPORT_SET_VIOLATIONS; (无行则通过) - 源库将表空间置只读并导出元数据:
SQL> alter tablespace ts1 read only; alter tablespace ts2 read only;
$ expdp system/pass directory=tran transport_tablespaces=ts1,ts2 transport_datafiles=‘/u01/oradata/ts1.dbf,/u01/oradata/ts2.dbf’ logfile=tts_exp.log - 目标库导入元数据并转换数据文件(如跨字节序需用 RMAN 执行 CONVERT DATAFILE):
$ impdp system/pass directory=tran transport_datafiles=‘/u01/oradata/ts1.dbf,/u01/oradata/ts2.dbf’ remap_schema=src:dst logfile=tts_imp.log - 目标库将表空间置读写:
SQL> alter tablespace ts1 read write; alter tablespace ts2 read write;
- GoldenGate 实时同步(零停机/低停机)
- 源库准备:启用归档日志、打开补充日志、创建 OGG 用户并赋权(如 11.2.0.4+ 设置 ENABLE_GOLDENGATE_REPLICATION=true),建议 RAC 节点NTP 时钟同步。
- 安装 OGG for Oracle,配置 Extract/Pump/Replicat;常见链路:
- Oracle→Oracle:Extract 捕获 Redo/Archive,Pump 传 Trail,Replicat 在目标端入库;
- Oracle→MySQL/Kafka:Replicat 使用相应 Handler(如 Kafka Handler)写入目标。
- 启动进程并校验:
GGSCI> start extract ext1
GGSCI> start replicat rep1
(Kafka 链路可用控制台消费者校验消息落库/落主题)
TTS 适合“按业务分库/按表空间迁移”,OGG 适合“持续同步/双写到新库后切换”。
五、迁移前检查清单与最佳实践
- 兼容性:核对 Oracle 版本、平台 Endian、字符集(NLS_CHARACTERSET/NLS_NCHAR_CHARACTERSET)、时间时区(TIME_ZONE);跨字符集/跨版本迁移需评估转换影响。
- 容量与路径:目标库规划 表空间/数据文件 与 存储路径,RMAN 场景预设 DB_FILE_NAME_CONVERT/LOG_FILE_NAME_CONVERT。
- 一致性校验:迁移前后对比 数据量、对象数、约束/索引、统计信息;必要时使用 DBMS_COMPARISON 或业务侧校验。
- 备份与回退:迁移全程保留可回退方案(源库备份、快照、OGG 回切配置)。
- 性能与窗口:大表/大索引建议并行与分批,在低峰时段执行,避免长事务与锁争用。
- 网络与权限:确保 scp/rsync 带宽与稳定性,目录对象与 OS 权限一致,OGG 用户具备必要权限。
这些要点可显著降低迁移风险并提升成功率与效率。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux Oracle如何进行数据迁移与同步
本文地址: https://pptw.com/jishu/753411.html
