在 Linux 环境下使用 Oracle 导入数据,常见方式有以下几种,按使用频率从高到低说明:
impdp(数据泵导入,推荐 ✅)确保:
.dmp 文件(通常由 expdp 导出)sqlplus / as sysdba
CREATE OR REPLACE DIRECTORY dp_dir AS '/u01/app/oracle/dump';
GRANT READ, WRITE ON DIRECTORY dp_dir TO scott;
把 .dmp 文件放到 /u01/app/oracle/dump
impdp scott/tiger@orcl \
DIRECTORY=dp_dir \
DUMPFILE=scott.dmp \
LOGFILE=imp.log
常用参数:
REMAP_SCHEMA=old_user:new_user
REMAP_TABLESPACE=old_ts:new_ts
TABLE_EXISTS_ACTION=REPLACE
FULL=Y
imp(传统导入,老版本)imp scott/tiger@orcl \
FILE=/u01/app/oracle/dump/scott.dmp \
LOG=/u01/app/oracle/dump/imp.log \
FULL=y
⚠️ 仅用于老系统或 .dmp 是 exp 导出的
load.ctlLOAD DATA
INFILE '/u01/data/test.csv'
INTO TABLE emp
FIELDS TERMINATED BY ','
(empno, ename, sal)
sqlldr scott/tiger control=load.ctl log=load.log
sqlplus scott/tiger @data.sql
适合小数据量或结构初始化。
✅ 权限问题
GRANT IMP_FULL_DATABASE TO scott;
✅ 表空间不存在
CREATE TABLESPACE ts DATAFILE '/u01/oradata/ts01.dbf' SIZE 100M;
✅ 字符集问题
SELECT * FROM nls_database_parameters WHERE PARAMETER LIKE '%CHARACTERSET%';
| 场景 | 推荐方式 |
|---|---|
| 整库/用户迁移 | impdp |
| 老系统 | imp |
| 文本数据 | sqlldr |
| 脚本初始化 | sqlplus |
如果你愿意,可以告诉我:
.dmp / CSV / SQL)我可以给你 精准命令示例。