环境信息
| 项目 | 配置说明 |
|---|---|
| 操作系统 | CentOS 7.9 (Kernel 3.10+) |
| Oracle版本 | Oracle 19c (19.3.0) |
| 数据库实例 | orcl |
| 主机IP | 192.168.1.100 |
| 监听端口 | 1521 |
| 示例用户 | test_user/test_password |
| 示例表空间 | USERS |
| 示例表 | EMPLOYEES (ID, NAME, DEPT) |
| 数据目录 | /u01/app/oracle/dump |
一、exp/imp工具参数详解
1. exp(导出)核心参数
| 参数 | 说明 | 示例值 |
|---|---|---|
USERID |
用户名/密码 | test_user/test_password |
BUFFER |
数据缓冲区大小(字节) | 10240000 |
FILE |
输出文件路径 | /u01/app/oracle/dump/exp_full.dmp |
FULL |
全库导出(需特权用户) | Y |
OWNER |
按用户导出 | test_user |
TABLES |
按表导出(支持通配符%) | EMPLOYEES, DEPARTMENTS |
ROWS |
是否导出数据行 | Y (默认) / N |
COMPRESS |
压缩区分配(Y=合并碎片) | Y |
DIRECT |
直接路径导出(绕过SQL层,提升性能) | Y |
LOG |
日志文件路径 | /u01/app/oracle/dump/exp.log |
QUERY |
条件导出数据 | "WHERE DEPT='IT'" |
CONSISTENT |
一致性导出(事务级一致) | Y |
| 特殊场景参数 | ||
TABLESPACES |
按表空间导出 | USERS, INDEXES |
PARFILE |
参数文件路径 | exp.par |
2. imp(导入)核心参数
| 参数 | 说明 | 示例值 |
|---|---|---|
USERID |
用户名/密码 | test_user/test_password |
BUFFER |
数据缓冲区大小 | 10240000 |
FILE |
导入文件路径 | /u01/app/oracle/dump/exp_full.dmp |
FULL |
全库导入 | Y |
FROMUSER |
源用户(导出文件中的用户) | test_user |
TOUSER |
目标用户(导入到新用户) | new_user |
TABLES |
按表导入 | EMPLOYEES |
IGNORE |
忽略创建错误(继续导入数据) | Y |
INDEXES |
是否导入索引 | Y (默认) |
COMMIT |
每批数据提交(避免大事务回滚段不足) | Y |
LOG |
日志文件路径 | /u01/app/oracle/dump/imp.log |
| 特殊场景参数 | ||
DESTROY |
覆盖数据文件(慎用!) | Y |
SHOW |
仅显示导入内容(不执行) | Y |
二、操作前准备
1. 创建数据目录
mkdir -p /u01/app/oracle/dump
chown oracle:oinstall /u01/app/oracle/dump
chmod 775 /u01/app/oracle/dump
2. 配置示例数据
-- 使用sqlplus连接数据库
sqlplus system/your_password@//192.168.1.100:1521/orcl
-- 创建测试用户
CREATE USER test_user IDENTIFIED BY test_password
DEFAULT TABLESPACE USERS
QUOTA UNLIMITED ON USERS;
GRANT CONNECT, RESOURCE TO test_user;
-- 创建示例表
CONNECT test_user/test_password@//192.168.1.100:1521/orcl
CREATE TABLE EMPLOYEES (
ID NUMBER PRIMARY KEY,
NAME VARCHAR2(50),
DEPT VARCHAR2(20)
);
-- 插入示例数据
INSERT INTO EMPLOYEES VALUES (1, 'Alice', 'HR');
INSERT INTO EMPLOYEES VALUES (2, 'Bob', 'IT');
COMMIT;
三、exp导出操作实战
场景1:全用户导出
exp USERID=test_user/test_password@192.168.1.100:1521/orcl \
OWNER=test_user \
FILE=/u01/app/oracle/dump/exp_user.dmp \
LOG=/u01/app/oracle/dump/exp_user.log \
BUFFER=10240000 \
DIRECT=Y
场景2:单表导出(带条件)
exp USERID=test_user/test_password@192.168.1.100:1521/orcl \
TABLES=EMPLOYEES \
FILE=/u01/app/oracle/dump/exp_emp.dmp \
QUERY=\"WHERE DEPT=\'IT\'\" \
LOG=/u01/app/oracle/dump/exp_emp.log
场景3:全库导出(需SYSDBA权限)
exp USERID=\"sys/sys_password as sysdba\"@192.168.1.100:1521/orcl \
FULL=Y \
FILE=/u01/app/oracle/dump/exp_full.dmp \
LOG=/u01/app/oracle/dump/exp_full.log
四、imp导入操作实战
场景1:全用户导入(原用户恢复)
imp USERID=test_user/test_password@192.168.1.100:1521/orcl \
FILE=/u01/app/oracle/dump/exp_user.dmp \
LOG=/u01/app/oracle/dump/imp_user.log \
IGNORE=Y \
COMMIT=Y
场景2:跨用户导入(test_user → new_user)
-- 先创建目标用户
CREATE USER new_user IDENTIFIED BY new_password
DEFAULT TABLESPACE USERS;
GRANT CONNECT, RESOURCE TO new_user;
imp USERID=system/manager@192.168.1.100:1521/orcl \
FILE=/u01/app/oracle/dump/exp_user.dmp \
FROMUSER=test_user \
TOUSER=new_user \
LOG=/u01/app/oracle/dump/imp_cross_user.log
场景3:单表导入
imp USERID=test_user/test_password@192.168.1.100:1521/orcl \
TABLES=EMPLOYEES \
FILE=/u01/app/oracle/dump/exp_emp.dmp \
IGNORE=Y \
LOG=/u01/app/oracle/dump/imp_emp.log
五、高级场景处理
1. 大表拆分导出(使用FILESIZE)
exp USERID=test_user/test_password@192.168.1.100:1521/orcl \
TABLES=LARGE_TABLE \
FILE=/u01/app/oracle/dump/exp_large_%U.dmp \
FILESIZE=2G \
LOG=/u01/app/oracle/dump/exp_large.log
2. 元数据导入(仅结构)
imp USERID=test_user/test_password@192.168.1.100:1521/orcl \
FILE=/u01/app/oracle/dump/exp_user.dmp \
SHOW=Y \
ROWS=N \
LOG=/u01/app/oracle/dump/imp_metadata.log
3. 网络直接导入(不落地文件)
# 导出端
exp USERID=test_user/test_password@source_db FILE= - | \
# 导入端
imp USERID=test_user/test_password@target_db FILE= -
六、错误处理与验证
常见错误解决
IMP-00058: 遇到ORACLE错误 1435
-- 执行重建回滚段 ALTER ROLLBACK SEGMENT "_SYSSMU1$" OFFLINE; DROP ROLLBACK SEGMENT "_SYSSMU1$";EXP-00091: 导出统计信息失败
# 在导出命令中添加参数 exp ... STATISTICS=NONE
数据验证步骤
-- 检查对象计数
SELECT COUNT(*) FROM DBA_OBJECTS WHERE OWNER='TEST_USER';
-- 验证数据完整性
SELECT * FROM TEST_USER.EMPLOYEES;
七、关键注意事项
版本兼容性
- 低版本exp导出文件可导入高版本数据库(如11g→19c)
- 高版本导出需用相同或更高版本imp导入(使用
VERSION参数降级)
字符集一致性
-- 检查数据库字符集 SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';性能优化
- 导出:使用
DIRECT=Y和RECORDLENGTH=65535 - 导入:设置
COMMIT=Y和BUFFER=10485760
- 导出:使用
空间监控
-- 监控表空间使用率 SELECT TABLESPACE_NAME, USED_PERCENT FROM DBA_TABLESPACE_USAGE_METRICS;
附:参数文件示例(exp.par)
USERID=test_user/test_password@192.168.1.100:1521/orcl TABLES=EMPLOYEES, DEPARTMENTS FILE=/u01/app/oracle/dump/exp_tables.dmp LOG=/u01/app/oracle/dump/exp_tables.log DIRECT=Y COMPRESS=Y执行命令:
exp parfile=exp.par
文档修订记录
| 版本 | 日期 | 修改说明 |
|---|---|---|
| V1.0 | 2023-10-15 | 初稿 |
| V1.1 | 2023-10-20 | 增加大表拆分导出场景 |
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




