史上最全Oracle数据泵常用命令

导读:expdp和impdp是oracle数据库之间移动数据的工具,本文简单总结了数据泵的常用命令,希望对大家有帮助。

前言

expdp和impdp是oracle数据库之间移动数据的工具。expdp和impdp只能在数据库服务端使用,不能在客户端使用。本文简单总结了expdp和impdp常用的命令,详细信息参考oracle官方文档Utilities。


directory相关SQL语句:

select * from dba_directories;create directory my_dir as '/home/oracle/tmp';grant read,write on directory my_dir to scott;

EXPDP导出

注意:
1、导数的数据库用户需要拥有对directory_object的读写权限。
2、操作系统中需要已经存在directory_object指定的路径。
3、oracle用户拥有对directory_object指定路径的读写权限。
4、system用户导出用户,会将创建用户和授予系统权限的元数据也导出,普通用户不能导出这些元数据。

expdp命令示例

##导出一张表,例:
expdp system/oracle directory=my_dir dumpfile=expdp.dmp   logfile=expdp.log tables=scott.emp
##导出多张表,例:
expdp system/oracle directory=my_dir dumpfile=expdp.dmp   logfile=expdp.log tables=\(scott.emp,scott.dept\)
##导出一个用户(导出这个用户的所有对象),例:
expdp system/oracle directory=my_dir dumpfile=expdp.dmp   logfile=expdp.log schemas=scott
##导出多个用户,例:
expdp system/oracle directory=my_dir dumpfile=expdp.dmp   logfile=expdp.log schemas=\(scott,hr\)
##导出整个数据库(sys、ordsys、mdsys的用户数据不会被导出)例:
expdp system/oracle directory=my_dir dumpfile=expdp.dmp   logfile=expdp.log full=yes

以导出一个用户为例

##并行导出:
expdp system/oracle directory=my_dir dumpfile=expdp%U.dmp logfile=expdp.log schemas=scott parallel=5
##导出用户元数据(包含表定义、存储过程、函数等等):
expdp system/oracle directory=my_dir dumpfile=expdp.dmp   logfile=expdp.log schemas=scott content=metadata_only
##导出用户存储过程,例:
expdp system/oracle directory=my_dir dumpfile=expdp.dmp   logfile=expdp.log schemas=scott include=procedure
##导出用户函数和视图,例:
expdp system/oracle directory=my_dir dumpfile=expdp.dmp   logfile=expdp.log schemas=scott include=\(function,view\)
##导出一个用户,但不包括索引,例:
expdp system/oracle directory=my_dir dumpfile=expdp.dmp   logfile=expdp.log schemas=scott exclude=index

expdp参数说明:

attach=[schema_name.]job_name
说明:nodefault。连接到作业,进入交互模式。
导出模式,以下五个参数互斥。
full=[yes|no]
说明:nodefault。导出所有数据和元数据。要执行完全导出,需要具有datapump_exp_full_database角色。
schemas=schema_name[,...]
说明:default current user's schema。导出用户。
tables=[schema_name.]table_name[:partition_name][,...]
说明:nodefault。导出表。
tablespaces=tablespace_name[,...]
说明:nodefault。导出表空间。
transport_tablespaces=tablespace_name[,...]
说明:nodefault。导出可移动表空间。
过滤条件,以下三个参数互斥:
query=[schema.][table_name:] query_clause
说明:nodefault。按查询条件导出。
exclude=object_type[:name_clause][,...]
说明:nodefault。排除特定的对象类型。
include=object_type[:name_clause][,...]
说明:nodefault。包括特定的对象类型。
其他参数:
directory=directory_object
说明:default:data_pump_dir。导出路径。
dumpfile=[directory_object:]file_name[,...]
说明:default:expdat.dmp。导出的文件名。
logfile=[directory_object:]file_name
说明:default:export.log。导出的日志文件名。
content=[all|data_only|metadata_only]
说明:default:all。指定要导出的数据。
parallel=integer
说明:default:1。并行度,该值应小于等于dmp文件数量,或可以为'dumpfile='使用替换变量'%U'。
         RAC环境中,并行度大于1时,注意目录应该为共享目录。
compression=[all|data_only|metadata_only|none]
说明:default:metadata_only。压缩。
parfile=[directory_path]file_name
说明:nodefault。指定导出参数文件名称。
network_link=source_database_link
说明:nodefault。连接到源数据库进行导出。
filesize=integer[b|kb|mb|gb|tb]
说明:default:0不限制大小。指定每个dmp文件的最大大小。
      如果此参数小于将要导出的数据大小,将报错ORA-39095。
job_name=jobname_string
说明:default:system-generated name of the form SYS_EXPORT_<mode>_NN。指定job名称。
version=[compatilble|latest|version_string]
说明:default:compatible。默认兼容模式,可以指定导出dmp文件的版本。

IMPDP导入

注意:
1、expdp导出的文件不能使用imp导入,只能通过impdp导入数据库。
2、导入时遇到已存在的对象,默认会跳过这个对象,继续导入其他对象。
3、导入时应确认dmp文件和目标数据库的tablespace、schema是否对应。
4、导入dmp文件时,应确定dmp文件导出时的命令,以便顺利导入数据。
拿到一个dmp文件,如果忘记了导出命令,可以通过以下方法确认(非官方,生产数据勿使用):确认dmp文件是exp导出还是expdp导出 1)xxd test.dmp | more

expdp导出的文件开头为0301,exp导出的文件开头为0303

2)strings  test.dmp | more

expdp导出的dmp文件头信息:
"SYS"."SYS_EXPORT_TABLE_01"  -----job名称
x86_64/Linux 2.4.xx   -----操作系统版本
bjdb  -----数据库名称
ZHS16GBK  -----数据库字符集
11.02.00.04.00  -----数据库版本
exp导出的dmp文件头信息:
iEXPORT:V11.02.00  -----版本
USCOTT  -----用户
RTABLES  -----对象
确认expdp导出的dmp文件的导出命令
strings test.dmp | grep CLIENT_COMMAND

impdp命令示例

##导入dmp文件中的所有数据,例:
impdp system/oracle directory=my_dir dumpfile=expdp.dmp   logfile=impdp.log full=yes
##导入一张表,例:
impdp system/oracle directory=my_dir dumpfile=expdp.dmp   logfile=impdp.log tables=scott.emp
##导入多张表,例:
impdp system/oracle directory=my_dir dumpfile=expdp.dmp   logfile=impdp.log tables=\(scott.emp,scott.dept\)
##导入一个用户,例:
impdp system/oracle directory=my_dir dumpfile=expdp.dmp   logfile=impdp.log schemas=scott
##导入多个用户,例:
impdp system/oracle directory=my_dir dumpfile=expdp.dmp   logfile=impdp.log schemas=\(scott,hr\)

以导入dmp文件中的所有数据为例

##并行导入:
impdp system/oracle directory=my_dir dumpfile=expdp%U.dmp logfile=impdp.log parallel=5
##导入元数据(包含表定义、存储过程、函数等等):
impdp system/oracle directory=my_dir dumpfile=expdp.dmp   logfile=impdp.log content=metadata_only
##导入存储过程,例:
impdp system/oracle directory=my_dir dumpfile=expdp.dmp   logfile=impdp.log include=procedure
##导入函数和视图,例:
impdp system/oracle directory=my_dir dumpfile=expdp.dmp   logfile=impdp.log include=\(function,view\)
##导入数据,但不包括索引,例:
impdp system/oracle directory=my_dir dumpfile=expdp.dmp   logfile=impdp.log exclude=index
##重命名表名导入,例:
impdp system/oracle directory=my_dir dumpfile=expdp.dmp   logfile=impdp.log remap_table=scott.emp:emp1
##重命名schema名导入,例:	
impdp system/oracle directory=my_dir dumpfile=expdp.dmp   logfile=impdp.log remap_schema=scott:tim
##重命名表空间名导入,例:
impdp system/oracle directory=my_dir dumpfile=expdp.dmp   logfile=impdp.log remap_tablespace=users:apptbs
##导入时,忽略所有对象的段属性,这样导入时对象都创建在目标数据库用户默认的表空间上。
impdp system/oracle directory=my_dir dumpfile=expdp.dmp   logfile=impdp.log transform=segment_attributes:n
##将dmp文件的ddl语句导入到一个文件,不导入数据库,例:
impdp system/oracle directory=my_dir dumpfile=expdp.dmp   logfile=impdp.log sqlfile=import.sql

impdp参数说明

attach=[schema_name.]job_name
说明:nodefault。连接到作业,进入交互模式。
导入模式,以下五个参数互斥。
full=[yes|no]
说明:default:yes。导入dmp文件的所有数据和元数据。
schemas=schema_name[,...]
说明:nodefault。导入用户。
tables=[schema_name.]table_name[:partition_name][,...]
说明:nodefault。导入表。
tablespaces=tablespace_name[,...]
说明:nodefault。导入表空间。
transport_tablespaces=tablespace_name[,...]
说明:nodefault。导入可移动表空间。
过滤条件,以下三个参数互斥:
query=[schema.][table_name:] query_clause
说明:nodefault。按查询条件导入。
exclude=object_type[:name_clause][,...]
说明:nodefault。排除特定的对象类型。
include=object_type[:name_clause][,...]
说明:nodefault。包括特定的对象类型。
其他参数:
directory=directory_object
说明:default:data_pump_dir。导入路径。
dumpfile=[directory_object:]file_name[,...]
说明:default:expdat.dmp。导入的文件名。
logfile=[directory_object:]file_name
说明:default:export.log。导入的日志文件名。
content=[all|data_only|metadata_only]
说明:default:all。指定要导入的数据。
parallel=integer
说明:default:1。并行度,该值应小于等于dmp文件数量,或可以为'dumpfile='使用替换变量'%U'。
compression=[all|data_only|metadata_only|none]
说明:default:metadata_only。压缩。
parfile=[directory_path]file_name
说明:nodefault。指定导入参数文件名称。
network_link=source_database_link
说明:nodefault。连接到源数据库进行导入。
job_name=jobname_string
说明:default:system-generated name of the form SYS_EXPORT_<mode>_NN。指定job名称。
version=[compatilble|latest|version_string]
说明:default:compatible。默认兼容模式,可以指定导入dmp文件的版本。
REMAP_TABLE=[schema.]old_tablename[.partition]:new_tablename
说明:nodefault。允许导入期间重命名表名。
REMAP_SCHEMA=source_schema:target_schema
说明:nodefault。允许导入期间重命名schema名。
REMAP_TABLESPACE=source_tablespace:target_tablespace
说明:nodefault。允许导入期间重命名表空间名。
TRANSFORM = transform_name:value[:object_type]
说明:nodefault。允许改正正在导入的对象的DDL。
SQLFILE=[directory_object:]file_name
说明:nodefault。根据其他参数,将所有的 SQL DDL 写入指定的文件。
TABLE_EXISTS_ACTION=[SKIP | APPEND | TRUNCATE | REPLACE]
说明:default:skip(if content=data_only is specified,then the default is append)

交互模式

进入交互可以操作导入导出作业。进入交互模式的方法:
1、导入导出命令行执行期间按Ctrl + c
2、expdp attach=jobname或impdp attach=jobnam 查看导入导出日志可以看到jobname,也可以通过查询dba_datapump_jobs找到jobname。

报错总结

系统目录未建立,报错:

ORA-39002: invalid operation
ORA-39070: Unable to open the log file.
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 536
ORA-29283: invalid file operation
impdp导入exp导出的dmp文件,报错:
ORA-39000: bad dump file specification
ORA-39143: dump file "/u01/20161031/bjh02.dmp" may be an original export dump file

impdp导入exp导出的dmp文件,报错:

ORA-39000: bad dump file specification
ORA-39143: dump file "/u01/20161031/bjh02.dmp" may be an original export dump file

如果导出的数据库版本比导入的数据版本高,需要在导出时加上参数version=要导入的数据库版本。否则报错:

ORA-39001: invalid argument value
ORA-39000: bad dump file specification
ORA-31640: unable to open dump file "/home/oracle/EXPDP20161024_1.DMP" for read
ORA-27037: unable to obtain file status

文末再附加一条导出用户元数据的sqlfile命令,这个是之前一个朋友问我的,因为之前做的db2的工作,最近才开始和oracle打交道,数据泵了解的很少,所以被问到这块的时候犹豫了片刻,第一个想到的自然是使用oracle自带的数据泵工具expdp:

expdp system/oracle schemas=scott directory=my_dir dumpfile=scott.dmp logfile=scott.log content=metadata_only

但是问题来了,朋友要的是sqlfile不是dumpfile,经过百度得知可以通过plsql developer工具把元数据导出成sqlfile的形式,但是导出的sqlfile还是不符合朋友的需求,后经指点得知,在导出元数据之后,只需要在导入的时候加上sqlfile参数,就可以生成sqlfile文件,具体命令如下:

impdp system/oracle directory=my_dir schemas=scott dumpfile=scott.dmp logfile=scott_imp.log sqlfile=scott.sql

impdp工具里对sqlfile的描述如下

[oracle@Yukki tmp]$ impdp -help
SQLFILE
Write all the SQL DDL to a specified file.

将所有的 SQL DDL 写入指定的文件。
出处:墨天轮(https://www.modb.pro/db/7847,复制到网页中打开或者点击“阅读原文”)

Image placeholder
SD
未设置
  61人点赞

没有讨论,发表一下自己的看法吧

推荐文章
历史上最著名计算机病毒,似乎都成了我们的回忆

Windows勒索病毒似乎让全球计算机用户都闻风丧胆,不过这其实真的不算什么。然而令人始料不及的是,即便勒索病毒传遍了100多个国家,也仅仅才收获了5万美金。所以说勒索病毒真的不算啥。历史上比勒索病毒

史上最快AI计算机发布!谷歌TPU V3的1/5功耗、1/30体积,首台实体机已交付

大数据文摘作品还记得8月份占据各家科技头条的有史以来最大芯片吗?这个名为CerebrasWaferScaleEngine(WSE)的“巨无霸”面积达到42225平方毫米,拥有1.2万亿个晶体管,400

我的天!这是史上最烂的项目:苦撑12年,600多万行代码…

编译:欧剃来源:projectfailures.wordpress.com转载自:Java技术栈你见过最烂的项目,撑了多长时间才完蛋?六个月?一年?今天介绍的这个奇葩项目,不但一开始就烂得透透的,还硬

Oracle数据库不同损坏级别的恢复详解

墨墨导读:在DBA的日常工作中不可避免存在着数据库的损坏,本文将主要介绍Oracle数据库遇到不同损坏级别下的应该采用的恢复方法,供读者在遇到此类情景时,能的找到适合自己的恢复方法,提高工作效率。数据

OOW2019 :Oracle数据管理技术创新盘点

Oracle作为传统关系型数据库的霸主,不管是数据库性能还是商业上,一直以来都是全球各大数据库厂商致力追赶的对象。近年来,全球云数据库市场迅速发展,Gartner预测,到2023年,世界上四分之三的数

数据基础设施重定义 华为AI-Native数据库全球发布

2019年5月15日,华为公司在北京面向全球发布了人工智能原生(AI-Native)数据库GaussDB和分布式存储FusionStorage8.0。发布会上,华为常务董事、ICT战略与Marketi

Git 常用命令

1、已经推送push过的文件,想在以后的提交时忽略此文件,即使本地已经修改过,而且不删除Git远程库中相应文件,后面的Xml/config.xml是要忽略的文件的路径,执行命令: gitupdate-

NPM 常用命令

源: 设置加速源:npmconfigsetregistry=:{uri}可选源:https://registry.npm.taobao.org, 配置: 设置:npmconfigset[--gl

redis的常用命令

1,redis安装2,redis的基本指令:3,redis的存储结构之list4,redis的存储结构之Set5,redis的存储结构之zset6,redis的存储结构之hash7,redis的远程访

OceanBase数据库创始人阳振坤分享征战6088万tpmC的艰辛之路

前言:中国人民大学常被誉为是“中国人文社会科学的最高学府”,其实人民大学也是“中国数据库的发源地”。由中国人民大学教授萨师煊与王珊合作编写的《数据库系统概论》是国内第一部系统阐明数据库原理、技术和理论

史上第一张黑洞照片是用Python合成的?

这两天,史上第一张黑洞照片,在朋友圈和各大公众号疯传,希望你没有收到视觉中国的律师函。好了,言归正传。这个照片是怎么「拍到」的呢?其中一位研究人员(一个妹子,MIT 的博士,就是头图这位)就在 TED

史上规模最大的中文知识图谱以及估值两个亿的 AI 核心代码

——大声告诉我,怎样才能可以让你变得更强?——充钱——???——都什么玩意?还有啥子咧?——充更多钱执迷不悟,无可救药了。所以,正确答案应该是什么呢?答:是知识。反正,说这些就是为了切入「知识」这个话

Leetcode上最南的是哪道题?

大家伙想要找份好工作,刷题是一道绕不过的坎,Leetcode大家都很熟悉了,很多公司面试的时候会用上面的原题,今天我们就来看看这Leetcode上的题!首先依然通过利索的爬虫获取了Leetcode官网

Redis通用命令

Redis的通用命令有:keys172.0.0.1:6379>settest1hello 127.0.0.1:6379>settest2world 127.0.0.1:6379>keys*test*

连续4年 华为依然是“高交会”上最靓的仔

2019年11月13-17日,由科技部、国家发改委等10个部委和深圳市人民政府共同举办的2019中国国际高新技术成果交易会(高交会)在深圳举办。这是华为连续第4年参加高交会智慧城市展览,不仅如此,华为

Stack Overflow 上最火的一个问题:什么是 NullPointerException

在逛StackOverflow的时候,发现最火的问题竟然是:什么是NullPointerException(java.lang.NullPointerException),它是由什么原因导致的,有没有

Oracle 之利用BBED修改数据块SCN—-没有备份数据文件的数据恢复

测试环境 OS:redhat6.6 oracle:12.1.0.2  BBED(OracleBlockBrowerandEDitorTool),用来直接查看和修改数据文件数据的一个工具,是Orac

MongoDB初学者最常用的10个命令

1.登录mongodb 以下命令可以用于登录mongodb数据库,但是需要保证用户你声明的数据库中存在对应的用户和密码 mongo--host--port-u-p--authenticationDat

Oracle ADW业务数据平台点亮DTCC2019数据库技术大会!

数字大脑、互联网+、智能+、人工智能、边缘计算……信息技术领域好像从不缺少概念,但无论世界如何变化,数据是一切业务的核心。要想有效管理、分析和挖掘数据带来的价值,数据库一定是必需品。2019年5月8日

数据库之互联网常用架构方案一览

1.数据库架构原则1.高可用2.高性能3.一致性4.扩展性2.常见的架构方案方案一:主备架构,只有主库提供读写服务,备库冗余作故障转移用jdbc:mysql://vip:3306/xxdb1、高可用分

前端培训-中级阶段(31)- Class 的基本语法、Class 的继承(2019-12-26期)

前端最基础的就是HTML+CSS+Javascript。掌握了这三门技术就算入门,但也仅仅是入门,现在前端开发的定义已经远远不止这些。前端小课堂(HTML/CSS/JS),本着提升技术水平,打牢基础知

Vue命令行工具vue-cli详解

本文将详细介绍Vue命令行工具vue-cli。概述Vue-cli是Vue官方提供的用于初始化Vue项目的脚手架工具。使用Vue-cli有以下几大优势1、Vue-cli是一套成熟的vue项目架构设计,会

Jenkins CLI 命令行 v0.0.23

本文首发于:Jenkins中文社区作者:ZhaoXiaojieJenkinsCLI在参加2019年谁是最受欢迎的中国开源软件投票,如果您已经是JenkinsCLI的用户,请点击下面的链接帮忙投上一票。

17 万条人脸数据遭公开售卖;什么值得买辟谣删库跑路新闻;Oracle 修改 JDK 下载要求

苹果发布iPhone11,游戏和电视订阅服务每月4.99美元 苹果在周二的新闻发布会上发布了iPhone11、iPhone11Pro和iPhone11ProMax三款智能手机,9月13日开放预购,9月

Oracle加大 ADW推广力度,让数据创造更多可能性

在数据库领域,Oracle的一举一动牵动着无数人的神经,不管是本地数据库,还是在云端的弹性扩展能力,Oracle的产品都是企业工作负载平台的最佳选择。安全、简单、敏捷、所见即所得,已经成为Oracle