在 Linux 环境下迁移 Oracle 数据库数据,常见场景和对应方法如下,你可以根据实际需求选择。
适用:用户级、表级、 schema 级迁移
expdp system/password \
DIRECTORY=dp_dir \
DUMPFILE=expdp_full.dmp \
LOGFILE=expdp.log \
SCHEMAS=scott
创建目录对象:
CREATE DIRECTORY dp_dir AS '/u01/dump';
GRANT READ, WRITE ON DIRECTORY dp_dir TO system;
scp expdp_full.dmp oracle@目标IP:/u01/dump/
impdp system/password \
DIRECTORY=dp_dir \
DUMPFILE=expdp_full.dmp \
LOGFILE=impdp.log \
REMAP_SCHEMA=scott:scott_new
✅ 优点:稳定、可控、支持并行
❌ 缺点:不支持裸文件系统、需目录权限
适用:整机 / 全库迁移
rman target /
BACKUP DATABASE PLUS ARCHIVELOG;
rman target /
RESTORE DATABASE;
RECOVER DATABASE;
✅ 优点:最完整
❌ 缺点:复杂、版本需一致
适用:测试库、可停机
sqlplus / as sysdba
SHUTDOWN IMMEDIATE
cp -r /u01/oradata /目标目录
cp $ORACLE_HOME/dbs /目标目录
✅ 简单
❌ 必须停机
INSERT INTO table_new
SELECT * FROM table_old@dblink;
✅ 灵活
❌ 慢、不适合大表
适用:生产环境、零停机
SELECT * FROM dba_objects WHERE status='INVALID';
@?/rdbms/admin/utlrp.sql
检查用户、表空间、权限是否一致。
| 场景 | 推荐方式 |
|---|---|
| 整个库 | RMAN |
| 用户/表 | EXPDP/IMPDP |
| 测试库 | 冷备 |
| 生产零停机 | DataGuard / OGG |
如果你能告诉我:
我可以给你 具体命令模板。