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文件:
处理Oracle9i Release 2文件时,情况也好不到哪儿去:
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卸载的位置:
接下来,从ALL_OBJECTS视图卸载数据。数据可以来自任意查询,涉及我们想要的所有表或SQL构造:
从字面上可以很清楚地看出其含义:在/tmp中有一个名为allobjects.dat的文件,其中包含查询select * from all_objects的内容。可以看一下这个信息:
这只是文件的开头,即最前面的部分;二进制数据表示为……(如果查看这个数据时你的终端发出“嘟嘟”声,不要奇怪)。下面使用二进制FTP传输(DMP文件的警告同样适用!),将这个allobject.dat文件移至一个Windows XP服务器,并创建一个目录对象与之对应:
然后创建一个表指向这个外部表:
现在就能查询从另一个数据库卸载的数据了:
这就是数据泵文件格式的强大之处:如果需要,它能立即通过一个“隐秘的网”将数据从一个系统传输到另一个系统。想想看,有了数据泵,下一次测试时,周末你就能把一部分数据带回家去工作了。
有一点不太明显:这两个数据库的字符集不同。如果你注意以上输出的开头部分,可以发现Linux数据库WE8ISO8859P1的字符集已经编码写入到文件中。我的Windows服务器则有:
归功于数据泵文件格式,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 -->
分享到:
相关推荐
在 Oracle 10g 及其以上版本中,expdp 和 impdp 命令取代了传统的 exp 和 imp 命令,提供了更多的功能和选项。expdp 命令可以将数据导出到文件中,impdp 命令可以将数据从文件中导入到数据库中。 使用 imp/exp 命令...
ORACLE EXPDP/IMPDP 是 Oracle 数据库中用于数据泵导出导入的工具,分别对应 EXP 和 IMP 工具。EXPDP/IMPDP 的出现使得 DBA 或开发人员可以将数据库元数据(对象定义)和数据快速移动到另一个 Oracle 数据库中。 ...
impdp 和 expdp 命令可以实现 Oracle 数据库之间的数据传输,例如从 Oracle 10g 到 Oracle 11g 的数据传输。 impdp 命令的基本格式为:impdp 用户名/密码@例程名 DUMPFILE=data.dmp version=Oracle 版本号 其中,...
- 在较新的Oracle版本中,如12c及以上,Oracle提供了Data Pump(expdp/impdp)工具,其性能优于传统的IMP/EXP,支持更大的数据量和更复杂的导出导入需求。 总结,Oracle 11g的IMP和EXP工具在数据管理和迁移中起着...
- **简介**:作为Oracle 10g版本引入的新一代备份工具,expdp/impdp通过改进的数据传输机制显著提高了备份效率。 - **优点**:性能优异,支持并行处理,可高效处理大规模数据。 - **缺点**:配置相对复杂,对系统...
Oracle 10g 引入了新的数据泵工具 expdp 和 impdp,它们是对传统 exp 和 imp 工具的增强版本。数据泵(Data Pump)技术提升了数据迁移、备份和恢复的性能,提供了更快的数据传输速度和更丰富的功能。 expdp(Export...
以上介绍了Oracle 11g与Oracle 10g之间数据迁移的相关知识点,包括IMP/EXP和IMPDP/EXPDP工具的特性和使用方法,以及具体的步骤示例。通过这些工具和方法,我们可以高效地进行数据库数据的迁移工作。
### Oracle 10G 使用数据泵 (EXPDP 和 IMPDP) #### 一、概述 Oracle 数据泵(Data Pump)是 Oracle 10g 版本引入的一种高效的数据导入导出工具,它通过 EXPDP 和 IMPDP 命令提供了一种快速的方法来迁移数据库对象...
总的来说,Oracle 10g的`imp.exe`问题需要通过分析错误、检查系统环境、验证文件完整性和调整权限等多个方面来解决。理解这些知识点有助于更好地管理和维护Oracle数据库,确保数据的安全和可用性。
在 Oracle 10g 以后,expdp 和 impdp 工具被引入,以提供更好的导入和导出功能。使用这些工具,可以轻松地导入和导出数据。 1. 创建逻辑目录 create directory db_bak as 'd:\test\dump'; 2. 授予操作权限 grant...
2. **Data Pump导出与导入**:Oracle Data Pump是Oracle 10g及后续版本引入的一种高性能数据传输机制,它比传统的EXP/IMP(Export/Import)工具更为高效。Data Pump导出(expdp)和导入(impdp)使用并行处理来提高...
Oracle Instant Client通常不包含`exp`和`imp`,但可以使用`expdp`和`impdp`作为Data Pump的替代。这两个命令的工作方式类似,只是使用了新的语法和选项。例如,`expdp`用于导出数据,而`impdp`用于导入数据。 5. ...
4. **使用 expdp 和 impdp**:从 Oracle 10g 开始,引入了新的数据泵工具 expdp 和 impdp,它们提供了更丰富的导出和导入选项。使用这些工具,即使空表也能被导出。例如: - 创建逻辑目录:`create directory db_...
为了解决 exp/imp 工具的缺点,oracle 在 10g 之后引入了数据泵 expdp/impdp 工具。数据泵 expdp/impdp 工具的最大优点之一就是效率,虽然测试没有达到 oracle 宣传的导出导入速度,但是确实比 exp/imp 有了一个量级...
它提供了比传统EXP/IMP更快的导出和导入性能,同时支持并行处理和压缩选项,使得数据操作更加高效。本篇文章将详细讲解如何使用DMP文件进行数据的导出与导入。 ### 一、导出(expdp) 1. **命令格式**: ``` expdp...
Oracle数据库是世界上最广泛使用的数据库系统之一,特别是在大型企业级应用中。...无论是传统的exp/imp还是增强的expdp/impdp,它们都是数据库管理员的重要工具,为日常维护和数据管理提供了强大支持。
在Oracle10g的早期版本中,即10.1.0.2,expdp与impdp一起,为用户提供了比传统IMP和EXP工具更快速、更灵活的数据迁移解决方案。 描述中提到的问题在于服务端和客户端版本不匹配。在Oracle环境中,服务端和客户端...