命令行导出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查看导出内容,确保数据无遗漏。
文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/386330.html<
