设为首页 收藏本站
查看: 681|回复: 0

[经验分享] oracle 10g imp/exp IMPDP/EXPDP

[复制链接]

尚未签到

发表于 2016-7-22 06:07:15 | 显示全部楼层 |阅读模式
  http://blog.csdn.net/xiaojianpitt/article/details/1897751
  
导出工具(Export)和导入工具(Import)是年头已久的Oracle数据抽取和加载工具,很多个版本中都有这些工具。导出工具的任务是创建一个平台独立的DMP文件(转储文件),其中包含所有必要的元数据(CREATE和ALTER语句形式),可能还有数据本身,可以用于重新创建表、模式甚至整个数据库。导入工具的惟一作用就是读取这些DMP文件,执行其DDL语句,并加载它找到的所有数据。
DMP文件设计为向后兼容,这说明新版本可以读取老版本的DMP,并成功地处理。我听说有人导出过一个Oracle 5的数据库,并将其成功地导入到Oracle 10g中(只是一个测试!)。所以导入工具可以读取老版本的DMP文件,并处理其中的数据。不过,大多数情况下反过来不成立:Oracle9i Release 1的导入工具进程不能(也不会)成功地读取Oracle9i Release 2 或 Oracle 10gRelease 1创建的DMP。例如,我曾经从Oracle 10gRelease 1 和Oracle9i Release 2导出过一个简单的表。我试图在Oracle9i Release 1中使用这些DMP文件时,很快发现Oracle9i Release 1导入工具甚至不打算处理Oracle 10gRelease 1的DMP文件:
http://book.csdn.net/BookFiles/82/03/image076.jpg
http://book.csdn.net/BookFiles/82/03/image077.jpg
处理Oracle9i Release 2文件时,情况也好不到哪儿去:
http://book.csdn.net/BookFiles/82/03/image078.jpg
http://book.csdn.net/BookFiles/82/03/image079.jpg
http://book.csdn.net/BookFiles/82/03/image080.jpg
9i Release 1试图读取文件,但它无法处理其中包含的DDL。Oracle9i Release 2中增加了一个新特性,称为表压缩(table compression)。因此,这个版本的导出工具开始对每条CREATE TABLE语句增加一个NOCOMPRESS或COMPRESS关键字。Oracle9i Release 2的DDL在Oracle9i Release 1中无法执行。
不过,如果对Oracle9i Release 2 或Oracle 10gRelease 1使用Oracle9i Release 1 导出工具,总会得到一个有效的DMP文件,并可以成功地导入到Oracle9i Release 1中。所以,对于DMP文件的规则是:创建DMP文件的Export版本必须小于或等于使用该DMP文件的Import的版本。要将数据导入Oracle9i Release 1中,必须使用Oracle9i Release 1的导出工具(或者也可以使用一个8i的Export进程;创建DMP文件的Export版本必须小于或等于Oracle9i Release 1)。
这些DMP文件是平台独立的,所以可以安全地用任何平台的导出工具创建DMP文件,然后转换到另一个平台,再导入这个DMP文件(只要Oracle版本允许)。不过,对于Windows和文件的FTP传输有一点警告,Windows会默认地把DMP文件当成是一个“文本”文件,并把换行符(UNIX上为行末标记)转换为回车/换行对,这就会完全破坏DMP文件。在Windows中通过FTP传输DMP文件时,要确保所执行的是二进制传输。如果导入不成功,请检查源文件大小和目标文件大小是否一样。这种问题常常导致令人痛苦的异常中止,而不得不重传文件,这种情况发生过多少次我简直都记不清了。
DMP文件是二进制文件,这说明你不能编辑这些文件来进行修改。可以从中抽取大量信息(CREATE DDL),但是不能在文本编辑器(或者实际上任何类型的编辑器)中编辑它们。在第一版的Expert One-on-One Oracle中(你手上的是第二版,本书配套光盘提供了第一版的电子文档),我花了大量篇幅讨论导入和导出工具,并介绍了如何使用DMP文件。随着这些工具越来越失宠,取而代之的是更为灵活的数据泵工具,所以要想全面地了解如何管理导入和导出工具、如何从中抽取数据以及如何使用这些工具,请参考第一版的电子文档。
数据泵(data pump)文件
Oracle 10g中至少有两个工具使用数据泵(data pump)文件格式。外部表(external table)可以加载和卸载数据泵格式的数据,新的导入/导出工具IMPDP和EXPDP 使用这种文件格式的方式与IMP和EXP使用DMP文件格式的方式完全一样。
注意   数据泵格式只在Oracle 10gRelease 1及以后版本中可用,Oracle9i release中没有也不能使用它。

前面提到过对DMP文件的警告,这些警告同样适用于数据泵文件。它们都是跨平台(可移植)的二进制文件,包含有元数据(并非存储为CREATE/ALTER语句,而是作为XML存储),可能还包含数据。数据泵文件使用XML作为元数据表示结构,这一点对你和我这些最终用户来说非常重要。IMPDP和EXPDP有一些复杂的过滤和转换功能,这些在老版本的IMP/EXP 工具中是没有的。从某种程度上讲,这就归功于使用了XML,另外还因为CREATE TABLE语句并非存储为CREATE TABLE,而是存储为一个有标记的文档。这样就能很容易地实现一些请求,如“请把表空间FOO的所有引用替换为表空间BAR”。DMP中元数据存储为CREATE/ALTER语句,导入工具在执行SQL语句之前实际上必须解析每一条SQL语句,才能完成这个工作(做得并不漂亮)。与之不同,IMPDP只需应用一个简单的XML转换就能达到同样的目的,FOO(指一个TABLESPACE)会转换为<TABLESPACE>FOO</TABLESPACE>标记或另外某种表示。
由于使用了XML,这使得EXPDP和IMPDP工具的功能相对于原来的EXP和IMP工具来说有了大幅的提升。在第15章,我们将更深入地介绍这些工具。不过,在此之前,先来看看如何使用数据泵格式快速地从数据库A抽取数据,并移至数据库B。这里我们将使用一个“反过来的外部表”。
外部表(external table)最早在Oracle9i Release 1中引入,利用外部表,我们能像读取数据库表一样读取平面文件(无格式的文本文件),完全可以用SQL来处理外部表。外部表是只读的,设计为从外部向Oracle提供数据。Oracle 10gRelease 1及以上版本中的外部表还可以走另外一条路:用于以数据泵格式从数据库获取数据,以便将数据移至另一台机器(另一个平台)。要完成这个练习,首先需要一个DIRECTORY对象,告诉Oracle卸载的位置:
http://book.csdn.net/BookFiles/82/03/image081.jpg
接下来,从ALL_OBJECTS视图卸载数据。数据可以来自任意查询,涉及我们想要的所有表或SQL构造:
http://book.csdn.net/BookFiles/82/03/image082.jpg
http://book.csdn.net/BookFiles/82/03/image083.jpg
从字面上可以很清楚地看出其含义:在/tmp中有一个名为allobjects.dat的文件,其中包含查询select * from all_objects的内容。可以看一下这个信息:
http://book.csdn.net/BookFiles/82/03/image084.jpg
这只是文件的开头,即最前面的部分;二进制数据表示为……(如果查看这个数据时你的终端发出“嘟嘟”声,不要奇怪)。下面使用二进制FTP传输(DMP文件的警告同样适用!),将这个allobject.dat文件移至一个Windows XP服务器,并创建一个目录对象与之对应:
http://book.csdn.net/BookFiles/82/03/image085.jpg
然后创建一个表指向这个外部表:
http://book.csdn.net/BookFiles/82/03/image086.jpg
http://book.csdn.net/BookFiles/82/03/image087.jpg
现在就能查询从另一个数据库卸载的数据了:
http://book.csdn.net/BookFiles/82/03/image088.jpg
这就是数据泵文件格式的强大之处:如果需要,它能立即通过一个“隐秘的网”将数据从一个系统传输到另一个系统。想想看,有了数据泵,下一次测试时,周末你就能把一部分数据带回家去工作了。
有一点不太明显:这两个数据库的字符集不同。如果你注意以上输出的开头部分,可以发现Linux数据库WE8ISO8859P1的字符集已经编码写入到文件中。我的Windows服务器则有:
http://book.csdn.net/BookFiles/82/03/image089.jpg
归功于数据泵文件格式,Oracle现在能识别不同的字符集,并能加以处理。字符集转换会根据需要动态地完成,使得各个数据库表示中的数据“正确”。
我们还是会在第15章再详细讨论数据泵文件格式,不过通过这一节的介绍,你应该对数据泵文件格式是什么以及这个文件中可能包含什么有一定的认识了。 
平面文件 
<!-- main -->自从有了电子数据处理,就有了平面文件(flat file)。我们每天都会看到平面文件。前面讨论的警告日志就是一个平面文件。
我在Web上看到有关“平面文件”的以下定义,觉得这些定义实在太绕了:
平面文件是去除了所有特定应用(程序)格式的电子记录,从而使数据元素可以迁移到其他的应用上进行处理。这种去除电子数据格式的模式可以避免因为硬件和专有软件的过时而导致数据丢失。
平面文件是一种计算机文件,所有信息都在一个信号字符串中。
实际上,平面文件只是这样一个文件,其中每一“行”都是一个“记录”,而且每行都有一些定界的文本,通常用逗号或管道符号(竖线)分隔。通过使用遗留的数据加载工具SQLLDR或外部表,Oracle可以很容易地读取平面文件,实际上,我会在第15章详细讨论这个内容(还会在第10章谈到外部表)。不过,Oracle生成平面文件可就不那么容易了,不管由于什么原因,确实没有一个简单的命令行工具能把信息导出到一个平面文件中。诸如HTML DB和企业管理器之类的工具有助于完成这个过程,但是并没有一个官方的命令行工具可以轻松地在脚本中用来完成这个操作。
正是出于这个原因,所以我决定在这一章对平面文件说两句,我提议能有一些生成简单平面文件的工具。多年来,为此我开发过3种方法,每种方法都各有特点。第一种方法是使用PL/SQL和UTL_FILE(利用动态SQL)来完成任务。如果数据量不大(几百或几千行),这个工具则有足够的灵活性,速度也不错。不过,它必须在数据库服务器主机上创建文件,但有时我们并不想在数据库服务器上创建文件。因此,我又开发了一个 SQL*Plus实用程序,可以在运行SQL*Plus的机器上创建平面文件。由于SQL*Plus可以连接网络上任何位置的Oracle服务器,所以能从网络上的任何数据库把任何数据卸载到一个平面文件中。最后,如果速度要求很高,那么非C莫属。为此,我还开发了一个Pro*C命令行卸载工具来生成平面文件。这些工具都可以从http://asktom.oracle.com/~tkyte/flat/index.html免费得到,另外我还会在这里提供为了把数据卸载到平面文件而开发的新工具。

<!-- page -->

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-247484-1-1.html 上篇帖子: Oracle角色、权限、用户相关知识(转载) 下篇帖子: Oracle 学习笔记: Oracle10g重新配置Database Control
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表