数据泵导入导出详解

数据泵技术是Oracle Database 10g中的新技术,它比原来导入/导出(imp,exp)技术快15 -45倍速度的提高源于使用了并行技术来读写导出转储文件expdp使用使用EXPDP工具时,其转储文件只能被存放在DIRECTORY对象对应的OS目录中, 而不能直接指定转储文件所在的OS目录因此使用EXPDP工具时,,必须首先建立 DIRECTORY对象,并且需要为数据库用户授予使用DIRECTORY对象权限首先得建DIRECTORY:SQL> conn /as sysdbaSQL> CREATE OR REPLACE DIRECTORY dir_dump AS '/u01/backup/';SQL> GRANT read,write ON DIRECTORY dir_dump TO public;1)导出 scott 整个 schema--默认导出登陆账号的schema$ expdpscott/tiger@db_esuiteparfile=/orahome/expdp.parexpdp.par 内容:DIR ECTORY=dir_dumpDUMPFILE=scott_full.dmpLOGFILE=scott_full.log--其他账号登陆,在参数中指定schemas$ expdp system/oracle@db_esuiteparfile=/orahome/expdp.parexpdp.par 内容:DUMPFILE=scott_full.dmpLOGFILE=scott_full.logSCHEMAS=SCOTT2) 导出scott下的dept,emp表$ expdpscott/tiger@db_esuiteparfile=/orahome/expdp.parexpdp.par 内容:DIR ECTORY=dir_dumpDUMPFILE=scott.dmpLOGFILE=scott.logTABLES=DEPT,EMP3) 导出scott下除emp之外的表$ expdpscott/tiger@db_esuiteparfile=/orahome/expdp.parexpdp.par 内容:DIR ECTORY=dir_dumpDUMPFILE=scott.dmpLOGFILE=scott.logEXCLUDE=TABLE:"='EMP'"4) 导出scott下的存储过程$ expdpscott/tiger@db_esuiteparfile=/orahome/expdp.parexpdp.par 内容:DUMPFILE=scott.dmpLOGFILE=scott.logINCLUDE=PROCEDURE5) 导出scott下以'E'开头的表$ expdpscott/tiger@db_esuiteparfile=/orahome/expdp.parexpdp.par 内容:DIR ECTORY=dir_dumpDUMPFILE=scott.dmpLOGFILE=scott.logINCLUDE=TABLE:"LIKE 'E%'" /何以改成NOT LIKE,就导出不以E开头的表6) 带QUERY导出$ expdpscott/tiger@db_esuiteparfile=/orahome/expdp.parexpdp.par 内容:DIR ECTORY=dir_dumpDUMPFILE=scott.dmpLOGFILE=scott.logTABLES=EMP,DEPTQUERY=EMP:"whereempno>=8000”QUERY=DEPT:"wheredeptno>=10 and deptno<=40"注:处理这样带查询的多表导出,如果多表之间有外健关联,可能需要注意查询条件所 筛选的数据是否符合这样的外健约束,比如EMP中有一栏位是deptno,是关联dept中的 主键,如果"whereempno>=8000”中得出的deptno=50的话,那么,你的dept的条件”where deptno>=10 and deptno<=40"就不包含deptno=50的数据,那么在导入的时候就会出现错 误.expdp选项1. ATTACH该选项用于在客户会话与已存在导出作用之间建立关联.语法如下:ATTACH=[schema_name.]job_nameschema_name用于指定方案名,job_name用于指定导出作业名.注意,如果使用 ATTACH选项,在命令行除了连接字符串和ATTACH选项外,不能指定任何其他选项,示例如 下:expdpscott/tiger ATTACH=scott.export_job2. CONTENT该选项用于指定要导出的内容.默认值为ALL.语法如下:CONTENT={ALL | DATA_ONLY |METADATA_ONLY}当设置CONTENT为ALL时,将导出对象定义及其所有数据;为DATA_ONLY时,只导 出对象数据;为METADATA_ONLY时,只导出对象定义,示例如下:expdpscott/tiger DIRECTORY=dump DUMPFILE=a.dump CONTENT=METADATA_ONLY3. DIRECTORY指定转储文件和日志文件所在的目录.语法如下:DIR ECTORY=directory_objectdirectory_object用于指定目录对象名称.需要注意,目录对象是使用CREATE DIRECTORY语句建立的对象,而不是OS目录,示例如下:expdpscott/tiger DIRECTORY=dump DUMPFILE=a.dump建立目录:CREATE DIRECTORY dump as 'd:dump';查询创建了那些子目录:SELECT * FROM dba_directories;4. DUMPFILE用于指定转储文件的名称,默认名称为expdat.dmp.语法如下:DUMPFILE=[directory_object:]file_name[,・・・.]directory_object用于指定目录对象名,file_name用于指定转储文件名.需要注意,如果不 指定directory_object,导出工具会自动使用DIRECTORY选项指定的目录对象,示例如下:expdpscott/tiger DIRECTORY=dump1 DUMPFILE=dump2:a.dmp5. ESTIMATE指定估算被导出表所占用磁盘空间的方法.默认值是BLOCKS.语法如下:EXTIMATE={BLOCKS | STATISTICS}设置为BLOCKS时,oracle会按照目标对象所占用的数据块个数乘以数据块尺寸估算对 象占用的空间,设置为STATISTICS时,根据最近统计值估算对象占用空间,示例如下:expdpscott/tiger TABLES=emp ESTIMATE=STATISTICS DIRECTORY=dumpDUMPFILE=a.dump一般情况下,当用默认值(blocks)时,日志中估计的文件大小会比实际expdp出来的文 件大,用statistics时会跟实际大小差不多.6. EXTIMATE_ONLY指定是否只估算导出作业所占用的磁盘空间,默认值为N.语法如下:EXTIMATE_ONLY={Y | N}设置为Y时,导出作用只估算对象所占用的磁盘空间,而不会执行导出作业,为N时,不仅 估算对象所占用的磁盘空间,还会执行导出操作,示例如下:expdpscott/tiger ESTIMATE_ONLY=y NOLOGFILE=y7. EXCLUDE该选项用于指定执行操作时要排除的对象类型或相关对象.语法如下:EXCLUDE=object_type[:name_clause][,….]object_type用于指定要排除的对象类型,name_clause用于指定要排除的具体对 象EXCLUDE和INCLUDE不能同时使用,示例如下:expdpscott/tiger DIRECTORY=dump DUMPFILE=a.dup EXCLUDE=VIEW在EXPDP的帮助文件中,可以看到存在EXCLUDE和INCLUDE参数,这两个参数文 档中介绍的命令格式存在问题,正确用法是:EXCLUDE=OBJECT_TYPE[:name_clause][,...]INCLUDE=OBJECT_TYPE[:name_clause][,...]示例:Expdp
如何将生成的文件放在目标数据库而不放在源数据库呢,在expdp中使用network_link. 比如在本机expdp远程服务器的数据库,先在本机创建到服务端的dblink,然后创建directory 及授权,然后expdp.a.创建到服务端的dblinkconn aa/aacccreate database link
create directory dpdata1 as 'd:\test\dump';二、 查看管理理员目录(同时查看操作系统是否存在,因为Oracle并不关心该目录是否存 在,如果不存在,则出错)select * from dba_directories;三、 给scott用户赋予在指定目录的操作权限,最好以system等管理员赋予grantread,write on directory dpdatal to scott;四、 导出数据1) 按用户导expdpscott/tiger@orcl schemas=scottdumpfile=expdp.dmpDIRECTORY=dpdata1;2) 并行进程parallelexpdpscott/tiger@orcl directory=dpdata1 dumpfile=scott3.dmpparallel=40job_name=scott33) 按表名导expdpscott/tiger@orcl TABLES=emp,deptdumpfile=expdp.dmp DIR ECTORY=dpdata1;4) 按查询条件导expdpscott/tiger@orcl directory=dpdata1 dumpfile=expdp.dmpTables=emp query='WHERE deptno=20';5) 按表空间导expdp system/manager DIR ECTORY=dpdata1DUMPFILE=tablespace.dmpTABLESPACES=temp,example;6)导整个数据库expdp system/manager DIRECTORY=dpdata1 DUMPFILE=full.dmpFULL=y;五、还原数据1) 导到指定用户下impdpscott/tiger DIRECTORY=dpdata1 DUMPFILE=expdp.dmpSCHEMAS=scott;2) 改变表的ownerimpdp system/manager DIR ECTORY=dpdata1DUMPFILE=expdp.dmpTABLES=scott.dept REMAP_SCHEMA=scott:system;3) 导入表空间impdp system/manager DIR ECTORY=dpdata1DUMPFILE=tablespace.dmpTABLESPACES=example;4) 导入数据库impdb system/manager DIRECTORY=dump_dir DUMPFILE=full.dmpFULL=y;5) 追加数据impdp system/manager DIR ECTORY=dpdata1DUMPFILE=expdp.dmpSCHEMAS=system TABLE_EXISTS_ACTION=append;exp/imp与expdp/impdp的用法区别1 :把用户usera的对象导到用户userb,用法区别在于fromuser=useratouser=userb ,remap_schema='usera':'usera'。
例如 imp system/passwdfromuser=useratouser=userbfile=/oracle/exp.dmp log=/oracle/exp.log; impdp system/passwddirectory=expdpdumpfile=expdp.dmpremap_schema='usera':'userb'logfile=/oracle/exp.log;2:更换表空间,用exp/imp的时候,要想更改表所在的表空间,需要手工去处理一下,如 alter table xxx move tablespace_new 之类的操作用 impdp 只要用 remap_tablespace='tabspace_old':'tablespace_new'3:当指定一些表的时候,使用 exp/imp 时,tables 的用法是 tables=('table1','table2','table3')expdp/impdp 的用法是 tables='table1','table2','table3'4:是否要导出数据行exp ( ROWS=Y导出数据行,ROWS=N不导出数据行)expdp content(ALL:对象+导出数据行,DATA_ONLY:只导出对象,METADATA_ONLY: 只导出数据的记录)Oracle数据泵导入导出案例2013-11-06 0 个评论 作者:laizhenhai88收藏 ,工-我要投稿Oracle数据泵导入导出案例Oracle数据库导入导出工具,可以使用exp/imp,但这是比较早期的工具。
本文主 要介绍数据泵expdp/impdp工具的使用建立数据泵目录使用数据泵需要先建directorycreate directory dump_scott as'/home/oracle/dump/scott'查看建立的目录Select * from dba_directories赋权Grant read,write on directory dump_scotttoscott导出案例1,按表导出expdpscott/tiger directory=dump_scottdumpfile=tab.dmp logfile=scott.log tables=dept,emp导出案例2,按用户导出expdpscott/tiger directory=dump_scottdumpfile=dumpscott.dmp schemas=scott导出案例3,全库导出,且并行导出expdpscott/tiger directory=dump_scottdumpfile=full.dmp parallel=4 full=y导入案例1,按表导入,从scott到scott2impdp scott2/tiger directory=dump_scottdumpfile=tab.dmptables=scott.dept,scott.empremap_schema=scott:scott2导入案例2,按用户导入,从scott到scott2impdpscott/tigerdirectory=dump_scottdumpfile=schema.dmpremap_schema=scott:scott2导入案例3,全库导入impdpscott/tiger directory=dump_scottdumpfile=full.dmp full=y导入案例4,无落地文件的用户拷贝,需要建立db linkimpdpscott/tigerdirectory=dump_scottnetwork_link=remote_linkremap_schema=scott:scott21、首先建立目录: create directory目录名称as '数据库服务器上的一个目录',如: create directory别名as 'd:\服务器目录名';将导入或导出的文件放在这个目录下2、导出及导入以SID=orcl,导出dmp的账号为test,导入dmp的账号为test为例。
若将数据从sfz中导出:expdp test/test@orcl directory=^名 dumpfile=导出文件名导入到test中:impdp test/test@orcl directory=^J名 dumpfile=导出文件名.dmp导入到处用户名不一样时,做个映射•,一样时,不用写remap_schema=test:test1。