您的位置:首页 > 数据库 > Oracle

Oracle 10g 及之后导出/导入(Datapump Export/Import)工具

2013-03-10 10:19 696 查看

本文内容

数据泵与传统的 IMP/EXP 工具的区别
开始使用 datapump 导出
创建数据库目录
再次尝试导出
导入另一个数据库
网络导入
从 PL/SQL 调用
Oracle 11g Release 1 (11.1) Data Pump 导出和导入概述
Oracle 11g Release 1 (11.1) Data Pump 导出和导入模式
参考资料
修改记录
导出/导入是逻辑备份,用于数据迁移,不能跟冷备份和热备份相比。

从 Oracle 10 g 开始,Oracle 引入了一个新的导入和导出工具数据泵(Oracle Data pump),是一个服务,基于大容量数据迁移的结构,用来取代传统的 IMP/EXP 工具。数据泵与传统的导入/导出工具完全不同。传统的 IMP/EXP 是 Oracle 最古老的两个命令行工具,但不支持所有的 Oracle 10g 和 11g 的功能。这个新的工具名为 expdp 和 impdp。

数据泵与传统的 IMP/EXP 工具的区别

传统的 IMP/EXP 工具,都作为客户端程序运行,如果在导出过程中发生网络中断或客户端程序异常,都会导致导出操作失败;而数据泵主要工作在服务器端,通过新的 API 来建立和管理,主要由 DBMS_DATAPUMP 来完成。数据泵完全成为一个客户端应用,IMPDP/EXPDP 执行的命令实际上都是在调用服务器端的 API 在执行操作,一旦一个任务被调度或执行,客户端就可以退出连接,任务会在服务端继续运行。
传统的 IMP/EXP 工具,是单线程操作,这在很多情况下成为一个瓶颈;而数据泵多线程的,建立多个数据泵工作进程来读/写正在被导出/导入的数据,也可以建立并行IO服务器进行。
此外,数据泵还有其他优势。其实,它们的差异都归于结构的差异。传统的 IMP/EXP 完成是在客户端进行,而数据泵是在调用服务端的 API。

 

开始用 datapump 导出

[code]     [code]$ expdp scott/tiger DIRECTORY=dmpdir DUMPFILE=scott.dmp


 


Export: Release 10.2.0.1.0 - 64bit Production on Friday, 31 March,  2006 11:36:07


Copyright (c) 2003, 2005, Oracle.  All rights reserved.


 


Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production


With the Partitioning, OLAP and Data Mining options


 


ORA-39002: invalid operation


ORA-39070: Unable to open the log file.


ORA-39087: directory name DMPDIR is invalid

[/code]
[/code]


说明:

"dmpdir" 为导出目录;

"scott.dmp" 为导出的 datadump 文件;

scott 用户下的表在默认表空间 USERS 和临时表空间 TEMP 下。所以这个命令将 scott 用户把自己的表(对象)导出来;

因为,Oracle 已经有这两个表空间,所以,直接导入即可。但是,如果是自己创建的表空间,就先要创建这个表空间,然后再导入。



导出失败了!因为,我们需要先创建目录!

 

创建数据库目录

执行如下命令,创建一个数据库导出目录。该目录必须指向一个同一个服务器的有效目录作为数据库:

[code]
[code]SQL> CREATE DIRECTORY dmpdir AS '/opt/oracle';


Directory created.


 


SQL> GRANT read, write ON DIRECTORY dmpdir TO scott;


Grant succeeded.

[/code]
[/code]


说明:

"dmpdir" 为导出目录,"/opt/oracle" 为数据库路径(也可以操作系统的绝对路径,如"d:\db_backup");

导出目录授权。让 scott 用户对该目录可读写。这样,scott 用户才能正常访问该目录,将数据库内容和导出的日志文件放在这里。



备注:Oracle 从 Oracle 10g R2 开始,引入了一个称为 "DATA_PUMP_DIR" 的默认目录,如下所示:

[code]
[code]SQL> SELECT directory_path FROM dba_directories WHERE directory_name = 'DATA_PUMP_DIR';


 


DIRECTORY_PATH


--------------------------------------------------------------------------------


/app/oracle/product/10.2.0/rdbms/log/

[/code]
[/code]

 

再次尝试导出

[code]
[code]$ expdp scott/tiger DIRECTORY=dmpdir DUMPFILE=scott.dmp


 


Export: Release 10.2.0.1.0 - 64bit Production on Friday, 31 March, 2006 11:41:02


Copyright (c) 2003, 2005, Oracle.  All rights reserved.


 


Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production


With the Partitioning, OLAP and Data Mining options


Starting "SCOTT"."SYS_EXPORT_SCHEMA_01":  scott/********  DIRECTORY=dmpdir DUMPFILE=scott.dmp


Estimate in progress using BLOCKS method...


Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA


Total estimation using BLOCKS method: 175.2 MB


Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA


Processing object type SCHEMA_EXPORT/TYPE/TYPE_SPEC


Processing object type SCHEMA_EXPORT/TABLE/TABLE


Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX


Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT


Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS


Processing object type SCHEMA_EXPORT/TABLE/COMMENT


Processing object type SCHEMA_EXPORT/PACKAGE/PACKAGE_SPEC


Processing object type SCHEMA_EXPORT/PROCEDURE/PROCEDURE


Processing object type SCHEMA_EXPORT/PACKAGE/COMPILE_PACKAGE/PACKAGE_SPEC/ALTER_PACKAGE_SPEC


Processing object type SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE


Processing object type SCHEMA_EXPORT/PACKAGE/PACKAGE_BODY


Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT


Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS


Processing object type SCHEMA_EXPORT/JOB


. . exported "SCOTT"."BIGEMP"                            145.2 MB 3670016 rows


. . exported "SCOTT"."DEPT"                              5.656 KB       4 rows


. . exported "SCOTT"."EMP"                               7.820 KB      14 rows


. . exported "SCOTT"."ORD_CHARGE_TAB"                    5.296 KB       2 rows


. . exported "SCOTT"."SALGRADE"                          5.585 KB       5 rows


. . exported "SCOTT"."BONUS"                                 0 KB       0 rows


. . exported "SCOTT"."NEWOBJECT1_T"                          0 KB       0 rows


. . exported "SCOTT"."T1"                                    0 KB       0 rows


Master table "SCOTT"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded


******************************************************************************


Dump file set for SCOTT.SYS_EXPORT_SCHEMA_01 is:


/app/oracle/scott.dmp


Job "SCOTT"."SYS_EXPORT_SCHEMA_01" successfully completed at 11:44:50

[/code]
[/code]

 

导入到另一个数据库

[code]
[code]$ impdp system/oracle DIRECTORY=dmpdir DUMPFILE=scott.dmp


 


Import: Release 10.2.0.1.0 - 64bit Production on Friday, 31 March, 2006 12:00:59


Copyright (c) 2003, 2005, Oracle.  All rights reserved.


 


Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production


With the Partitioning, OLAP and Data Mining options


Master table "SYSTEM"."SYS_IMPORT_FULL_02" successfully loaded/unloaded


Starting "SYSTEM"."SYS_IMPORT_FULL_02":  system/******** DIRECTORY=dmpdir DUMPFILE=scott.dmp


Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA


Processing object type SCHEMA_EXPORT/TYPE/TYPE_SPEC


Processing object type SCHEMA_EXPORT/TABLE/TABLE


Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA


. . imported "SCOTT"."BIGEMP"                            145.2 MB 3670016 rows


. . imported "SCOTT"."DEPT"                              5.656 KB       4 rows


. . imported "SCOTT"."EMP"                               7.820 KB      14 rows


. . imported "SCOTT"."ORD_CHARGE_TAB"                    5.296 KB       2 rows


. . imported "SCOTT"."SALGRADE"                          5.585 KB       5 rows


. . imported "SCOTT"."BONUS"                                 0 KB       0 rows


. . imported "SCOTT"."NEWOBJECT1_T"                          0 KB       0 rows


. . imported "SCOTT"."T1"                                    0 KB       0 rows


Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX


Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT


Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS


Processing object type SCHEMA_EXPORT/PACKAGE/PACKAGE_SPEC


Processing object type SCHEMA_EXPORT/PROCEDURE/PROCEDURE


Processing object type SCHEMA_EXPORT/PACKAGE/COMPILE_PACKAGE/PACKAGE_SPEC/ALTER_PACKAGE_SPEC


Processing object type SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE


Processing object type SCHEMA_EXPORT/PACKAGE/PACKAGE_BODY


Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT


Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS


Processing object type SCHEMA_EXPORT/JOB


Job "SYSTEM"."SYS_IMPORT_FULL_02" successfully completed at 12:02:22

[/code]
[/code]


备注:

expdp 和 impdp 命令都是操作系统下执行;

而创建导出目录,并为其授权,都是 SQL PLUS 下执行。

以上例子对于刚开始的你已经足够。更多信息,请参看 Oracle 工具指南。输入下面命令可以列出该命令的所有参数。

[code]
[code]$ expdp help=yes


$ impdp help=yes

[/code]
[/code]


 

网络导入

通过网络模式导入,不需要任何中间的 dump 文件。数据,通过一个数据库链路(database link)导出,直接导入到目标数据库。例如:

[code]
[code]SQL> create user new_scott identified by tiger;


User created.


 


SQL> grant connect, resource to new_scott;


Grant succeeded.


 


SQL> grant read, write on directory dmpdir to new_scott;


Grant succeeded.


 


SQL> grant create database link to new_scott;


Grant succeeded.

[/code]
[/code]

 

[code]
[code]SQL> conn new_Scott/tiger


Connected.


 


SQL> create database link old_scott connect to scott identified by tiger  using 'orcl.oracle.com';


Database link created.

[/code]
[/code]

 

[code]
[code]$ impdp new_scott/tiger DIRECTORY=dmpdir NETWORK_LINK=old_scott remap_schema=scott:new_scott

[/code]
[/code]

所有的工作在目标操作系统上完成。唯一一个到源操作系统的引用是通过数据库链路(database link)。

 

从 PL/SQL 调用

可以从 PL/SQL 调用 datapump。这对于每天或每周计划用 DBMS_SCHEDULER 导出很方便。

[code]
[code]DECLARE


hand NUMBER;


BEGIN


hand := Dbms_DataPump.Open(operation => 'EXPORT',


job_mode => 'FULL',


job_name => 'FULLEXPJOB',


version => 'COMPATIBLE');


Dbms_DataPump.Add_File(handle => hand,


filename => 'expdp_plsql.log',


directory => 'DMPDIR',


filetype => 3);


Dbms_DataPump.Add_File(handle => hand,


filename => 'expdp_plsql.dmp',


directory => 'DMPDIR',


filetype => 1);


-- Dbms_DataPump.Set_Parameter(handle => hand,


--                               name => 'ESTIMATE',


--                              value => 'STATISTICS');


Dbms_DataPump.Start_Job(hand);


END;


/

[/code]
[/code]

 


说明

一般情况下,导出/入不会遇到太多问题,只要注意一下几点就行:

导出目录必须存在,否则导出工具无法写 export.log 导出文件日志,会报 Ora 错误;

导出使用的用户必须对导出目录有读写权限。这个显而易见;

导入时,相应的表空间和用户必须已存在。这个也显而易见。

注意这三点,一般都会成功导出/导入。



 

上面是 Datapump 导出/导入的步骤。下面概述一下该工具。

 

Oracle 11g Release 1 (11.1) Data Pump 导出和导入概述

Oracle Data Pump(数据泵)技术可以使数据和元数据高速地从一个数据库移动到另一个数据库。该技术是 Oracle数据库数据移动实用工具 Data Pump Export 和 Import 的基础。也就是说,导出/导入工具是基于 Oracle 数据泵技术。

Data Pump 可以让你指定作业是否移动数据和元数据的一个子集。这是通过 Export 和 Import 参数,使用数据过滤和元数据过滤来完成。

Data Pump 导出

Data Pump 导出是一个把数据和元数据卸载到一个称为“转储文件集(dump file )”操作系统文件集的工具。转储文件集可以移动到另一个系统,并通过 Data Pump 导入工具加载。

转储文件集是由一个或多个包含表数据、数据库对象元数据和控制信息的磁盘文件组成。这些文件以专有的、二进制格式写入,只有 Data Pump 导入工具可以读取。导入期间,Data Pump Import 工具使用这些文件在转存文件集中定位每个数据库对象。

Data Pump 导入

Data Pump 导入是一个把导出的转存文件集加载到目标系统。转储文件集是由一个或多个包含表数据、数据库对象元数据和控制信息的磁盘文件组成。这些文件以专有的、二进制格式写入。

导入也可以用于直接从源数据库加载到目标数据库加载,而无需转储文件,使得导出和导入操作同时进行,最大限度地减少总时间。这称为“网络导入”。

导入也可以让你看到导入作业正在执行的所有 SQL DDL,而不实际执行的 SQL。这是通过导入 SQLFILE 参数完成的。

Data Pump API

Data Pump API 提供一个高速的机制,把所有或部分数据和元数据从一个数据库移动到另一个数据库。若使用 Data Pump API,你可以使用 DBMS_DATAPUMP PL/SQL 包提供的存储过程。Data Pump Export 和 Data Pump Import 实用工具是基于 Data Pump API。

Metadata API

元数据用程序编程接口( Metadata API)为你提供一个途径完成以下工作:

检索一个对象的 XML 元数据

以多种不同的方式传输 XML,包括把它传输到 SQL DDL

提交 XML 以通过检索重建提取的对象

若使用元数据 API,您可以使用 DBMS_METADATA PL/SQL 包中提供的存储过程。元数据的目的,数据库中的每个实体都被模型化一个对象,它属于一个对象类型。例如,scott.emp 表是一个对象,它的对象的类型是 TABLE。当你获取一个对象的元数据时,必须指定对象类型。

 

Oracle 11g Release 1 (11.1) Data Pump 导出和导入模式

导出模式

/article/4963887.html

导入模式

/article/4963888.html

 

参考资料

Oracle 11g Release 1 (11.1) Documents Oracle Data Pump http://docs.oracle.com/cd/B28359_01/server.111/b28319/dp_overview.htm#CEGIEFIJ

Oracle 11g Release 1 (11.1) Documents 最初的导出/导入工具 exp/imp http://docs.oracle.com/cd/B28359_01/server.111/b28319/exp_imp.htm#g1070082

Oracle 11g Release 1 (11.1) Data Pump 导出模式 http://docs.oracle.com/cd/B28359_01/server.111/b28319/dp_export.htm#i1007114

Oracle 11g Release 1 (11.1) Data Pump 导入模式 http://docs.oracle.com/cd/B28359_01/server.111/b28319/dp_import.htm#i1007324

Oracle 11g Release 1 (11.1) Data Pump API:DBMS_DATAPUMP http://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_datpmp.htm#i1007277

Oracle 11g Release 1 (11.1) Metadata API:DBMS_METADATA http://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_metada.htm#i1015856

Oracle 10g 以前的导出/入工具(exp/imp) http://www.orafaq.com/wiki/Import_Export_FAQ

Oracle 工具 http://www.orafaq.com/wiki/Category:Utilities

Oracle 10g 及之后导出/导入(Datapump Export/Import)工具

http://www.orafaq.com/wiki/Data_Pump

http://www.orafaq.com/wiki/Datapump

 

修改记录

第一次 2012-04-09 [UPDATE][ADD]

第二次 2012-04-11 [UPDATE][ADD]

第三次 2013-03-09 [ADD]

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: