CentOS 下使用 SQL*Plus 的 Oracle 数据库迁移步骤
一 方案总览与准备
- 迁移方式选型
- 逻辑迁移:使用 Data Pump(expdp/impdp) 或传统 exp/imp,适合跨版本、跨平台、只迁部分用户/表等场景。
- 物理迁移:使用 RMAN 做全库备份恢复,适合同平台/相近版本、需要最小停机时间的场景。
- 持续同步:使用 GoldenGate/OGG 做在线迁移与双活过渡。
- 环境准备
- 源端与目标端均安装 Oracle 数据库 与网络连通(监听端口一般为 1521)。
- 准备存放 DMP 文件的目录,并在数据库中创建 DIRECTORY 对象(expdp/impdp 依赖该对象)。
- 核对两端 版本、字符集、NLS、时区、表空间/用户配额 等兼容性。
- 全量备份源库,明确回滚方案与停机窗口。
二 逻辑迁移步骤(expdp/impdp,推荐)
- 源库准备
- 以管理员登录:sqlplus / as sysdba
- 创建目录对象并授权(示例目录:/u01/dump):
- CREATE OR REPLACE DIRECTORY dump_dir AS ‘/u01/dump’;
- GRANT READ, WRITE ON DIRECTORY dump_dir TO 迁移用户;
- 按需导出(示例按用户导出):
- expdp 用户名/密码@//主机:端口/服务名 SCHEMAS=用户名 DIRECTORY=dump_dir DUMPFILE=export.dmp LOGFILE=export.log PARALLEL=2
- 传输文件
- scp /u01/dump/export.dmp 目标主机:/u01/dump/
- 目标库准备
- 创建同名用户与表空间(如不存在),并授予配额:
- CREATE TABLESPACE tbs_data DATAFILE ‘/u01/app/oracle/oradata/ORCL/tbs_data01.dbf’ SIZE 500M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED;
- CREATE USER 用户名 IDENTIFIED BY 密码 DEFAULT TABLESPACE tbs_data;
- GRANT CONNECT, RESOURCE TO 用户名;
- ALTER USER 用户名 QUOTA UNLIMITED ON tbs_data;
- 如跨版本/跨平台,导入时可用 REMAP_SCHEMA、REMAP_TABLESPACE、TRANSFORM 等参数适配对象与存储。
- 目标库导入
- 以管理员登录:sqlplus / as sysdba
- 确认目录对象存在并授权,执行导入:
- impdp 用户名/密码@//主机:端口/服务名 DIRECTORY=dump_dir DUMPFILE=export.dmp LOGFILE=import.log REMAP_SCHEMA=源用户:目标用户 REMAP_TABLESPACE=源表空间:目标表空间
- 校验
- 对比行数、主键/唯一约束、索引/视图/存储过程有效性、无效对象数量等。
三 逻辑迁移步骤(exp/imp,传统方式)
- 源库导出(在操作系统命令行执行,非 sqlplus 内)
- 按用户:exp 用户名/密码@//主机:端口/服务名 file=export.dmp log=export.log owner=用户名
- 按表:exp 用户名/密码@//主机:端口/服务名 file=export.dmp log=export.log tables=(T1,T2)
- 全库:exp 用户名/密码@//主机:端口/服务名 file=export.dmp log=export.log full=y
- 传输文件
- scp export.dmp 目标主机:/u01/dump/
- 目标库导入(操作系统命令行执行)
- 按用户:imp 用户名/密码@//主机:端口/服务名 file=export.dmp log=import.log fromuser=源用户 touser=目标用户
- 按表:imp 用户名/密码@//主机:端口/服务名 file=export.dmp log=import.log tables=(T1,T2) ignore=y
- 校验
四 物理迁移步骤(RMAN,适合同平台/相近版本)
- 源库备份
- rman target /
- RUN {
ALLOCATE CHANNEL c1 DEVICE TYPE DISK FORMAT ‘/u01/backup/%T_%U’;
BACKUP DATABASE PLUS ARCHIVELOG;
BACKUP CURRENT CONTROLFILE FORMAT ‘/u01/backup/%T_CTL_%U’;
BACKUP SPFILE FORMAT ‘/u01/backup/%T_SPFILE_%U’;
RELEASE CHANNEL c1;
}
- 目标库恢复
- 安装同版本 Oracle 软件,创建必要目录(如 adump、bdump、cdump、udump、FRA 等)。
- 将备份文件拷贝至目标端相同路径(或使用 RMAN CATALOG 注册备份)。
- 启动到 NOMOUNT,恢复 SPFILE 与控制文件,再 MOUNT 恢复数据文件,最后 OPEN RESETLOGS。
- 如数据文件路径变化,使用 DB_FILE_NAME_CONVERT/LOG_FILE_NAME_CONVERT 参数或 SET NEWNAME 进行转换。
五 校验与常见问题
- 校验清单
- 数据量:对比源/目标关键表的 COUNT(*)、SUM() 等聚合值。
- 约束与索引:检查主键/外键/唯一约束、索引状态(VALID/UNUSABLE)。
- 对象:统计 INVALID 对象(视图/存储过程/包/触发器),必要时重编译。
- 权限与配额:目标用户权限、默认表空间与配额是否正确。
- 应用连通:应用端回归测试,确认连接串、字符集与时区行为正常。
- 常见问题与要点
- 字符集与 NLS:两端字符集不一致可能导致乱码或导入失败,优先统一字符集与 NLS 设置。
- 目录对象与权限:expdp/impdp 必须使用数据库 DIRECTORY 对象,且用户需有读写权限;DMP 文件与目录权限需一致。
- 版本差异:高版本导出向低版本导入可能受限,必要时使用 Data Pump 的版本参数或中间版本过渡。
- 表空间与配额:目标端需提前创建表空间并为用户授予配额,避免导入时报 ORA-01950。
- 大对象与并行:LOB/大表建议增加 PARALLEL、合理设置 BUFFER/FILESIZE,提升导入效率。