命令行导出Oracle数据库是数据库管理员和开发人员常用的操作,主要用于数据备份、迁移或跨环境数据同步,Oracle提供了多种命令行工具来实现数据导出,其中最常用的是exp
和expdp
工具。exp
是传统的导出工具,而expdp
是数据泵(Data Pump)技术的新一代工具,具有更高的性能和更丰富的功能,本文将详细介绍如何使用这两个工具导出Oracle数据库,包括基本语法、参数配置、常见场景及注意事项。

使用exp
工具导出数据
exp
是Oracle早期的数据导出工具,基于客户端-服务器模式,适用于小型数据库或简单导出需求,其基本语法如下:
exp username/password@connect_file parameters
username
是数据库用户名,password
是对应密码,connect_file
是数据库连接标识(可以是数据库名或网络服务名),parameters
是导出参数。
常用参数说明:
full=y
:导出整个数据库(需DBA权限)。owner=(user1,user2)
:指定导出特定用户的对象。tables=(table1,table2)
:指定导出特定表。file=dumpfile.dmp
:指定导出文件路径及名称。rows=y
:导出表数据(默认为y
,若设为n
则只导出结构)。log=logfile.log
:指定日志文件路径。direct=y
:直接路径导出,提高性能(适用于大表)。
示例:
-
导出整个数据库:
exp system/manager@orcl full=y file=full_db.dmp log=full_db.log
-
导出特定用户的表:
(图片来源网络,侵删)scott/tiger@orcl owner=scott file=scott_tables.dmp log=scott.log
-
导出特定表:
scott/tiger@orcl tables=(emp,dept) file=emp_dept.dmp log=emp_dept.log
注意事项:
exp
工具在导出大数据量时性能较差,且不支持并行导出。- 仅支持
EXP
和EXPRESS
两种导出模式,功能有限。 - 导出文件格式为
.dmp
,需与imp
工具配合使用。
使用expdp
工具导出数据
expdp
是Oracle数据泵工具,通过DBMS_DATAPUMP
包实现,性能远高于exp
,支持并行导出、网络导出等高级功能,使用expdp
需在服务器端执行,且需创建目录对象(Directory)。
基本语法:
expdp username/password@connect_file directory=directory_name dumpfile=dumpfile.dmp parameters
关键参数说明:
参数 | 说明 |
---|---|
directory |
指定服务器端目录对象(需提前创建并授权)。 |
dumpfile |
导出文件名(可包含通配符,如exp%U.dmp )。 |
logfile |
日志文件名。 |
full |
导出整个数据库(值为y )。 |
schemas |
指定导出的用户模式(如schemas=scott )。 |
tables |
指定导出的表(如tables=emp,dept )。 |
content |
(ALL 默认、DATA_ONLY 仅数据、METADATA_ONLY 仅结构)。 |
parallel |
并行进程数(如parallel=4 )。 |
compression |
压缩级别(ALL 、DATA_ONLY 、METADATA_ONLY )。 |
exclude/include |
排除或包含特定对象(如exclude=table:"like 'TMP%'" )。 |
操作步骤:
-
创建目录并授权:
CREATE DIRECTORY exp_dir AS '/u01/dump'; GRANT READ, WRITE ON DIRECTORY exp_dir TO scott;
-
导出整个数据库:
(图片来源网络,侵删)expdp system/manager@orcl full=y directory=exp_dir dumpfile=full_db_%U.dmp parallel=4 logfile=full_db.log
-
导出特定用户:
expdp system/manager@orcl schemas=scott directory=exp_dir dumpfile=scott.dmp logfile=scott.log
-
导出特定表并压缩:
expdp scott/tiger@orcl tables=emp directory=exp_dir dumpfile=emp.dmp compression=all logfile=emp.log
-
排除特定表:
expdp system/manager@orcl schemas=scott exclude=table:"in ('temp_table','log_table')" directory=exp_dir dumpfile=scott.dmp
注意事项:
expdp
需在Oracle服务器端执行,且依赖ORACLE_HOME
环境变量。- 导出文件默认为二进制格式,不可直接编辑。
- 支持网络导出(如
expdp ... network_link=remote_db
),无需生成中间文件。
常见问题与解决方案
-
权限不足:
- 错误:
ORA-39002: invalid operation
。 - 解决:确保用户有
EXP_FULL_DATABASE
角色权限,或使用sys
/system
用户操作。
- 错误:
-
目录路径无效:
- 错误:
ORA-39002: invalid operation
或ORA-27054: NFS file path is not mounted
。 - 解决:检查目录对象是否存在,且Oracle服务器有读写权限。
- 错误:
-
导出中断:
- 解决:可通过
expdp ... attach=job_name
重新连接任务,或使用kill_job
终止任务。
- 解决:可通过
相关问答FAQs
Q1: exp
和expdp
如何选择?
A1: 对于小型数据库或简单导出,exp
足够且兼容旧版本;对于大型数据库或需高性能、并行导出场景,推荐使用expdp
,其功能更强大且效率更高。
Q2: 如何验证导出文件的完整性?
A2: 可通过impdp
工具的sqlfile
参数仅导入元数据并检查日志,或使用file=expdp ... show=y
查看导出内容,确保数据无遗漏。