Oracle数据泵常用命令

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

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

2.directory相关SQL语句

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

3.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

4.以导出一个用户为例

##并行导出:
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

5.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文件的版本。

6.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
  1. 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\)

8.以导入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

9.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. 交互模式
进入交互可以操作导入导出作业。
进入交互模式的方法:
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 写入指定的文件。

11

12

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容