温馨提示×

centos oracle数据库迁移步骤

小樊
35
2025-12-31 03:51:35
栏目: 云计算

CentOS 上 Oracle 数据库迁移步骤

一 迁移方案选型

  • 同平台同版本、停机窗口充足:优先使用脱机文件级拷贝(拷贝数据文件、控制文件、参数文件、日志文件等),停机最短、可控性强。适合从一台 CentOS 迁移到另一台 CentOS,版本如 11g/12c
  • 同平台或跨平台、需尽量缩短停机:使用 RMAN Transportable Tablespaces/TTS(可配合增量,适合大数据量、停机窗口小)。
  • 跨平台且需一次性整体迁移:使用 RMAN Convert Database(要求字节序一致;跨字节序需借助 Data Pump 或 XTTS)。
  • 应用兼容性好、停机窗口较充裕:使用 Data Pump(expdp/impdp) 按用户/表空间/全库迁移,灵活但导入时间较长。
  • 大数据量、跨平台、停机极短:使用 XTTS(Cross-Platform Transportable Tablespaces) 多轮增量滚动迁移,再短暂停机切换。

二 方案对比一览

方案 停机窗口 适用场景 关键要点
脱机文件拷贝 最短(拷贝期间停库) 同平台同版本、硬件更换 拷贝数据文件、控制文件、参数文件、日志文件;注意目录结构与权限
RMAN TTS 小(导出元数据+传输数据文件) 同/跨平台、大数据量 表空间置为只读;导出元数据;传输数据文件;导入元数据并上线
RMAN Convert DB 小(只读+转换) 跨平台、字节序一致 只读检查;RMAN 转换;目标端执行脚本重建控制文件并打开
Data Pump 中-长(全量导入) 版本兼容、灵活迁移 创建目录对象;expdp/impdp;可并行、可按对象粒度迁移
XTTS 很短(多轮增量+短切换) 跨平台、超大数据量 多轮增量同步;最后增量+元数据导入;短暂停机切换

三 同平台同版本脱机文件级迁移步骤(停机最短)

  • 准备与评估
    • 记录源库关键参数:实例名/SID、字符集、数据文件/日志文件路径、表空间清单、用户与权限、监听器配置。
    • 在目标 CentOS 安装同版本 Oracle,创建相同目录结构(如 /u01/app/oracle/oradata/SID/u01/app/oracle/admin/SID/adump 等),创建 oracle 用户与组并配置环境变量。
  • 停库与一致性
    • 源库执行:SQL> shutdown immediate(必要时 abort 后恢复一致性)。
  • 文件拷贝
    • 拷贝以下目录与文件到目标库相同路径(保持属主与权限一致):
      • 数据文件目录:/u01/app/oracle/oradata/SID/
      • 参数与密码文件:$ORACLE_HOME/dbs/(含 spfileSID.ora/initSID.oraorapwSID
      • 审计与诊断:/u01/app/oracle/admin/SID/adump
      • 备份目录(如有):/u01/app/oracle/fast_recovery_area/SID/
    • 可使用 rsync/scp 批量传输,示例:rsync -avz /u01/app/oracle/oradata/SID/ target:/u01/app/oracle/oradata/SID/
  • 目标库启动与恢复
    • 若拷贝了联机日志,可能因源库未完全关闭导致恢复提示,按提示对相应数据文件执行介质恢复(必要时使用 RMAN 或 SQL> recover datafile <file#>)。
    • 启动到 mount,再 open:SQL> startup mount; SQL> alter database open;
  • 验证
    • 检查告警日志、数据文件/日志状态、用户对象可用性、监听与连接。必要时重建 tnsnames.oralistener.ora

四 使用 Data Pump 迁移步骤(灵活、跨小版本友好)

  • 源库准备
    • 创建目录对象并授权:
      SQL> create directory dumpdir as ‘/data/oracle/dump’;
      SQL> grant read,write on directory dumpdir to system;
    • 全库或按对象导出(示例为全库):
      $ expdp system/oracle@orcl directory=dumpdir dumpfile=full_$(date +%F).dmp logfile=full_$(date +%F).log full=y
  • 传输转储文件
    • $ scp /data/oracle/dump/full_*.dmp target:/data/oracle/dump/
  • 目标库准备
    • 创建相同目录对象并授权;按需创建表空间与用户(若目标库无对应对象,Data Pump 可自动创建部分对象,但建议显式准备以保证路径与配额正确)。
  • 目标库导入
    • 全库导入(覆盖已存在对象可用 IGNORE=Y):
      $ impdp system/oracle@orcl directory=dumpdir dumpfile=full_2025-12-31.dmp logfile=imp_2025-12-31.log full=y ignore=y
    • 按用户/表空间导入(示例):
      $ impdp system/oracle@orcl directory=dumpdir dumpfile=user01.dmp logfile=imp_user01.log schemas=user01
  • 校验
    • 校验对象数量、数据量、无效对象、约束与索引状态、应用连接。

五 跨平台迁移与注意事项

  • RMAN Convert Database(同字节序平台)
    • 源库只读并检查可传输性:
      SQL> startup mount; SQL> alter database open read only;
      SQL> SET SERVEROUTPUT ON;
      SQL> DECLARE b BOOLEAN; BEGIN b := DBMS_TDB.CHECK_DB(‘目标平台名’); END; /
    • RMAN 转换(示例在源端转换):
      $ rman target /
      RMAN> CONVERT DATABASE NEW DATABASE ‘newdb’
      TO PLATFORM ‘Microsoft Windows IA (32-bit)’
      FORMAT ‘/tmp/%U’;
    • 将生成的转换脚本与数据文件传至目标端,目标端执行脚本创建并打开数据库(必要时先 nomount 再执行脚本)。
  • 字节序与平台支持
    • 查询支持平台与字节序:
      SQL> select platform_name, endian_format from v$transportable_platform;
    • 不同字节序通常不能直接 Convert Database,可结合 Data PumpXTTS 实现迁移。
  • 系统环境关键点(CentOS)
    • 内核参数与资源限制(示例):
      • sysctl.conf:kernel.shmall / kernel.shmmax / kernel.shmmni / kernel.sem / net.ipv4.ip_local_port_range
      • limits.conf:oracle soft/hard nproc / nofile / stack
    • 共享内存 /dev/shm 过小会导致实例启动失败,需在 /etc/fstab 中调整 size 并重新挂载(如:tmpfs /dev/shm tmpfs defaults,size=31G 0 0)。
  • 常见排错
    • 导入时报“表已存在”:使用 IGNORE=Y 或先清理目标对象。
    • 启动报恢复或数据文件不一致:对相应数据文件执行 RECOVER DATAFILE
    • 监听/连接文件(如 tnsnames.ora、listener.ora)路径或内容不一致:同步并测试 tnsping

0