当前位置:操作系统 > Unix/Linux >>

[每日一题]11gOCP 1z0-052 :2013-09-18 理解EXPDP/IMPDP

[每日一题]11gOCP 1z0-052 :2013-09-18 理解EXPDP/IMPDP
 
 
正确答案:AB
 
    Data Pump(Oracle10g版本中引入的,并在11g版本中得到了增强)是用于在Oracle数据库间进行大规模、快速数据传输的工具。
一、Data Pump的体系结构
  Data Pump是一个服务器端实用程序。我们可以从某个用户进程(使用sql*plus或通过EM)启动Data Pump,但是其所有工作都由服务器进程完成。因为运行在服务器上的Data Pump进程直接访问数据文件与SGA(不必通过会话进行访问),所以与过去的Export/Import实用程序相比,使用Data Pump能够显著地改善性能。此外,我们也可以启动一个Data Pump作业,接着分离这个作业并使其在后台运行。随后,为了监视这个作业的进度,我们随时可以重新连接该作业。
许多进程都涉及一个Data Pump作业,两个队列、多个文件以及一个表。接下来,我们首先介结这些进程。
   对于Unix系统来说,用户进程为expdp和impdp;对于Windows系统来说,用户进程为expdp.exe和impdp.exe。这些用户进程用于启动、控制和监视Data Pump作业。此外还存在一个EnterpriseManager界面。Expdp和expdp用户进程通过某个普通的服务器进程建立一个针对指定数据库的会话。这个会话随后可以发出控制和监视Data Pump作业的命令。启动一个Data Pump作业时,到少会启动两个进程:一个Data PumpMaster进程(DMnn),一个或多个工作者进程(命名为DWnn)。如果多个Data Pump作业同时运行,那么每个作业都具有自己的DMnn进程以及自己的DW进程集合。顾名思义,主进程控制工作者进程。如果启用并行技术,那么每个DWnn进程都可以使用两个或多个并行执行服务器(名称为Pnnn)。
  我们需要为每个Data Pump作业创建下面两个队列:一个控制队列和一个状态队列。DM进程会分割所执行的工作,并且将组成指定的作业的不同任务放置在控制队列中。工作者进程获取并执行这些任务,同时可能利用并行执行服务器。控制队列一次递送(deliver-exactly-once)模型上运作,也就是说DMnn进程入列消息,而获取消息的工作者进程则出列消息。状态队列用于完成监视功能,DMnn进程在这个队列中放入描述作业状态消息。状态队列在发布与订阅(publish-and-subscribe)模型上运行,也就是说具有适当权限的任何会话都可以通过查询这个队列来监视指定作业的进度。
  Data Pump生成的文件具有下列三种形式:
  SQL文件、转储文件以及日志文件。SQL文件是描述指定作业所包含对象的若干DDL语句。我们可以将不包含任何数据的SQL文件生成为可能针对文档编制目的而从数据库中方便获取信息的形式,也可以将其生成为能够重新创建数据库的一组脚本。
转储文件包含导出的数据,这些数据用XML标记进行格式化。使用XML意味着:为了描述数据,转储文件中存在相当大的系统开销。与HR示例模式中REGIONS表相似的一个小型表会生成94KB的转储文件,但是对于这种很小的表来说,系统开销可能过大。因此转储文件对于更大的表来说豪无价值。
   日志文件则描述了指定作业的运行历史。
考点:主记住下列三种Data Dump文件类型:SQL文件、转储文件以及日志文件。
 
 
二、目录和位置
   Data Pump始终使用Oracle目录。为了定位将要读写的文件及其日志文个件,这些是必需的。应该说有一个目录就够了,但作业通常使用多个目录。如果数据量是要并行写入多个文件的数千M字节数据,那么你可能需要将磁盘活动分布在不同的文件系统的多个目录上。
   如果没有在Data Pump命令中指定多个目录,那么将使用默认目录。每个11g数据库都有一个可供使用的Oracle目录,其名称为DATA_PUMP_DIR。如果在创建数据库时已设置了环境变量ORACLE_BASE,那么操作系统位置将是$ORACLE_BASE/admin/database_name/dpdump。如果没设置ORACLE_BASE,那么位置将是$ORACLE_HOME/admin/database_name/dpdump(其中,database_name是数据库的名称)。为了确定数据库的位置,查询DBA_DIRECTORIES目录。但即使此目录是存在的,也并不意味着可以使用它。必须首先为希望使用Data Pump的任何用户授予读写的权限。
  可以在4个级别上指定用于Data Pump作业的目录。下面按优先级从高到低的顺序排列这些级别:
  (1)  Data Pump作业中每个文件的位置
  (2)  应用于整个Data Pump作业参数
  (3)  DATA_PUMP_DIR环境变量
  (4)  DATA_PUMP_DIR目录对象
 
 
三、使用Data Pump导出
1、调用方式
(1)、expdp test/test@tnsnamedirectory=dump_dir dumpfile=test.tmp nologfile=y
(2)创建参数文件parameter.dat,内容如下:
 dumpfile=userexp.dmp
 logfile=userexp_exp.log
 directory=d_dmp
然后通过expdp命令导出,就可以通过下列方式,不需要在命令行中附加参数和参数值:expdp  username/password@tnsnameparfile=parameter.dat
 
2、Data Pump执行导出
SQL>create directoty dump_file_dir as'/data/backup/dmp';
SQL>grant read,write on directory dump_file_dir tojss;
(1)简单的过滤条件
   expdpusername/password@tnsname directory=dump_file_dir    dumpfile=gyj.dmp nologfile=ytables=(medtrade%%)   query=medtrade_sell_area:\"wheresupply_id=\'fr20t00000040000008872\'\"
(2)高级过滤功能
   创建参数文件zjlpd_tbl.par文件,并保存下列内容:
  directory=dump_file_dir
  dumpfile=zjlpd_med_tbls_20090617.dmp
  logfile=zjlpd_med_tbls_20090617_expdp.log
  include=table:"like 'medtrade%'"
  quefy=medtraed_sell_area:\"where supply_id='fr20t00000040000008872'"
 
(3)跨数据库链方式导出数据(源库trans,本地库lxtrans)
-----------在本地库中建DB_DBLINK连到源库
SQL>conn /as sysdba
SQL>create database link dblink_jbdb connect totrans identified by trans using 'jboracle_gd';
SQL>select sysdate from dual@ dblink_jbdb;
-----------在本地库中建目标,并授权本地要导的用户(lxtrans)
SQL>create directory dump_dir as 'f:\oracle\dmp';
SQL>grant read,write on directory dump_dir tolxtrans;
------导数据(用本地的用户lxtrans导出,加上network_link就可以从远程拉过来)
expdp lxtrans/lxtrans network_link=dblink_jbdb directory=dump_dir dumpfile=trans.dmp logfile=jboracle_gd.log 
 
(4)并行方式导出提高效率(在本地直接用并行)
expdp zfxfzb/zfsoft_zju directory=gyjdumpfile=zjlpd_20090618_%u.dmp filesize=2 parallel=4
 
(5)用DBLINK从一库迁到另一库
impdp system/manager direcotry=db_data
schemas=hr
network_link=devdb.us.oracle.com
flashback_time=2010-08-27 09:00   --指导出特定时间点的表
 
 
四、Data Pump执行导入
1、仅导入对象定义
impdp scott/tiger directory=dump_file_dirdumpfile=scott_20090618.dmp nolog=y content=metadata_only
2、仅导入数据
impdp scott/tiger directory=dump_file_dirdumpfile=scott_20090618.dmp nolog=y content=data_only
3、导入数据时清除对象保存的原数据
----table_exists_action参数用来控制,如果要导入的表对象存在,执行什么操作,有以下几个参数值:skip,append,truncate,repalce
impdp scott/tiger directory=dump_file_dirdumpfile=scott_20090618.dmp nolog=y table_exists_action=replace
4、重定义对象所属schema和表空间
-----导入scott用户中的数据到JSS用户下,scott用户的数据保存在scott_tbs表空间和users表空间中,而JSS用户的默认表空间为jsstbs,并且仅对刻表空间拥有读写权限
impdp jss/jss directory=dump_file_dirdumpfile=scott_20090618.dmp nologfile=y remap_schema=scott:jssremap_tablespace=scott_tbs:jsstbs,users:jsstbs
5、通过NETWORK_LINK导出远端数据到本地数据库
---通过NETWOR_LINK方式导入zj_lpd用户中的数据到本地jss用户下。首先在jss用户中创建一个连接zj_lpd的数据链
SQL>create database link zjlpk_from_db09 connectto zjlpd identified by zj_lpd using '192.168.100.66/DB09'
impdp jss/jss network_link=zjlpd_from_db09nologfile=y remap_schema=zj_lpd:jss remap_tablespace=zj_lpd:jsstbs
6、优化导入效率
impdp jss/jss directory=dump_file_dirdumpfile=zjlpd_2090618.dmp parallel=
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,