| 订阅 | 在线投稿
分享
 
 
 

教你怎样在Oracle数据库中高速导出/导入

2008-10-30 08:14:24 编辑來源:互联网 国际版 评论
 
 
本文为【教你怎样在Oracle数据库中高速导出/导入】的汉字拼音对照版显示拼音
  qijinweizhidaochu/daorugongjujirengshikuaduogepingtaizhuanyishujusuoxulaodongqiangduzuixiaodeshouxuanshiyonggongjujinguanrenmenchangchangbaoyuantasudutaimandaoruzhishijiangmeitiaojilucongdaochuzhuanchuwenjianzhongduchulairanhou使shiyongchangjiande INSERT INTO minglingjiangqicharudaomubiaobiaozhongyincidaorukenengshigehenmandeguochengzheyidianbingburangrengandaochijing

  jinru Oracle Data PumpOracle Database 10g zhongdedaochu/daorugongjubaodegengxingengkuaidetongleigongjutabeishejilaichengbeidijiasuzhegeguocheng

  Data Pump fanyanglezhenggedaochu/daoruguochengdechedigexintabushi使shiyongchangjiande SQL minglingershiyingyongzhuanyong API laiyigengkuaideduodesudujiazaihexiezaishujuzaiwodeceshizhongwokandaodaochuxingnengbizaizhijiemoshixiatigaole 10-15 beidaoruguochengxingnengtigaole 5 beiciwaiyu使shiyongdaochushiyonggongjubutongtahuannenggouzhiquchutedingleixingdeduixiangruguocheng

  Data Pump daochu

  zhegexindeshiyonggongjuchengwei expdpyiheyuanlaidedaochu exp qufenkaizaibenlizhongwomenjiangyong Data Pump laidaochuyigedabiao CASESdaxiaoyuewei 3GBData Pump zaifuwuqiduan使shiyongwenjianchulilaichuangjianheduquwenjianyincimuluzuoweiweizhi使shiyongzaizhezhongqingkuangxiawomenjiang使shiyongwenjianxitong /u02/dpdata1 laibaocunzhuanchuwenjian

  create directory dpdata1 as '/u02/dpdata1';

  grant read, write on directory dpdata1 to ananda;

  

  jiexialaiwomenjiangdaochushuju

  expdp ananda/abc123 tables=CASES directory=DPDATA1

  dumpfile=expCASES.dmp job_name=CASES_EXPORT

  rangwomenlaifenxigaiminglingdegegebufenyonghu ID/koulingzuhebiaohezhuanchuwenjianshenshudeyiyishixianeryijiandeyuyuanlaidedaochubutongwenjianshizaifuwuqibushikehuduanshangchuangjiandeweizhiyoumulushenshuzhi DPDATA1 zhidingtazhixiangzhiqianchuangjiande /u02/dpdata1zhegejinchenghuanzaimulushenshuzhidingdeweizhishangchuangjianyigerizhiwenjiantongyangzaifuwuqishangmorendizhegejincheng使shiyongyigemingchengwei DPUMP_DIR demuluyincikeyichuangjiantalaidaiti DPDATA1

  zhuyishangmiandeshenshu job_namezheshigeteshudeshenshuzaiyuanlaidedaochuzhongmeiyousuoyoude Data Pump gongzuodoutongguozuoyelaiwanchengData Pump zuoye yu DBMS zuoyebutong zhishifuwuqijinchengtadaibiaozhujinchengchulishujuzhujinchengchengweizhukongzhijinchengtongguogaojiduilie (AQ) laixietiaozhexianggongzuotatongguozaiyunxingqineichuangjiandeyigeteshudebiaochengweizhubiaolaishixianzhegemudezaiwomendelizizhongruguoninzai expdp yunxingshijianchayonghu ANANDA demoshi ninjiangzhuyidaoyigebiao CASES_EXPORT decunzaiduiyingshenshu job_namedang expdp jieshushizhegebiaobeidiuqi

  daochujiankong

  dang Data Pump Export (DPE) yunxingshian Control-Ctajiangzuzhixiaoxizaipingmushangxianshidanbutingzhidaochujinchengbenshenxiangfantajiangxianshi DPE tishifuruxiasuoshijinchengxianzaibeirenweichuyujiaohushimoshi

  Export>

  zhezhongfangfayuanxuzaizhege DPE zuoyeshangshurujitiaominglingyaochakangaiyaozaitishifuxia使shiyong STATUS mingling

  Export> status

  Job:CASES_EXPORT

  Operation:EXPORT

  Mode:TABLE

  State:EXECUTING

  Degree: 1

  Job Error Count: 0

  Dump file:/u02/dpdata1/expCASES.dmp

  bytes written =2048

  Worker 1 Status:

  StateEXECUTING

  Object Schema:DWOWNER

  Object Name:CASES

  Object Type:TABLE_EXPORT/TBL_TABLE_DATA/TABLE/TABLE_DATA

  Completed Objects: 1

  Total Objects: 1

  Completed Rows: 4687818

  

  jizhuzhezhishizhuangtaixianshidaochuzaihoutaigongzuoyaojixuzaipingmushangchakanxiaoxicong Export> tishifuxia使shiyongmingling CONTINUE_CLIENT

  bingxingcaozuo

  ninkeyitongguo PARALLEL shenshuweidaochu使shiyongyigeyishangde线xianchenglaixianzhudijiasuzuoyemeige线xianchengchuangjianyigedandudezhuanchuwenjianyincishenshu dumpfile yingdangyongyouhebingxingduyiyangduodexiangmuninkeyizhidingtongpeifuzuoweiwenjianmingerbushixianshidishurugegewenjianmingliru

  expdp ananda/abc123 tables=CASES directory=DPDATA1

  dumpfile=expCASES_%U.dmp parallel=4 job_name=Cases_Export

  zhuyi dumpfile shenshuyongyouyigetongpeifu %Utazhishiwenjianjianganxuyaochuangjiangeshijiangwei expCASES_nn.dmpqizhong nn cong 01 kaishiranhouanxuyaoxiangshangzengjia

  zaibingxingmoshixiazhuangtaipingmujiangxianshisigegongzuojinchengzaimorenmoshixiazhiyouyigejinchengshikejiandesuoyoudegongzuojinchengtongbuquchushujubingzaizhuangtaipingmushangxianshitamendejindu

  fenli访fangwenshujuwenjianhezhuanchumuluwenjianxitongdeshuru/shuchutongdaoshihenchongyaodefouzeyuweihu Data Pump zuoyexiangguandekaixiaokenengchaoguobingxing线xianchengdexiaoyibingyincierjiangdixingnengbingxingfangshizhiyouzaibiaodeshuliangduoyubingxingzhibingqiebiaohendashicaishiyouxiaode

  shujukujiankong

  ninhuankeyicongshujukushituhuodeguanyuyunxingde Data Pump zuoyedegengduoxinxijiankongzuoyedezhushitushi DBA_DATAPUMP_JOBStajianggaosuninzaizuoyeshangyouduoshaogegongzuojinchenglie DEGREEzaigongzuolingyigechongyaodeshitushi DBA_DATAPUMP_SESSIONSdangtayushangshushituhe V$SESSION jieheshijianggeichuzhuqiantaijinchengdehuihua SID

  select sid, serial#

  from v$session s, dba_datapump_sessions d

  where s.saddr = d.saddr;

  

  zhetiaozhilingxianshiqiantaijinchengdehuihuagengduoyouyongdexinxikeyicongjingbaorizhizhonghuodedangjinchengqidongshiMCP hegongzuojinchengzaijingbaorizhizhongxianshiruxia

  kupprdp:master process DM00 started with pid=23,

   OS id=20530 to execute -

  SYS.KUPM$MCP.MAIN('CASES_EXPORT', 'ANANDA');

  kupprdp:worker process DW01 started with worker

   id=1, pid=24, OS id=20532 to execute -

  SYS.KUPW$WORKER.MAIN('CASES_EXPORT', 'ANANDA');

  kupprdp:worker process DW03 started with worker

   id=2, pid=25, OS id=20534 to execute -

  SYS.KUPW$WORKER.MAIN('CASES_EXPORT', 'ANANDA');

  

  taxianshiweishujubengcaozuoqidongdehuihuade PIDninkeyiyongyixiachaxunzhaodaoshijide SID

  select sid, program from v$session where paddr in

  (select addr from v$process where pid in (23,24,25));

  

  PROGRAM liejiangduiyingjingbaorizhiwenjianzhongdemingchengxianshijincheng DM weizhujinchenghuo DW weigongzuojinchengruguoyigegongzuojincheng使shiyonglebingxingchaxunbirushuo SID 23ninkeyizaishitu V$PX_SESSION zhongkandaotabingbatazhaochulaitajiangweininxianshicong SID 23 daibiaodegongzuojinchengzhongyunxingdesuoyoubingxingchaxunhuihua

  select sid from v$px_session where qcsid = 23;

  

  congshitu V$SESSION_LONGOPS zhongkeyihuodeqitadeyouyongxinxilaiyucewanchengzuoyejianghuafeideshijian

  select sid, serial#, sofar, totalwork

  from v$session_longops

  where opname = 'CASES_EXPORT'

  and sofar != totalwork;

  

  lie totalwork xianshizonggongzuolianggailiede sofar shuliangbeijiahedaodangqiandeshike yinerninkeyiyongtalaigujihuanyaohuaduochangshijian

  Data Pump daoru

  buguoshujudaoruxingnengshi Data Pump zhenzhengchusededifangyaodaoruxianqiandaochudeshujuwomenjiang使shiyong

  impdp ananda/abc123 directory=dpdata1

   dumpfile=expCASES.dmp job_name=cases_import

  daorujinchengdemorenxingweishichuangjianbiaohesuoyouxiangguandeduixiangranhouzaibiaoyicunzaishichanshengyigecuowuruguoninxiangbashujutianjiadaoyigexianyoudebiaozhongninkeyizaishangshuminglingxingzhong使shiyong TABLE_EXISTS_ACTION=APPEND

  he使shiyong Data Pump daoruyiyangzaijinchengzhongan Control-C jiangjinru Date Pump Import (DPI) dejiaohumoshitongyangtishifushi Import>

  chulitedingduixiang

  ninshifouyouguozhixuyaocongyigeyonghudaochutedingdeguochengyizaiyigebutongdeshujukuhuoyonghuzhongchongxinchuangjianzhexieguochengdeqingkuangyuchuantongdedaochushiyonggongjubutongData Pump yuanxuninzhidaochutedingleixingdeduixiangliruyixiaminglingrangninzhidaochuguochengerbudaochuqitarenhedong西xi budaochubiaoshitushenzhihanshu

  expdp ananda/iclaim directory=DPDATA1

   dumpfile=expprocs.dmp include=PROCEDURE

  

  yaozhidaochuyixietedingdeduixiang birushuohanshu FUNC1 heguocheng PROC1 ninkeyi使shiyong

  

  expdp ananda/iclaim directory=DPDATA1 dumpfile=expprocs.dmp

  include=PROCEDURE:\"=\'PROC1\'\",FUNCTION:\"=\'FUNC1\'\"

  

  zhegezhuanchuwenjianchongdangleyuanduixiangdeyigebeifenninshenzhikeyiyongtalaichuangjian DDL jiaobenyigongzhihou使shiyongyigechengwei SQLFILE deteshushenshuyuanxuchuangjian DDL jiaobenwenjian

  

  impdp ananda/iclaim directory=DPDATA1

   dumpfile=expprocs.dmp sqlfile=procs.sql

  

  gaizhilingzai DPDATA1 zhidingdemuluzhongchuangjianyigemingchengwei procs.sql dewenjianbingjiangduixiangdejiaobenbaohanzaidaochuzhuanchuwenjianzhongzhezhongfangfabangzhuninkuaisudizailingyigemoshizhongchuangjianyuanduixiang

  liyongshenshu INCLUDE yuanxunincongzhuanchuwenjianzhongdingyiyaobaohanhuopaichudeduixiangninkeyi使shiyongziju INCLUDE=TABLE:"LIKE 'TAB%'" laijindaochunaxiemingchengyi TAB kaitoudebiaoleisidininkeyi使shiyongjiegou INCLUDE=TABLE:"NOT LIKE 'TAB%'" laipaichusuoyoumingchengyi TAB kaitoudebiaozuoweilingyizhongxuanzeninkeyi使shiyong EXCLUDE shenshulaipaichutedingdeduixiang

  tongguowaibubiaoData Pump huankeyiyonglaichuanshubiaokongjiantafeichangqiangdanenggoujishidichongdingyibingxingfangshijianggengduodebiaotianjiadaoyigexianyoudejinchengzhongdengdeng原文
 
 
迄今为止,导出/导入工具集仍是跨多个平台转移数据所需劳动强度最小的首选实用工具,尽管人们常常抱怨它速度太慢。导入只是将每条记录从导出转储文件中读出来,然后使用常见的 INSERT INTO 命令将其插入到目标表中,因此导入可能是个很慢的过程,这一点并不让人感到吃惊。 进入 Oracle Data Pump,Oracle Database 10g 中的导出/导入工具包的更新更快的同类工具,它被设计来成倍地加速这个过程。 Data Pump 反映了整个导出/导入过程的彻底革新。它不是使用常见的 SQL 命令,而是应用专用 API 来以更快得多的速度加载和卸载数据。在我的测试中,我看到导出性能比在直接模式下提高了 10-15 倍,导入过程性能提高了 5 倍。此外,与使用导出实用工具不同,它还能够只取出特定类型的对象(如过程)。 Data Pump 导出 这个新的实用工具称为 expdp,以和原来的导出 exp 区分开。在本例中,我们将用 Data Pump 来导出一个大表 CASES,大小约为 3GB。Data Pump 在服务器端使用文件处理来创建和读取文件;因此,目录作为位置使用。在这种情况下,我们将使用文件系统 /u02/dpdata1 来保存转储文件。      create directory dpdata1 as '/u02/dpdata1';   grant read, write on directory dpdata1 to ananda;     接下来,我们将导出数据:      expdp ananda/abc123 tables=CASES directory=DPDATA1   dumpfile=expCASES.dmp job_name=CASES_EXPORT 让我们来分析该命令的各个部分。用户 ID/口令组合、表和转储文件参数的意义是显而易见的。与原来的导出不同,文件是在服务器(不是客户端)上创建的。位置由目录参数值 DPDATA1 指定,它指向之前创建的 /u02/dpdata1。这个进程还在目录参数指定的位置上创建一个日志文件(同样在服务器上)。默认地,这个进程使用一个名称为 DPUMP_DIR 的目录;因此可以创建它来代替 DPDATA1。 注意上面的参数 job_name,这是个特殊的参数,在原来的导出中没有。所有的 Data Pump 工作都通过作业来完成。Data Pump 作业 — 与 DBMS 作业不同 — 只是服务器进程,它代表主进程处理数据。主进程(称为主控制进程)通过高级队列 (AQ) 来协调这项工作;它通过在运行期内创建的一个特殊的表(称为主表)来实现这个目的。在我们的例子中,如果您在 expdp 运行时检查用户 ANANDA 的模式 ,您将注意到一个表 CASES_EXPORT 的存在(对应参数 job_name)。当 expdp 结束时,这个表被丢弃。 导出监控 当 Data Pump Export (DPE) 运行时,按 Control-C;它将阻止消息在屏幕上显示,但不停止导出进程本身。相反,它将显示 DPE 提示符(如下所示)。进程现在被认为处于“交互式”模式: Export> 这种方法允许在这个 DPE 作业上输入几条命令。要查看概要,在提示符下使用 STATUS 命令:      Export> status   Job:CASES_EXPORT   Operation:EXPORT               Mode:TABLE                State:EXECUTING              Degree: 1   Job Error Count: 0   Dump file:/u02/dpdata1/expCASES.dmp   bytes written = 2048      Worker 1 Status:   State:EXECUTING              Object Schema:DWOWNER   Object Name:CASES   Object Type:TABLE_EXPORT/TBL_TABLE_DATA/TABLE/TABLE_DATA   Completed Objects: 1   Total Objects: 1   Completed Rows: 4687818     记住,这只是状态显示。导出在后台工作。要继续在屏幕上查看消息,从 Export> 提示符下使用命令 CONTINUE_CLIENT。 并行操作 您可以通过 PARALLEL 参数为导出使用一个以上的线程来显著地加速作业。每个线程创建一个单独的转储文件,因此参数 dumpfile 应当拥有和并行度一样多的项目。您可以指定通配符作为文件名,而不是显式地输入各个文件名,例如:      expdp ananda/abc123 tables=CASES directory=DPDATA1   dumpfile=expCASES_%U.dmp parallel=4 job_name=Cases_Export 注意 dumpfile 参数拥有一个通配符 %U,它指示文件将按需要创建,格式将为 expCASES_nn.dmp,其中 nn 从 01 开始,然后按需要向上增加。 在并行模式下,状态屏幕将显示四个工作进程。(在默认模式下,只有一个进程是可见的。)所有的工作进程同步取出数据,并在状态屏幕上显示它们的进度。 分离访问数据文件和转储目录文件系统的输入/输出通道是很重要的。否则,与维护 Data Pump 作业相关的开销可能超过并行线程的效益,并因此而降低性能。并行方式只有在表的数量多于并行值并且表很大时才是有效的。 数据库监控 您还可以从数据库视图获得关于运行的 Data Pump 作业的更多信息。监控作业的主视图是 DBA_DATAPUMP_JOBS,它将告诉您在作业上有多少个工作进程(列 DEGREE)在工作。另一个重要的视图是 DBA_DATAPUMP_SESSIONS,当它与上述视图和 V$SESSION 结合时将给出主前台进程的会话 SID。      select sid, serial#   from v$session s, dba_datapump_sessions d   where s.saddr = d.saddr;     这条指令显示前台进程的会话。更多有用的信息可以从警报日志中获得。当进程启动时,MCP 和工作进程在警报日志中显示如下:      kupprdp:master process DM00 started with pid=23, OS id=20530 to execute -   SYS.KUPM$MCP.MAIN('CASES_EXPORT', 'ANANDA');      kupprdp:worker process DW01 started with worker id=1, pid=24, OS id=20532 to execute -   SYS.KUPW$WORKER.MAIN('CASES_EXPORT', 'ANANDA');      kupprdp:worker process DW03 started with worker id=2, pid=25, OS id=20534 to execute -   SYS.KUPW$WORKER.MAIN('CASES_EXPORT', 'ANANDA');     它显示为数据泵操作启动的会话的 PID。您可以用以下查询找到实际的 SID:      select sid, program from v$session where paddr in   (select addr from v$process where pid in (23,24,25));     PROGRAM 列将对应警报日志文件中的名称显示进程 DM (为主进程)或 DW (为工作进程)。如果一个工作进程使用了并行查询,比如说 SID 23,您可以在视图 V$PX_SESSION 中看到它,并把它找出来。它将为您显示从 SID 23 代表的工作进程中运行的所有并行查询会话:      select sid from v$px_session where qcsid = 23;     从视图 V$SESSION_LONGOPS 中可以获得其它的有用信息来预测完成作业将花费的时间。      select sid, serial#, sofar, totalwork   from v$session_longops   where opname = 'CASES_EXPORT'   and sofar != totalwork;     列 totalwork 显示总工作量,该列的 sofar 数量被加和到当前的时刻 — 因而您可以用它来估计还要花多长时间。 Data Pump 导入 不过,数据导入性能是 Data Pump 真正出色的地方。要导入先前导出的数据,我们将使用      impdp ananda/abc123 directory=dpdata1 dumpfile=expCASES.dmp job_name=cases_import 导入进程的默认行为是创建表和所有相关的对象,然后在表已存在时产生一个错误。如果您想把数据添加到一个现有的表中,您可以在上述命令行中使用 TABLE_EXISTS_ACTION=APPEND。 和使用 Data Pump 导入一样,在进程中按 Control-C 将进入 Date Pump Import (DPI) 的交互模式;同样,提示符是 Import>。 处理特定对象 您是否有过只需要从一个用户导出特定的过程,以在一个不同的数据库或用户中重新创建这些过程的情况?与传统的导出实用工具不同,Data Pump 允许您只导出特定类型的对象。例如,以下命令让您只导出过程,而不导出其它任何东西 — 不导出表、视图、甚至函数:      expdp ananda/iclaim directory=DPDATA1 dumpfile=expprocs.dmp include=PROCEDURE     要只导出一些特定的对象 — 比如说,函数 FUNC1 和过程 PROC1 — 您可以使用       expdp ananda/iclaim directory=DPDATA1 dumpfile=expprocs.dmp   include=PROCEDURE:\"=\'PROC1\'\",FUNCTION:\"=\'FUNC1\'\"    这个转储文件充当了源对象的一个备份。您甚至可以用它来创建 DDL 脚本,以供之后使用。一个称为 SQLFILE 的特殊参数允许创建 DDL 脚本文件。       impdp ananda/iclaim directory=DPDATA1 dumpfile=expprocs.dmp sqlfile=procs.sql    该指令在 DPDATA1 指定的目录中创建一个名称为 procs.sql 的文件,并将对象的脚本包含在导出转储文件中。这种方法帮助您快速地在另一个模式中创建源对象。 利用参数 INCLUDE 允许您从转储文件中定义要包含或排除的对象。您可以使用子句 INCLUDE=TABLE:"LIKE 'TAB%'" 来仅导出那些名称以 TAB 开头的表。类似地,您可以使用结构 INCLUDE=TABLE:"NOT LIKE 'TAB%'" 来排除所有名称以 TAB 开头的表。作为另一种选择,您可以使用 EXCLUDE 参数来排除特定的对象。 通过外部表,Data Pump 还可以用来传输表空间;它非常强大,能够即时地重定义并行方式,将更多的表添加到一个现有的进程中等等。
󰈣󰈤
 
 
>>返回首页<<
 为你推荐
 
 
 
 转载本文
 UBB代码 HTML代码
复制到剪贴板...
 
 
 热帖排行
 
 
王朝网络微信公众号
微信扫码关注本站公众号wangchaonetcn
 
  免责声明:本文仅代表作者个人观点,与王朝网络无关。王朝网络登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
©2005- 王朝网络 版权所有