在Linux环境下,Oracle数据库的exp(Export)命令是数据导出工具,用于将数据库对象(如表、索引、存储过程等)或用户数据导出为二进制文件(通常为.dmp格式),常用于数据迁移、备份或开发环境数据初始化,该命令属于Oracle客户端工具(如oracle-xe或full client),需配置好环境变量(如ORACLE_HOME、ORACLE_SID)后方可使用,以下是exp命令的详细用法及注意事项。

exp命令基础语法
exp命令的基本语法结构如下:
exp username/password@connect_string options
username/password:数据库用户名及密码(如system/manager)。connect_string:数据库连接标识(如orcl为tnsnames.ora中配置的服务名)。options:导出参数,控制导出范围、格式等。
常用参数详解
导出范围控制
| 参数 | 说明 | 示例 |
|---|---|---|
full=y |
全库导出(需DBA权限) | exp system/manager@orcl full=y |
owner=username |
导出指定用户的所有对象 | exp scott/tiger@orcl owner=scott |
tables=table1,table2 |
导出指定表 | exp scott/tiger@orcl tables=emp,dept |
query="WHERE deptno=10" |
条件导出(需配合tables) |
exp scott/tiger@orcl tables=emp query=\"WHERE sal>3000\" |
与格式
| 参数 | 说明 | 示例 |
|---|---|---|
rows=y/n |
是否导出数据(默认y) |
exp scott/tiger@orcl tables=emp rows=n(仅导出表结构) |
consistent=y |
导出期间保持数据一致性(适用于大表) | exp system/manager@orcl full=y consistent=y |
file=filename.dmp |
指定导出文件路径 | exp scott/tiger@orcl file=/backup/scott.dmp |
filesize=500m |
分卷导出(单文件最大500MB) | exp system/manager@orcl full=y filesize=500m |
compress=y |
压缩导出数据(减少.dmp文件大小) | exp scott/tiger@orcl compress=y |
高级选项
| 参数 | 说明 | 示例 |
|---|---|---|
grants=y |
导出权限与角色 | exp scott/tiger@orcl grants=y |
indexes=y |
导出索引(默认y) |
exp scott/tiger@orcl indexes=n(不导出索引) |
direct=y |
直接路径导出(跳过SQL层,提高速度) | exp scott/tiger@orcl tables=emp direct=y |
log=logfile.log |
生成导出日志文件 | exp scott/tiger@orcl log=/backup/exp.log |
实际操作示例
示例1:导出用户scott的所有表及数据
exp scott/tiger@orcl owner=scott file=/backup/scott.dmp log=/backup/scott.log
示例2:分卷导出全库(DBA权限)
exp system/manager@orcl full=y filesize=2g file=/backup/full_db_%U.dmp
(生成full_db_01.dmp、full_db_02.dmp等文件)
示例3:条件导出emp表中薪资大于5000的记录
exp scott/tiger@orcl tables=emp query=\"WHERE sal>5000\" file=/backup/high_salary.dmp
注意事项
-
权限要求:
full=y需DBA权限;owner=参数需拥有该用户的EXP_FULL_DATABASE角色。- 普通用户默认可导出自己的表,但导出其他用户对象需授权。
-
字符集兼容性:
(图片来源网络,侵删)- 导出与导入的数据库字符集需一致,否则可能出现乱码,可通过
exp help=y查看当前字符集。
- 导出与导入的数据库字符集需一致,否则可能出现乱码,可通过
-
性能优化:
- 大表导出建议使用
direct=y(需表为堆表且无LOB/类型列)或consistent=y避免读不一致。 - 在非业务高峰期执行,减少对生产库影响。
- 大表导出建议使用
-
文件存储:
.dmp文件存储在Linux服务器本地,需确保目标目录有足够空间且用户有写权限。
-
版本兼容性:
- 高版本数据库导出的
.dmp文件可导入低版本(如11g→10g),但反之需使用expdp或兼容性参数。
- 高版本数据库导出的
相关问答FAQs
Q1: exp命令导出时提示“not connected”如何解决?
A: 通常因网络或环境变量配置错误,检查:

tnsnames.ora文件中connect_string是否正确配置;ORACLE_HOME和ORACLE_SID是否设置(可通过echo $ORACLE_HOME验证);- 监听器是否启动(
lsnrctl status查看)。
Q2: 如何验证导出的.dmp文件是否完整?
A: 可通过以下方式验证:
- 查看日志文件(
log=参数指定)确认无报错; - 使用
impdp命令的sqlfile选项仅生成建表语句,检查对象数量是否一致:impdp scott/tiger@orcl file=scott.dmp sqlfile=/tmp/test.sql
- 若数据量小,可尝试部分导入测试(如
impdp tables=emp)。
掌握exp命令的参数组合与场景应用,可有效提升Oracle数据迁移与备份效率,同时需结合业务需求选择合适的导出策略,确保数据完整性与安全性。
