使用expdp+rsync同步 400G Oracle11g数据

一、方案概述

针对 400G 数据的 Oracle 11g 同步,采用 expdp 全量导出 + rsync 增量同步的方式,具体流程如下:

  1. 主库使用 expdp 执行全量导出

  2. 通过 rsync 传输到备库

  3. 备库使用 impdp 导入数据

  4. 定期通过归档日志实现增量同步

前提准备:

1、备库要提前创建好主库所拥有的用户

二、详细操作步骤

1. 主库全量导出 (expdp)

# 创建导出目录
mkdir -p /nfsData/backup
sqlplus / as sysdba <

参数说明

  • filesize=30G:每个文件最大30G,避免单个文件过大

  • parallel=4:使用4个并行进程加速导出

  • compression=all:压缩导出数据减少传输量

2. 传输到备库 (rsync)

# 首次全量传输(建议在低峰期执行)
rsync -avzP --compress-level=9 -e "ssh -c aes256-ctr"  /nfsData/backup/full_*.dmp \
  [email protected]:/u01/backup/

# 传输完成后校验
md5sum /nfsData/backup/full_*.dmp > checksum.md5
scp checksum.md5 oracle@standby-server:/u01/backup/
ssh oracle@standby-server "cd /u01/backup && md5sum -c checksum.md5"

优化参数

  • --compress-level=9:最大压缩比

  • -c aes256-ctr:使用高效加密算法减少CPU开销

3. 备库全量导入 (impdp)

# 备库创建导入目录

sqlplus / as sysdba <

4. 增量同步方案

方案A:基于归档日志的增量同步

# 主库定期生成归档日志
sqlplus / as sysdba <
方案B:基于expdp的增量导出
# 主库执行增量导出
expdp system/password \
  directory=EXPORT_DIR \
  dumpfile=incr_%U.dmp \
  content=data_only \
  tablespaces=USERS,INDEX_TS \
  logfile=expdp_incr.log

# 增量传输
rsync -avzP /nfsData/backup/incr_*.dmp oracle@standby-server:/u01/backup/

# 备库增量导入
impdp system/password \
  directory=IMPORT_DIR \
  dumpfile=incr_%U.dmp \
  table_exists_action=append

三、自动化脚本示例

1. 主库同步脚本 (sync_primary.sh)

#!/bin/bash
# 全量导出周日全量
if [ $(date +%u) -eq 7 ]; then
  expdp system/password \
    directory=EXPORT_DIR \
    dumpfile=full_%U.dmp \
    filesize=50G \
    full=y \
    parallel=4
fi

# 每日增量归档日志同步
rsync -avz --remove-source-files \
  /nfsData/archivelog/*.arc \
  oracle@standby-server:/u01/archivelog/

# 触发备库应用日志
ssh oracle@standby-server "/u01/apply_archivelog.sh"
 
  

2. 备库应用脚本 (apply_archivelog.sh)

#!/bin/bash
sqlplus / as sysdba <

四、性能优化建议

  1. 网络优化

    • 使用 -z 参数启用压缩传输

    • 考虑使用 --bwlimit 限制带宽占用(如 --bwlimit=20M

  2. 导出/导入优化

    • 增加 parallel 参数值(建议=CPU核心数×2)

    • 使用 compression=all 减少传输量

  3. 空间管理

    • 定期清理旧备份:find /nfsData/backup -name "*.dmp" -mtime +7 -delete

    • 监控备库空间:df -h /oracle

五、预估时间参考

步骤 400G数据预估时间 (30Mbps带宽)
全量导出 4-6小时 (依赖I/O性能)
全量传输 36-48小时
全量导入 6-8小时
增量同步 每次1-2小时

六、注意事项

  1. 字符集一致性:确保主备库字符集相同

  2. 版本兼容性:主备库Oracle版本需一致

  3. 空间监控:备库需有1.5倍原数据大小的空间

  4. 日志清理:定期清理已应用的归档日志

此方案适合对实时性要求不高(可接受天级延迟)的环境,如需更实时同步,建议考虑Oracle GoldenGate或Data Guard方案。

你可能感兴趣的:(运维工作,oracle,数据库)