菜鸟科技网

命令行如何导出Oracle数据库?

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

命令行如何导出Oracle数据库?-图1
(图片来源网络,侵删)

使用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:直接路径导出,提高性能(适用于大表)。

示例:

  1. 导出整个数据库:

    exp system/manager@orcl full=y file=full_db.dmp log=full_db.log
  2. 导出特定用户的表:

    命令行如何导出Oracle数据库?-图2
    (图片来源网络,侵删)
    scott/tiger@orcl owner=scott file=scott_tables.dmp log=scott.log
  3. 导出特定表:

    scott/tiger@orcl tables=(emp,dept) file=emp_dept.dmp log=emp_dept.log

注意事项:

  • exp工具在导出大数据量时性能较差,且不支持并行导出。
  • 仅支持EXPEXPRESS两种导出模式,功能有限。
  • 导出文件格式为.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 压缩级别(ALLDATA_ONLYMETADATA_ONLY)。
exclude/include 排除或包含特定对象(如exclude=table:"like 'TMP%'")。

操作步骤:

  1. 创建目录并授权

    CREATE DIRECTORY exp_dir AS '/u01/dump';
    GRANT READ, WRITE ON DIRECTORY exp_dir TO scott;
  2. 导出整个数据库

    命令行如何导出Oracle数据库?-图3
    (图片来源网络,侵删)
    expdp system/manager@orcl full=y directory=exp_dir dumpfile=full_db_%U.dmp parallel=4 logfile=full_db.log
  3. 导出特定用户

    expdp system/manager@orcl schemas=scott directory=exp_dir dumpfile=scott.dmp logfile=scott.log
  4. 导出特定表并压缩

    expdp scott/tiger@orcl tables=emp directory=exp_dir dumpfile=emp.dmp compression=all logfile=emp.log
  5. 排除特定表

    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),无需生成中间文件。

常见问题与解决方案

  1. 权限不足

    • 错误:ORA-39002: invalid operation
    • 解决:确保用户有EXP_FULL_DATABASE角色权限,或使用sys/system用户操作。
  2. 目录路径无效

    • 错误:ORA-39002: invalid operationORA-27054: NFS file path is not mounted
    • 解决:检查目录对象是否存在,且Oracle服务器有读写权限。
  3. 导出中断

    • 解决:可通过expdp ... attach=job_name重新连接任务,或使用kill_job终止任务。

相关问答FAQs

Q1: expexpdp如何选择?
A1: 对于小型数据库或简单导出,exp足够且兼容旧版本;对于大型数据库或需高性能、并行导出场景,推荐使用expdp,其功能更强大且效率更高。

Q2: 如何验证导出文件的完整性?
A2: 可通过impdp工具的sqlfile参数仅导入元数据并检查日志,或使用file=expdp ... show=y查看导出内容,确保数据无遗漏。

分享:
扫描分享到社交APP
上一篇
下一篇