导入导出工具exp、imp、expdp、impdp
- 格式:doc
- 大小:54.50 KB
- 文档页数:13
Expdp和Impdp的用法马飞2016-7-18一、概述Oracle官方对此的形容是:OracleDataPump technology enables Very High-Speed movement of data and metadata from one database to another.其中Very High-Speed是亮点。
先说数据泵提供的主要特性(包括,但不限于):1. 支持并行处理导入、导出任务2. 支持暂停和重启动导入、导出任务3. 支持通过Database Link的方式导出或导入远端数据库中的对象4. 支持在导入时通过Remap_schema、Remap_datafile、Remap_tablespace几个参数实现导入过程中自动修改对象属主、数据文件或数据所在表空间。
5. 导入/导出时提供了非常细粒度的对象控制。
通过Include、Exclude两个参数,甚至可以详细制定是否包含或不包含某个对象。
二、什么是Directory对象Directory对象是Oracle10g版本提供的一个新功能。
他是一个指向,指向了操作系统中的一个路径。
每个Directory都包含 Read,Write两个权限,可以通过Grant命令授权给指定的用户或角色。
拥有读写权限的用户就可以读写该Directory对象指定的操作系统路径下的文件。
无论在什么地方使用expdp,生成的文件最终页是在服务器上(Directory指定的位置)三、如何调用1. 命令行方式最简单的调用,但是写的参数有限,建议使用参数文件的方式。
2. 参数文件方式最常用的方式。
通常需要先编写一个参数文件。
指定导出时需要的各种参数。
然后以如下方式调用。
expdp user/pwd parfile=xxx.par这个xxx.par即是我们编辑的参数文件。
注意,在这个命令行后面,同样可以再跟别的参数,甚至是在par参数文件中指定过的参数。
expdpimpdp⽤法详解⼀关于expdp和impdp 使⽤EXPDP和IMPDP时应该注意的事项:EXP和IMP是客户端⼯具程序,它们既可以在客户端使⽤,也可以在服务端使⽤。
EXPDP和IMPDP是服务端的⼯具程序,他们只能在ORACLE服务端使⽤,不能在客户端使⽤。
IMP只适⽤于EXP导出的⽂件,不适⽤于EXPDP导出⽂件;IMPDP只适⽤于EXPDP导出的⽂件,⽽不适⽤于EXP导出⽂件。
expdp或impdp命令时,可暂不指出⽤户名/密码@实例名 as ⾝份,然后根据提⽰再输⼊,如:expdp schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1;⼀、创建逻辑⽬录,该命令不会在操作系统创建真正的⽬录,最好以system等管理员创建。
create directory dpdata1 as 'd:\test\dump';⼆、查看管理理员⽬录(同时查看操作系统是否存在,因为Oracle并不关⼼该⽬录是否存在,如果不存在,则出错)select * from dba_directories;三、给scott⽤户赋予在指定⽬录的操作权限,最好以system等管理员赋予。
grant read,write on directory dpdata1 to scott;四、导出数据1)按⽤户导expdp scott/tiger@orcl schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1;2)并⾏进程parallelexpdp scott/tiger@orcl directory=dpdata1 dumpfile=scott3.dmp parallel=40 job_name=scott33)按表名导expdp scott/tiger@orcl TABLES=emp,dept dumpfile=expdp.dmp DIRECTORY=dpdata1;4)按查询条件导expdp scott/tiger@orcl directory=dpdata1 dumpfile=expdp.dmp Tables=emp query='WHERE deptno=20';5)按表空间导expdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=temp,example;6)导整个数据库expdp system/manager DIRECTORY=dpdata1 DUMPFILE=full.dmp FULL=y;五、还原数据1)导到指定⽤户下impdp scott/tiger DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=scott;2)改变表的ownerimpdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp TABLES=scott.dept REMAP_SCHEMA=scott:system;3)导⼊表空间impdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=example;4)导⼊数据库impdb system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=y;5)追加数据impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=system TABLE_EXISTS_ACTION⼆附加说明并⾏操作(PARALLEL)您可以通过 PARALLEL 参数为导出使⽤⼀个以上的线程来显著地加速作业。
expdp和impdp语句expdp和impdp是Oracle数据库中用于数据泵的导出和导入工具。
它们允许用户将数据和元数据从一个Oracle数据库导出到一个dump文件,然后将该文件导入到另一个Oracle数据库中。
expdp的常用语法如下:复制代码expdp userid=用户名/密码@数据库连接标识文件=数据泵导出文件的路径和名称 logfile=日志文件的路径和名称 dumpfile=dump文件的路径和名称full=yes/no schemas=schema_name[,schema_name]tables=table_name[,table_name] ...其中,userid是用户名和密码,用于连接到数据库;文件路径和名称指定了数据泵导出文件、日志文件和dump文件的路径和名称;full参数用于指定是否导出整个数据库;schemas参数用于指定要导出的模式;tables参数用于指定要导出的表。
impdp的常用语法如下:复制代码impdp userid=用户名/密码@数据库连接标识文件=数据泵导出文件的路径和名称 logfile=日志文件的路径和名称 dumpfile=dump文件的路径和名称full=yes/no schemas=schema_name[,schema_name]tables=table_name[,table_name] ...其中,userid是用户名和密码,用于连接到数据库;文件路径和名称指定了数据泵导出文件、日志文件和dump文件的路径和名称;full参数用于指定是否导入整个数据库;schemas参数用于指定要导入的模式;tables参数用于指定要导入的表。
需要注意的是,在使用expdp和impdp时,必须确保目标数据库已经创建了相应的表、视图、序列等对象,否则导入操作将会失败。
同时,在使用expdp和impdp 时,需要确保具有足够的权限,并且要遵守Oracle数据库的数据泵规范和最佳实践。
exp和imp是客户端工具,可以在客户端使用也可以在服务器端使用expdp和impdp是服务器端工具,只能在oracle服务器端使用。
导出export:将数据库部分或全部对象的结构及其数据导出并存储到OS 文件中的过程导入import:将OS文件转换的对象结构及其数据装载到数据库中的过程导出和导入具有以下作用 1.可以重建组织表 2.可以在用户之间移动对象 3.可以在数据库之间移动对象 4.可以升级数据库到其他平台 5.可以升级数据库到更高版本 6.可以实现逻辑备份和恢复 exp命令选项 buffer用于指定在提取行数据时的缓冲区尺寸 buffer_size = rows_in_array * maximum_row_size compress用于指定导出导入管理初始区(initial)的方法。
默认为Y consistent用于指定是否使用set transaction read only 语句确保取得一致时间点的数据,默认为N constraints用于指定是否要导出表的约束,默认为Y direct用于指定是否使用直接导出方式,默认为N。
直接导出速度要优于常规导出,但要求客户端和服务器端的字符集必须完全一致 feedback用于指定根据到导出行数显示导出进度框。
默认为0,若设置为10,那么没导出10行显示一个圆点file用于指定导出文件名 filesize用于指定导出文件的最大尺寸,若不指定filesize则所有对象和数据会被存放到一个导出文件中flashback_scn用于指定导出特定scn时刻的表数据。
不能和flashback_time同时使用 flahsback_time用于指定导出特定时刻的表数据。
不能和flashback_scn同时使用 full用于指定数据库导出模式,默认为N,当设置为Y时,会导出除sys外所有其他方案的对象。
需要exp_full_database或dba角色 grants用于指定是否要导出对象权限信息,默认为Y help显示帮助信息,默认为N indexes用于指定是否要导出与表和簇相关的所以,默认为Y log用于指定导出日志文件的名称,默认不产生导出日志文件object_consistent用于指定是否要基于对象级设置只读事务导出,默认为N owner用于指定用户导出模式,普通用户只能导出其自身方案。
在plsql中使用ex p imp工具实现orac le数据导出导入Oracle数据导入导出imp/exp就相当于orac le数据还原与备份。
exp命令可以把数据从远程数据库服务器导出到本地的d mp文件,imp命令可以把dmp文件从本地导入到远处的数据库服务器中。
利用这个功能可以构建两个相同的数据库,一个用来测试,一个用来正式使用。
执行环境:可以在SQL PLUS.EXE或者D OS (命令行)中执行, DOS中可以执行时由于在oracl e 8i 中安装目录\\ora81\\BIN被设置为全局路径,该目录下有E XP.EXE与IM P.EXE文件被用来执行导入导出。
oracle用java编写,SQLPLU S.EXE、EXP.EXE、IMP.EXE这两个文件有可能是被包装后的类文件。
SQLPLU S.EXE调用E XP.EXE、IMP.EXE所包裹的类,完成导入导出功能。
下面介绍的是导入导出的实例。
数据导出: 1 将数据库TE ST完全导出,用户名sys tem 密码mana ger 导出到D:\\daochu.dmp中exp system/manage r@TEST file=d:\\daochu.dmp full=y 2 将数据库中s ystem 用户与sy s用户的表导出 exp system/manage r@TEST file=d:\\daochu.dmp owner=(system,sys) 3 将数据库中的表inne r_not ify、notify_staf f_rel at导出exp aichan nel/aichan nel@TESTDB2 file= d:\\data\\newsmg nt.dmp tables=(inner_notif y,notify_staf f_rel at) 4 将数据库中的表tabl e1中的字段file d1以\"00\"打头的数据导出 exp system/manage r@TESTfile=d:\\daochu.dmp tables=(table1) query=\\\" wherefiled1 like'00%'\\\" 上面是常用的导出,对于压缩,既用winz ip把dm p文件可以很好的压缩。
oracle中exp,imp(导⼊,导出)的使⽤详解今天说说Oracle数据库的导⼊(imp.exe)和导出(exp.exe)命令的使⽤,我们的电脑⾥⾯安装完Oracle或OracleClient的时候,在我们的安装⽬录⾥⾯就有这两个命令了,⼀般是在你的Oracle安装⽬录下⾯的bin⽂件夹下⾯会有exp.exe和imp.exe这两个⽂件,它们都是在命令⾏下运⾏,⾸先打开你的CMD程序,然后切换到Oracle的bin⽬录下⾯。
下⾯就看看这两个命令的具体⽤法:基本语法和实例:1、EXP:有三种主要的⽅式(完全、⽤户、表)1、完全:EXP SYSTEM/MANAGER BUFFER=64000 FILE=C:\FULL.DMP FULL=Y如果要执⾏完全导出,必须具有特殊的权限2、⽤户模式:EXP SONIC/SONIC BUFFER=64000 FILE=C:\SONIC.DMP OWNER=SONIC这样⽤户SONIC的所有对象被输出到⽂件中。
3、表模式:EXP SONIC/SONIC BUFFER=64000 FILE=C:\SONIC.DMP OWNER=SONIC TABLES=(SONIC)这样⽤户SONIC的表SONIC就被导出2、IMP:具有三种模式(完全、⽤户、表)1、完全:IMP SYSTEM/MANAGER BUFFER=64000 FILE=C:\FULL.DMP FULL=Y2、⽤户模式:IMP SONIC/SONIC BUFFER=64000 FILE=C:\SONIC.DMP FROMUSER=SONIC TOUSER=SONIC这样⽤户SONIC的所有对象被导⼊到⽂件中。
必须指定FROMUSER、TOUSER参数,这样才能导⼊数据。
3、表模式:EXP SONIC/SONIC BUFFER=64000 FILE=C:\SONIC.DMP OWNER=SONIC TABLES=(SONIC)这样⽤户SONIC的表SONIC就被导⼊。
一、数据泵EXPDP命令参数中文说明#通过在命令行输入expdp help=y 获取imp的语法信息Export: Release 11.2.0.1.0 - Production on 星期五10月10 12:25:21 2019Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.数据泵导出实用程序提供了一种用于在Oracle 数据库之间传输数据对象的机制。
该实用程序可以使用以下命令进行调用:示例: expdp scott/tiger DIRECTORY=dmpdir DUMPFILE=scott.dmp您可以控制导出的运行方式。
具体方法是: 在'expdp' 命令后输入各种参数。
要指定各参数, 请使用关键字:格式: expdp KEYWORD=value 或KEYWORD=(value1,value2,...,valueN)示例: expdp scott/tiger DUMPFILE=scott.dmp DIRECTORY=dmpdir SCHEMAS=scott 或TABLES=(T1:P1,T1:P2), 如果T1 是分区表USERID 必须是命令行中的第一个参数。
------------------------------------------------------------------------------以下是可用关键字和它们的说明。
方括号中列出的是默认值。
ATTACH连接到现有作业。
例如, ATTACH=job_name。
COMPRESSION减少转储文件大小。
有效的关键字值为: ALL, DATA_ONLY, [METADATA_ONLY] 和NONE。
CONTENT指定要卸载的数据。
有效的关键字值为: [ALL], DATA_ONLY 和METADATA_ONLY。
impdp(导入数据泵)和imp(导入工具)是Oracle 数据库中用于导入数据的工具。
它们支持不同的导入文件格式,具体如下:
impdp 导入数据泵工具:
impdp 是Oracle 10g 及更高版本引入的高级数据导入工具。
impdp 使用.dmp 文件格式进行导入,这是一种二进制导出文件格式,其中包含了数据库对象、数据和元数据信息。
.dmp 文件是由expdp(数据泵导出)工具创建的。
imp 导入工具:
imp 是Oracle 数据库早期版本(9i及之前)使用的传统数据导入工具。
imp 支持.dmp 文件格式,这与impdp 使用的.dmp 文件格式不同,因为它们在文件结构上有差异。
imp 也支持使用文本文件(通常以.sql 或.dat 文件扩展名保存)导入数据。
这些文本文件包含SQL 语句或平面文本数据。
需要注意的是,虽然imp 仍然存在于Oracle 数据库中,但它已经不再是Oracle 推荐的数据导入方法。
impdp 提供更强大的功能和性能,因此在现代Oracle 数据库环境中,通常建议使用impdp 进行数据导入。
无论你选择使用impdp 还是imp,在进行数据导入之前,都需要确保导出的数据文件与相应的导入工具兼容,并且包含了所需的数据库对象、数据和元数据。
expdp,impdp导出导⼊远程数据库到本地建议:若备份数据库较⼤远程导⼊导出⽐较容易出错,建议先备份表结构,再导⼊表数据1.本地数据库新建⼀个⽤户test,并授予以下基本权限grant connect to test;grant resource to test;grant create table, create database link to test;grant create session to test;2.创建远程dblinkcreate public database link linkname_xxx connect to 远程username identified by 远程password using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = IP)(PORT = 端⼝)))(CONNECT_DATA =(SERVICE_NAME= 服务名)))';3.创建导出⽂件⽬录,本地要存在该路径,并授权给testcreate directory expdir as 'e:\expdir';grant read,write on directory expdir to test;4.参数解释参数名说明使⽤⽰例network_link指定远程dblink network_link=linknamedirectory指定导出⽬录directory=directorynamedumpfile指定备份⽂件名dumpfile=remoteDB.dmplogfile指定⽇志⽂件名logfile=logname.logschemas指定导出/导⼊某⼀个⽤户schemas=remoteDBUernamecontent指定要导出的内容,默认值为ALL,语法如下:content={all|data_only | metadata_only}content=metadata_onlyremap_schema只在导⼊时使⽤,实现将⼀个⽤户的的数据迁移到另外⼀个⽤户remap_schema=localDBuername:remoteDBUernameremap_tablespace只在导⼊时使⽤,把冒号前⾯的表空间对象导⼊到冒号后⾯的表空间remap_tablespace=sourceTablespace:target Tablespacetable_exists_action 只在导⼊时使⽤,导⼊时,假如⽬标库中已存在对应的表,对于这种情况,提供三种不同的处理⽅式:append,truncate,skip,replaceappend : 追加数据到表中truncate: 将⽬标库中的同名表的数据truncate掉。
导入导出工具exp、imp、expdp、impdp exp和imp是在数据泵之前的逻辑备份工具。
一:导出工具exp1.$ORACLE_HOME/bin 操作系统下可执行文件导出工具将数据库中的数据压缩在一个二进制文件三中模式:a.表模式:导出用户所有的表或者指定的表b.用户模式:导出用户下的所有内容c.整个数据库:导出数据库中的所有对象c查看帮助命令exp help =y练习导出前1)查询数据库的字符集(方法很多只用一种)SQL> select userenv('language') from dual;USERENV('LANGUAGE')----------------------------------------------------AMERICAN_AMERICA.WE8ISO8859P12)设置Linux操作系统的NLS_LANG环境变量export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1开始导出使用exp把scott.emp表导出来导出文件名scott.empexp help=y imp help=y 查看帮助exp scott/oracle TABLES=emp file=scott.emp然后删除scott.emp表sqlplus scott/oracledrop table emp;最后使用导出的文件恢复原来的emp表imp scott/oracle TABLES=emp file=scott.emp检查是否成功select count(*) from scott.emp;例如:表模式exp scott/oracle tables=emp file=emp.dmp导出多张表exp scott/oracle tables=emp,dept file=ed.dmp使用sys用户导出exp tables=scott.emp file=emp1.dmpusername:sys as sysdbapassword: oracle或者exp \'sys/oracle as sysdba\' tables=scott.emp file=emp2.dmp用户模式导出用户所有的对象exp scott/oracle owner=scott file=soctt.dmp全库导出exp system/oracle full=y file=full.dmp指定导出片的大小,限制为1gexp scott/oracle tables=emp file=emp2.dmpfilesize=1g参数filesize 指定了二进制备份文件的最大字节数目的是解决某些操作系统下2g物理文件限制以及可以加快压缩和方便刻录光盘等也可以远程导出到本地exp system/oracle@orcl tables=scott.emp file=emp168.dmp导入工具:imp1 该工具是$ORACLE_HOME/bin下一个可执行文件2 imp将exp生成的二进制文件导入数据库中只有exp_full_database 和dba权限的用户才能做整个数据库的导入grant exp_full_database to scott;3 imp操作步骤先create table -->insert data -->create index -->create trigger ,constriants例子练习:先删除scott.emp 表的记录,使用备份文件恢复记录sqlplus scott/oracletruncate table emp;select count(*) from emp;imp scott/oracle tables=emp file=emp.dmp ignore=y参数ignore=y 表示直接导入数据检查结果select cont(*) from emp;将某用户的表导入到另一个用户下:交互式imp tables=emp file=emp.dmp fromuser=scott touser=hr输入用户名:sys as sysdba输入密码: oracle非交互式imp \'sys/oracle as sysdba\' tables=emp file=emp.dmp fromuser=scott touser=hr 约束报错,可以不需要创建约束,加入参数CONSTRAINTS=N4 导入可能出现的问题a 数据对象已经存在解决方法:使用参数ignore=y 会把exp文件的数据内容直接导入如果表有唯一关键字约束,不符合条件的不导入如果表没有唯一关键字约束,将引起重复记录b 数据库对象有主外键约束不符合主外键约束,数据导入失败解决方法:先导入主表,在导入从表或者先禁用主外键,导入完成后在启用c 权限不够给予imp_full_databaseexp_full_databased 字符集问题如果字符集不同,导入失败查看oracle server端的字符集select userenv('language') from dual;查看dump文件字符集cat scott.dmp |od -x|head -1|awk '{print $2 $3}'|cut -c 3-60345select nls_charset_name(to_number('0354','xxxx')) from dual;查看oracle client端字符集echo $NLS_LANG如果检查结果发现server端和client字符集不一样,修改为同server端相同的字符集导出的过程转换在export过程中,源数据库字符集与export用户会话字符集不一致会发生字符集转换,并在导出文件头部几个字节中存储export用户会话字符集ID号,在这个过程中肯可能发生数据丢失。
要正确导出源数据库数据,要求export过程的用户会话字符集应等于源数据库字符集或是源数据库字符集的超集导入的过程字符集转换确定导出数据库字符集环境(通过读取导出文件头获取)确定session字符集(通过nls_lang获得)imp读取导出的文件,读取文件集ID于导入进程所在的会话nls_lang比较如果相同不做转换,不过不同要把数据文件字符集转为session字符集总结:先去检查导入文件字符集于导入session使用字符集之间的转换,如果转换不成功,则imp就不能完成然后导入session字符集与数据库字符集之间转换f imp,exp版本不能向上兼容imp可以导入低版本exp生成的文件,不能导入高版本exp生成的文件g 导入大表(大于80M),存储失败默认的exp时,compress=y,也就是数据将压缩在一个数据块上导入时,如果不存在连续一个大数据块,导入失败导出80m以上大表时,将compress=n5 exp imp参数buffer=4096000 (数据缓冲区代销哦啊,以字节为单位,自行调整)对性能有很大影响compress=y(将在导出时候合并碎片)direct=y(以direct 方式导出,告诉exp直接读取数据,速度快)feedback(每x行显示进度)例如:将用户的所有内容删除后恢复用户的所有内容1 导出用户所有的对象exp scott/oracle owner=scott file=soctt.dmp删除用户drop user scott cascade ;导入用户必须要先存在create user scott identified by oracledefault tablespace userstemporary tablespace tempquota unlimited on users;grant connect,resource to scott ;imp system/oracle file=scott.dmp fromuser=scott touser=scott ignore=y buffer=200000使用脚本完成导出某个用户的所有表set feedback off heading off verify off trimspool offset pagesize 0 linesize 200spool /u01/table_scott.shselect 'exp scott/oracle tables=' || table_name || ' file=/u01/' || table_name ||'.dmp' from user_tables;spool offvim /u01/table_scott.sh#! /bin/bashexp scott/oracle tables=BT file=/u01/BT.dmpexp scott/oracle tables=DEPT file=/u01/DEPT.dmpexp scott/oracle tables=DT file=/u01/DT.dmpexp scott/oracle tables=EMP file=/u01/EMP.dmpexp scott/oracle tables=MANAGER file=/u01/MANAGER.dmpexp scott/oracle tables=SALGRADE file=/u01/SALGRADE.dmp给予执行权限chmod u+x /u01/table_scott.sh-----------------------------------------------------------------------Oracle 的导出导入是一个很常用的迁移工具。
在Oracle 10g中,Oracle 推出了数据泵(expdp/impdp). 它可以通过使用并行,从而在效率上要比exp/imp 要高。
高速导入导出工具逻辑备份工具---数据泵使用专用api导入导出数据,速度快expdp只能用于服务器端,不能用户客户端工具目录:$ORACLE_HOME/bin可以功过dbms_datapump调用可提供工具:expdp impdp 基于web界面可提供数据访问方法:直接路径外部表作用:oracle数据库之间导入导出数据泵是oracle database 10g的一个组成功能数据泵优点:exclude ,include 和content 参数用于选择细粒度级对象和数据version参数指定要移动的对象的数据库版本parallel参数指定代表导出作业运行的活动执行服务器的最大线程数estimate_only参数可估计导出作业占用的空间量(实际上并不执行导出)使用网络模式可从远程数据库直接导出到转存文件集在导入过程中,可以更改目标数据文件名、方案和表空间此外10g还允许您指定在执行数据泵导出时,要从源数据库取样和卸载的数据百分比。