百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

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

moboyou 2025-03-04 11:23 35 浏览

导读: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__NN。指定job名称。
version=[compatilble|latest|version_string]
说明:default:compatible。默认兼容模式,可以指定导出dmp文件的版本。


活动预告

2019 数据技术嘉年华,数据英雄聚京华 - 诚邀论道

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__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

如果导出的数据库版本比导入的数据版本高,需要在导出时加上参数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 写入指定的文件。

活动预告:2019数据技术嘉年华于2019年11月15日-16日在北京举办,扫描下方二维码了解详情,欢迎大家携好友一同参会!

相关推荐

高效有趣学Excel:从入门到精通的全面教程分享

在当今这个数据驱动的时代,掌握Excel不仅是提升工作效率的利器,更是职场竞争中的一项重要技能。今天,我非常高兴地与大家分享一套全面的Excel学习教程——《高效有趣学Excel:轻松入门到精通》,这...

Excel新函数重磅来袭!告别复杂公式,效率提升200%!

“透视表终于不用点来点去了?”昨晚刷到这条留言,顺手把新表扔进365,一行=GROUPBY(部门,产品,销售额,SUM)回车,三秒出汇总,刷新按钮直接失业。那一刻,办公室空调声都显得多余。有人还在录宏...

Excel 效率神器:LET 函数入门教程,让复杂公式变简单

您是否曾经编写过又长又复杂的Excel公式,然后没过几天自己都看不懂了?或者,同一个计算在公式里重复写了无数次,不仅容易出错,修改起来更是噩梦?Excel推出的LET函数就是来解决这些痛点...

Excel多对多查询函数新手教程:从案例到实操

一、为啥要学多对多查询?举个例子你就懂!假设你是公司HR,手里有张员工技能表(如下),现在需要快速找出:"张三"会哪些技能?"Excel"技能有哪些人掌握?员工姓名...

14、VBA代码+excel内置函数,实现高效数据处理(零基础入门)

1、学习VBA的主要目的是数据处理,VBA在数据处理上展现出强大的计算实力。它不仅完美继承EXCEl内置函数的功能,还能通过编程语法实现更灵活的应用。无论是基础的加减乘除,还是复杂的统计分析、逻辑判断...

word和excel零基础学习免费视频教程,赶紧收藏,作者将转付费课

亲爱的朋友们:大家好!本人是全国计算机等级考试二级MSoffice高级应用课程的在校授课老师。本人近段时间打算将wore/excel免费分享给所有有需要的朋友。知识本身无深浅,本人知识也有限,如果讲...

excel函数从入门到精通,5组13个函数,易学易懂易用

对于职场中经常使用Excel的小伙伴们,最希望掌握一些函数公式,毕竟给数据处理带来很多方便,可以提高我们的工作效率。今天分享几组函数公式,适合于初学者,也是职场中经常用到的,下次碰到可以直接套用了。0...

Excel效率神器:LET函数入门教程,让复杂公式变简单

写公式写到想砸电脑?教你用LET把Excel公式从“迷宫”变成“小剧本”,几步看懂又好改很多人都经历过这样的窘境:花了半小时写出一条看似厉害的Excel公式,几天后再看自己都懵了,或者同样...

完全免费的Excel教程大全,适合日常excel办公和技能提升

说明微软官方的excel文档,由于网站在国外,有时打开慢,而且应用层面介绍不够详细;这里介绍一个集齐了excel各种使用方法和说明的网站;网站名称:懒人Excel网站介绍可以看到有基础教程、快捷键、函...

Excel 新函数 LAMBDA 入门级教程_excel365新增函数

LAMBDA函数的出现是Excel历史上的一次革命性飞跃。它允许用户自定义函数,而无需学习VBA等编程语言。这意味着你可以将复杂的、重复的计算逻辑封装成一个简单的、可复用的自定义函数,极大地...

Excel新函数LAMBDA入门级教程_excel新建函数

把复杂公式“变成函数”后,我在Excel上的重复工作少了一半——你也能做到我一直有一个习惯:遇到每天要重复写的复杂公式,就想把它封装起来,像调用内置函数那样去用。说实话,过去没有LAMBDA,这个想法...

Excel DROP 函数全方位教程:从基础入门到高级动态应用

上一篇我们学习了ExcelTAKE函数,今天我们来学习一下和TAKE函数相对应的DROP函数,它是Microsoft365和Excel2021中引入的一个动态数组函数。它的核心功能是从一...

学习Excel公式函数还有官方提供的教程,还是免费的!赶紧试试

首先声明,这不是广告,纯干货分享!除了学习Excel的基本操作之外,很多人都是冲着公式和函数才去找教程买教材的,这个结论应该不会有什么毛病。因为,Excel的公式函数真的很强大!现在的Excel教程可...

什么是保险员常说的“IRR”?让我们一次说明白!

买保险的时候,你是不是常听到销售抛出一些术语,比如“IRR很高哦,收益不错!”?听着挺专业,但“IRR”到底啥意思?想问又不好意思问,别急,它其实是个很简单的概念,咱们今天一次把它说明白。1,IRR...

理财型保险如何选择缴费期?_理财型保险计算方式

选择理财型保险(通常指年金险、增额终身寿险等)的缴费期,并非简单地看哪个年限短或长,而是需要结合自己的财务状况、理财目标和产品特性来综合决定。下面我将为大家详细解析不同缴费期的特点、适用人群和选择策略...