温馨提示×

如何在 Ubuntu 上迁移 Oracle 数据库

小樊
47
2025-10-10 07:57:15
栏目: 云计算

在Ubuntu上迁移Oracle数据库的常用方法

一、准备工作

在开始迁移前,需完成以下关键步骤以避免数据丢失或操作失败:

  1. 备份数据:使用RMAN工具对源数据库进行完整备份(包括数据文件、归档日志、控制文件),确保备份文件可恢复。
  2. 环境检查:确认源数据库与Ubuntu目标服务器的Oracle版本兼容(如11g→12c、19c→21c);检查字符集(如AL32UTF8)、endianness(源与目标需一致,否则需用RMAN转换)是否匹配。
  3. 安装Oracle客户端工具:在Ubuntu目标服务器上安装Oracle Instant Client和Data Pump工具(oracle-instantclient-basicoracle-instantclient-sqlplusoracle-instantclient-data-pump),确保sqlplusexpdpimpdp命令可用。
  4. 创建必要目录:在Ubuntu目标服务器上创建用于存放导出文件(如/u01/app/oracle/dumpfiles)和逻辑目录的路径,赋予Oracle用户(如oracle)读写权限。

二、使用Oracle Data Pump迁移(推荐,适用于10g及以上版本)

Data Pump是Oracle提供的高效数据迁移工具,支持并行处理、增量迁移和对象级过滤,适用于大多数场景。

1. 源数据库操作(导出数据)

  • 创建逻辑目录:使用SYSDBA权限登录源数据库,创建逻辑目录并关联物理路径(如/u01/app/oracle/tmpdir)。
    sqlplus / as sysdba
    SQL> CREATE OR REPLACE DIRECTORY TMP_DIR AS '/u01/app/oracle/tmpdir';
    SQL> GRANT READ, WRITE ON DIRECTORY TMP_DIR TO your_user; -- 授权给迁移用户
    
  • 导出数据:使用expdp命令导出指定schema或表数据,生成.dmp文件。
    expdp your_user/your_password@source_db schemas=your_schema directory=TMP_DIR dumpfile=export_20251010.dmp logfile=expdp_export.log
    
  • 传输文件到目标服务器:使用scp命令将.dmp文件复制到Ubuntu目标服务器的对应目录(如/u01/app/oracle/dumpfiles)。
    scp -P 22 your_user@source_ip:/u01/app/oracle/tmpdir/export_20251010.dmp /u01/app/oracle/dumpfiles/
    

2. 目标数据库操作(导入数据)

  • 创建逻辑目录:在目标数据库中创建与源数据库相同的逻辑目录,关联目标物理路径。
    sqlplus / as sysdba
    SQL> CREATE OR REPLACE DIRECTORY TMP_DIR AS '/u01/app/oracle/dumpfiles';
    SQL> GRANT READ, WRITE ON DIRECTORY TMP_DIR TO your_user;
    
  • 导入数据:使用impdp命令导入.dmp文件,可通过REMAP_TABLESPACE调整表空间映射(如源数据库的USERS表空间映射到目标数据库的APP_DATA)。
    impdp your_user/your_password@target_db schemas=your_schema directory=TMP_DIR dumpfile=export_20251010.dmp logfile=impdp_import.log remap_tablespace=USERS:APP_DATA
    

3. 注意事项

  • 若迁移过程中出现“ORA-39002: invalid operation”错误,需检查逻辑目录权限和物理路径是否存在。
  • 对于大数据量迁移,可添加PARALLEL=4参数提升导入速度(如impdp ... parallel=4)。

三、使用RMAN(Recovery Manager)迁移(适用于实例级迁移)

RMAN适用于需要迁移整个数据库实例(包括数据文件、控制文件、归档日志)的场景,尤其适合跨平台或版本升级。

1. 源数据库操作(准备备份)

  • 将数据库置为只读模式:确保数据一致性。
    sqlplus / as sysdba
    SQL> SHUTDOWN IMMEDIATE;
    SQL> STARTUP MOUNT;
    SQL> ALTER DATABASE OPEN READ ONLY;
    
  • 备份数据库:使用RMAN备份所有数据文件、归档日志和控制文件到本地目录。
    rman target /
    RMAN> BACKUP DATABASE PLUS ARCHIVELOG FORMAT '/u01/app/oracle/backup/%U';
    RMAN> BACKUP CURRENT CONTROLFILE FORMAT '/u01/app/oracle/backup/controlfile.bak';
    RMAN> EXIT;
    

2. 传输文件到目标服务器

使用scp命令将备份文件复制到Ubuntu目标服务器的对应目录(如/u01/app/oracle/backup)。

scp -P 22 your_user@source_ip:/u01/app/oracle/backup/* /u01/app/oracle/backup/

3. 目标数据库操作(恢复数据)

  • 创建必要的目录结构:在目标服务器上创建数据文件、控制文件的目标路径(如/u01/app/oracle/oradata/target_db)。
  • 恢复控制文件:使用RMAN恢复控制文件。
    rman target /
    RMAN> RESTORE CONTROLFILE FROM '/u01/app/oracle/backup/controlfile.bak';
    RMAN> ALTER DATABASE MOUNT;
    
  • 恢复数据库:使用RMAN恢复数据文件和归档日志。
    RMAN> RESTORE DATABASE;
    RMAN> RECOVER DATABASE;
    
  • 打开数据库:若源与目标平台endianness一致,直接打开数据库;若不一致,需用CONVERT DATABASE转换(需提前生成转换脚本)。
    SQL> ALTER DATABASE OPEN;
    

4. 注意事项

  • RMAN迁移要求源与目标数据库版本兼容(如11g→12c需满足12c兼容性设置)。
  • 若endianness不一致,需在源数据库生成转换脚本(CONVERT DATABASE TRANSPORT SCRIPT),并在目标服务器执行该脚本。

四、使用传统EXP/IMP工具迁移(适用于小规模数据或旧版本)

EXP/IMP是Oracle的传统迁移工具,适用于10g以下版本或小数据量场景,效率低于Data Pump。

1. 源数据库操作(导出数据)

使用exp命令导出数据,生成.dmp文件。

exp your_user/your_password@source_db file=/u01/app/oracle/tmpdir/export_20251010.dmp log=exp_export.log owner=your_schema

2. 传输文件到目标服务器

使用scp命令将.dmp文件复制到Ubuntu目标服务器的对应目录(如/u01/app/oracle/dumpfiles)。

3. 目标数据库操作(导入数据)

使用imp命令导入数据,可通过IGNORE=Y忽略创建错误(如表已存在)。

imp your_user/your_password@target_db file=/u01/app/oracle/dumpfiles/export_20251010.dmp log=imp_import.log fromuser=your_schema touser=your_schema ignore=y

4. 注意事项

  • EXP/IMP不支持并行处理,大数据量迁移耗时较长。
  • 导入前需确保目标数据库中已创建对应的表空间(可通过impINDEXFILE参数生成建表脚本,修改表空间后再导入)。

五、使用第三方工具迁移(如Navicat)

Navicat是一款图形化数据库管理工具,支持Oracle数据库迁移,操作简便,适合不熟悉命令行的用户。

1. 准备工作

  • 在Ubuntu目标服务器上安装Navicat for Oracle,并配置目标数据库连接。
  • 确保源数据库允许远程连接(开启监听、配置TNSNAMES.ORA)。

2. 迁移步骤

  • 打开Navicat,点击“工具”→“数据同步”,选择“Oracle→Oracle”。
  • 配置源数据库和目标数据库连接信息(如主机、端口、用户名、密码)。
  • 选择要迁移的表、视图、存储过程等对象,点击“开始”执行迁移。
  • 迁移完成后,Navicat会生成迁移报告,提示成功/失败的对象。

3. 注意事项

  • 第三方工具可能需要付费,且部分高级功能需订阅。
  • 迁移前需测试工具兼容性(如Navicat是否支持源/目标Oracle版本)。

六、迁移后验证

迁移完成后,需进行以下验证以确保数据一致性:

  1. 数据完整性检查:对比源与目标数据库的表行数、关键字段值(如使用SELECT COUNT(*) FROM table_name)。
  2. 对象完整性检查:确认目标数据库中是否存在源数据库的所有表、索引、视图、存储过程(可通过DBA_OBJECTS视图查询)。
  3. 应用连接测试:修改应用程序的数据库连接字符串(如JDBC URL、Oracle客户端tnsnames.ora),测试应用是否能正常访问目标数据库。
  4. 性能测试:检查目标数据库的性能(如查询响应时间、并发处理能力),确保满足业务需求。

0