第10章 Oracle数据泵技术
- 格式:ppt
- 大小:88.00 KB
- 文档页数:14
Oracle数据泵的使用几乎所有DBA都熟悉oracle的导出和导入实用程序,它们将数据装载进或卸载出数据库,在oracle database 10g和11g中,你必须使用更通用更强大的数据泵导出和导入(Data P ump Export and Import)实用程序导出和导入数据。
以前的导出和导入实用程序在oracle database 11g中仍然可以使用,但是Oracle强烈建议使用数据泵(Data Pump)技术,因为它提供了更多的高级特性。
例如:●你可以中断导出/导入作业,然后恢复它们;●可以重新启动已失败的导出和导入作业;●可以重映射对象属性以修改对象;●可以容易地从另一个会话中监控数据泵的作业,甚至可以在作业过程中修改其属性;●使用并行技术很容易快速移动大量的数据;●因为oracle提供了针对数据泵技术的API,所以可以容易地在PL/SQL程序中包含导出/导入作业;●可以使用更强大的可移植表空间特性来快速移植大量的数据,甚至可在不同操作系统平台之间移动。
与旧的导出和导入实用程序不同,数据泵程序有一组可以在命令行中使用的参数以及一组只能以交互方式使用的特殊命令,你可以通过在命令行中输入expdp help = y或者impdp help = y快速获取所有数据泵参数及命令的概述一.数据泵技术的优点原有的导出和导入技术基于客户机,而数据泵技术基于服务器。
默认所有的转储,日志和其他文件都建立在服务器上。
以下是数据泵技术的主要优点:1.改进了性能2.重新启动作业的能力3.并行执行的能力4.关联运行作业的能力5.估算空间需求的能力6.操作的网格方式7.细粒度数据导入功能8.重映射能力二.数据泵导出和导入的用途1.将数据从开发环境转到测试环境或产品环境2.在不同的操作系统平台上的oracle数据库直接的传递数据3.在修改重要表之前进行备份4.备份数据库5.把数据库对象从一个表空间移动到另一个表空间6.在数据库直接移植表空间7.提取表或其他对象的DDL注意:数据库不建立完备的备份,因为在导出文件中没有灾难发生时的最新数据。
使用数据泵导出和导入几乎所有DBA都熟悉oracle的导出和导入实用程序,它们将数据装载进或卸载出数据库,在oracle database 10g和11g中,你必须使用更通用更强大的数据泵导出和导入(Data Pump Export and Import)实用程序导出和导入数据。
以前的导出和导入实用程序在oracle database 11g中仍然可以使用,但是Oracle强烈建议使用数据泵(Data Pump)技术,因为它提供了更多的高级特性。
例如,你可以中断导出/导入作业,然后恢复它们;可以重新启动已失败的导出和导入作业;可以重映射对象属性以修改对象;可以容易地从另一个会话中监控数据泵的作业,甚至可以在作业过程中修改其属性;使用并行技术很容易快速移动大量的数据;因为oracle提供了针对数据泵技术的API,所以可以容易地在PL/SQL 程序中包含导出/导入作业;可以使用更强大的可移植表空间特性来快速移植大量的数据,甚至可在不同操作系统平台之间移动。
与旧的导出和导入实用程序不同,数据泵程序有一组可以在命令行中使用的参数以及一组只能以交互方式使用的特殊命令,你可以通过在命令行中输入expdp help = y 或者impdp help = y快速获取所有数据泵参数及命令的概述。
一.数据泵技术的优点原有的导出和导入技术基于客户机,而数据泵技术基于服务器。
默认所有的转储,日志和其他文件都建立在服务器上。
以下是数据泵技术的主要优点:1.改进了性能2.重新启动作业的能力3.并行执行的能力4.关联运行作业的能力5.估算空间需求的能力6.操作的网格方式7.细粒度数据导入功能8.重映射能力二.数据泵导出和导入的用途1.将数据从开发环境转到测试环境或产品环境2.在不同的操作系统平台上的oracle数据库直接的传递数据3.在修改重要表之前进行备份4.备份数据库5.把数据库对象从一个表空间移动到另一个表空间6.在数据库直接移植表空间7.提取表或其他对象的DDL注意:数据库不建立完备的备份,因为在导出文件中没有灾难发生时的最新数据。
Oracle 10G使用数据泵(EXPDP和IMPDP)1.1.1 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$ expdp scott/tiger@db_esuite parfile=/orahome/expdp.parexpdp.par内容:DIRECTORY=dir_dumpDUMPFILE=scott_full.dmpLOGFILE=scott_full.log--其他账号登陆, 在参数中指定schemas$ expdp system/oracle@db_esuite parfile=/orahome/expdp.parexpdp.par内容:DIRECTORY=dir_dumpDUMPFILE=scott_full.dmpLOGFILE=scott_full.logSCHEMAS=SCOTT2) 导出scott下的dept,emp表$ expdp scott/tiger@db_esuite parfile=/orahome/expdp.par expdp.par内容:DIRECTORY=dir_dumpDUMPFILE=scott.dmpLOGFILE=scott.logTABLES=DEPT,EMP3) 导出scott下除emp之外的表$ expdp scott/tiger@db_esuite parfile=/orahome/expdp.par expdp.par内容:DIRECTORY=dir_dumpDUMPFILE=scott.dmpLOGFILE=scott.logEXCLUDE=TABLE:"='EMP'"4) 导出scott下的存储过程$ expdp scott/tiger@db_esuite parfile=/orahome/expdp.par expdp.par内容:DIRECTORY=dir_dumpDUMPFILE=scott.dmpLOGFILE=scott.logINCLUDE=PROCEDURE5) 导出scott下以'E'开头的表$ expdp scott/tiger@db_esuite parfile=/orahome/expdp.parexpdp.par内容:DIRECTORY=dir_dumpDUMPFILE=scott.dmpLOGFILE=scott.logINCLUDE=TABLE:"LIKE 'E%'" //可以改成NOT LIKE,就导出不以E开头的表6) 带QUERY导出$ expdp scott/tiger@db_esuite parfile=/orahome/expdp.parexpdp.par内容:DIRECTORY=dir_dumpDUMPFILE=scott.dmpLOGFILE=scott.logTABLES=EMP,DEPTQUERY=EMP:"where empno>=8000"QUERY=DEPT:"where deptno>=10 and deptno<=40"1.1.2 expdp选项1. ATTACH该选项用于在客户会话与已存在导出作用之间建立关联.语法如下:ATTACH=[schema_name.]job_nameschema_name用于指定方案名,job_name用于指定导出作业名.注意,如果使用ATTACH选项,在命令行除了连接字符串和ATTACH选项外,不能指定任何其他选项,示例如下:expdp scott/tiger ATTACH=scott.export_job2. CONTENT该选项用于指定要导出的内容.默认值为ALL.语法如下:CONTENT={ALL | DATA_ONLY | METADATA_ONLY}当设置CONTENT为ALL 时,将导出对象定义及其所有数据; 为DATA_ONLY时,只导出对象数据; 为METADATA_ONLY时,只导出对象定义,示例如下:expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dump CONTENT=METADATA_ONLY3. DIRECTORY指定转储文件和日志文件所在的目录.语法如下:DIRECTORY=directory_objectdirectory_object用于指定目录对象名称.需要注意,目录对象是使用CREATE DIRECTORY 语句建立的对象,而不是OS 目录,示例如下:expdp scott/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选项指定的目录对象,示例如下:expdp scott/tiger DIRECTORY=dump1 DUMPFILE=dump2:a.dmp5. ESTIMATE指定估算被导出表所占用磁盘空间的方法.默认值是BLOCKS.语法如下:EXTIMATE={BLOCKS | STATISTICS}设置为BLOCKS时,oracle会按照目标对象所占用的数据块个数乘以数据块尺寸估算对象占用的空间,设置为STATISTICS时,根据最近统计值估算对象占用空间,示例如下:expdp scott/tiger TABLES=emp ESTIMATE=STATISTICS DIRECTORY=dump DUMPFILE=a.dump一般情况下, 当用默认值(blocks)时, 日志中估计的文件大小会比实际expdp出来的文件大, 用statistics时会跟实际大小差不多.6. EXTIMATE_ONLY指定是否只估算导出作业所占用的磁盘空间,默认值为N.语法如下:EXTIMATE_ONLY={Y | N}设置为Y时,导出作用只估算对象所占用的磁盘空间,而不会执行导出作业,为N时,不仅估算对象所占用的磁盘空间,还会执行导出操作,示例如下:expdp scott/tiger ESTIMATE_ONLY=y NOLOGFILE=y7. EXCLUDE该选项用于指定执行操作时要排除的对象类型或相关对象.语法如下:EXCLUDE=object_type[:name_clause][,….]object_type用于指定要排除的对象类型,name_clause用于指定要排除的具体对象.EXCLUDE和INCLUDE不能同时使用,示例如下:expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dup EXCLUDE=VIEW在EXPDP的帮助文件中, 可以看到存在EXCLUDE和INCLUDE参数, 这两个参数文档中介绍的命令格式存在问题, 正确用法是:EXCLUDE=OBJECT_TYPE[:name_clause][,...]INCLUDE=OBJECT_TYPE[:name_clause][,...]示例:expdp <other_parameters> schema=scottexclude=sequence,table:"in('EMP','DEPT')"impdp <other_parameters> schema=scott include=function,package,procedure,table:"='EMP'"有了这些还不够, 由于命令中包含了多个特殊字符, 在不同的操作系统下需要通过转义字符才能使上面的命令顺利执行,如:EXCLUDE=TABLE:\"IN('BIGTALE')\"8. FILESIZE指定导出文件的最大尺寸,默认为0(表示文件尺寸没有限制).9. FLASHBACK_SCN指定导出特定SCN时刻的表数据.语法如下:FLASHBACK_SCN=scn_valuescn_value用于标识SCN值.FLASHBACK_SCN和FLASHBACK_TIME不能同时使用,示例如下:expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp FLASHBACK_SCN=35852310. FLASHBACK_TIME指定导出特定时间点的表数据.语法如下:FLASHBACK_TIME="TO_TIMESTAMP(time_value)"示例如下:expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp FLASHBACK_TIME="TO_TIMESTAMP('25-08-2004 14:35:00','DD-MM-YYYY HH24:MI:SS')"11. FULL指定数据库模式导出,默认为N.语法如下:FULL={Y | N}为Y时,标识执行数据库导出.12. HELP指定是否显示EXPDP命令行选项的帮助信息,默认为N. 当设置为Y时,会显示导出选项的帮助信息,示例如下:expdp help=y13. INCLUDE指定导出时要包含的对象类型及相关对象.语法如下:INCLUDE=object_type[:name_clause][,… ]示例如下:expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp INCLUDE=trigger1.1.2 expdp选项14. JOB_NAME指定要导出作用的名称,默认为SYS_XXX.语法如下:JOB_NAME=jobname_string示例如下:expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp INCLUDE=trigger JOB_NAME=exp_trigger后面想临时停止expdp任务时可以按Ctrl+C组合键,退出当前交互模式,退出之后导出操作不会停止,这不同于Oracle以前的EXP. 以前的EXP,如果退出交互式模式,就会出错终止导出任务. 在 Oracle10g中,由于EXPDP是数据库内部定义的任务,已经与客户端无关. 退出交互之后,会进入export的命令行模式,此时支持 status等查看命令:Export> status如果想停止改任务,可以发出stop_job命令:Export> stop_job如果有命令行提示: "是否确实要停止此作业([Y]/N):" 或 "Are you sure you wish to stop this job ([yes]/no):", 回答应是yes或者no, 回答是YES以后会退出当前的export界面.接下来可以通过命令行再次连接到这个任务:expdp test/test@acf attach=expfull通过start_job命令重新启动导出:Export> start_jobExport> status15. LOGFILE指定导出日志文件文件的名称,默认名称为export.log.语法如下:LOGFILE=[directory_object:]file_namedirectory_object用于指定目录对象名称,file_name用于指定导出日志文件名.如果不指定directory_object.导出作用会自动使用DIRECTORY的相应选项值,示例如下:expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp logfile=a.log16. NETWORK_LINK指定数据库链名,如果要将远程数据库对象导出到本地例程的转储文件中,必须设置该选项.expdp中使用连接字符串和network_link的区别:expdp属于服务端工具,而exp属于客户端工具,expdp生成的文件默认是存放在服务端的,而exp生成的文件是存放在客户端.expdp username/password@connect_string //对于使用这种格式来说,directory使用源数据库创建的,生成的文件存放在服务端。
Oracle数据泵应用及常见问题1、Oracle数据泵简介Oracle数据泵(Data Pump)是Oracle10G引进的新技术,在10g之前,传统的导出和导入分别使用EXP工具和IMP工具,从10g开始,不仅保留了原有的EXP和IMP工具,还提供了数据泵导出导入工具EXPDP和IMPDP。
经相关测试,Oracle数据泵方式进行数据导入导出要比以前的IMP/EXP快10倍左右,给大数据量的数据库导入导出提供了方便。
数据泵方式与IMP/EXP的主要区别在于EXP和IMP是客户段工具程序,它们既可以在可以客户端使用,也可以在服务端使用。
而EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用;IMP只适用于EXP导出文件,不适用于EXPDP 导出文件;IMPDP只适用于EXPDP导出文件,而不适用于EXP导出文件。
2、Oracle数据泵命令及主要参数a)EXPDP/IMPDP使用前准备运行命令前必须建立工作目录并赋权限,然后执行命令,具体步骤如下:a1在数据库所在机器上建立工作目录,如:d:\dp。
a2用数据库DBA用户SYS登录数据库,执行语句如下语句:create directory dump_dir as ' d:\dp ';grant read, write on directory dump_dir to db_user;(此处dump_dir 是第上面语句中工作目录名称,非实际目录名称,db_user是数据库用户名)。
a3运行EXPDP命令。
b)EXPDP主要参数a1DIRECTORY:导出数据的目录(目录是上面的设定的目录dump_dir)a2DUMPFILE:导出的文件名。
a3VERSION:以哪个版本导出数据,如果在不同的版本间导出导入数据,这个参数非常有用,例如将Oracle11G数据导入到Oracle10G(10.2.0.1.0)的数据库中,参数应写为VERSION=10.2.0.1.0,否则无法导入到低版本的数据库中。
Oracle数据泵的导⼊与导出实例详解⽬录前⾔数据泵的导⼊数据泵的导出总结前⾔今天王⼦要分享的内容是关于Oracle的⼀个实战内容,Oracle的数据泵。
⽹上有很多关于此的内容,但很多都是复制粘贴别⼈的,导致很多⼩伙伴想要使⽤的时候不能直接上⼿,所以这篇⽂章⼀定能让你更清晰的理解数据泵。
开始之前王⼦先介绍⼀下⾃⼰的环境,这⾥使⽤的是⽐较常⽤的WIN10系统,Oracle数据库也是安装在本机上的,环境⽐较简单。
数据泵的导⼊导⼊的数据⽂件可能是别⼈导出给你的,也可能是你⾃⼰导出的,王⼦这⾥就是别⼈导出的,⽂件名字是YD.DMP。
在进⾏操作之前,⼀定要问清楚表空间名字,如果表空间命名不统⼀,可能会导致导⼊失败的问题。
所以第⼀步就是建⽴表空间,语句如下:create tablespace VIEWHIGHdatafile 'D:/app/admin/oradata/orcl/VIEWHIGH'size 1M autoextend on next 50M maxsize unlimited;这⾥的datafile路径⼀般选择你本地oracle的数据⽂件路径。
之后,我们可以建⽴⼀个新的⽤户来导⼊数据⽤,这个⽤户名也可以提前问好,最好⽤户名⼀致,否则需要做⼀次⽤户名的映射,这个我们下⽂再说。
建⽴⽤户语句如下:create user DRGS_INITidentified by "vhiadsh"default tablespace VIEWHIGHprofile DEFAULTACCOUNT UNLOCK;建⽴⽤户后需要给⽤户授权,语句如下:--给新建⽤户授DBA权限grant dba to DRGS_INIT;grant unlimited tablespace to DRGS_INIT;接下来我们需要在本地的磁盘中创建⼀个⽂件夹,作为数据泵⽂件夹来使⽤,同时把DMP⽂件放⼊到此⽂件夹下。