开发者社区


C++/C | Java | .Net/Windows | Linux/Unix | 开源 | 其他
首页 - 编程
编程
全文搜索:   

利用Oracle 的数据泵(Data Pump)来完成数据的导入和导出
作者: Scott Stephens
2005-08-09 09:58:02


在Oracle 10g中, exp 和 imp 被重新设计为Oracle Data Pump(虽然Oracle 仍然装载了exp 和imp,并完全地支持它们)。如果你以前使用过exp 和 imp,那么Data Pump 的命令行程序的语法对你来说就不陌生了。

Data Pump 是运行在数据库内部的, 而不是像一个独立的客户端应用程序一样存在。这就意味着这部分的工作在一定程度上独立于发起执行导入或者导出任务的进程 。 在一台机器上 (例如一个定期任务) 可以开始执行导出的任务,而另一台机器上 (例如 DBA 的 手提电脑) 可以对任务的运行状态进行监控。 也正因为任务是运行在数据库内部的,所以如果你要将数据导出到一个文件中,那么你首先要做的事情就是为输出路径建立一个数据库的DIRECTORY 对象,然后给将要进行数据导入和导出的用户授权访问,命令如下:

create or replace directory dumpdir as 'c:';
grant read,write on directory dumpdir to scott;

一旦该路经被授权后,就可以通过以下的命令参数导出用户的对象,这些命令与 exp 和 imp 中的命令非常相似:

expdp scott/tiger directory=dumpdir dumpfile=scott.dmp

当导出工作开始执行以后,可以通过按下[Ctrl]C (或者是客户端中具有相同功能的按键) 来“中止”导出任务。这样就不会再有数据发送到你的客户端了,但是该任务在数据库中仍然还在运行。你的客户端会进入交互模式(出现Export>提示符)。 在提示符后输入status就可以查看到当前有哪些任务正在运行。如果在客户端输入expdp attach=<任务名>,你就可以连接到一个正在运行的任务上。

Data Pump 并不是一定要写入到文件中。现在可以通过选项设置就可以将数据库对象通过SQL*Net直接导到一个远程数据库中。你所要做的就仅仅是指定remote 选项,然后加上与远程数据库连接的连接字符串。 这就有点类似于对数据库的一次性复制过程。

Data Pump 执行起来要比原来的exp 和 imp 客户端命令快得多。Data Pump 运行得更快是因为它有一个新特性——“parallel”选项。选定这个选项后,Data Pump 将会以四个不同的线程同时压送数据。下面举个例子,我先执行下面的任务,然后按 [Ctrl]C,接着察看后台任务的状态:

expdp scott/tiger directory=dumpdir dumpfile=scott2.dmp parallel=4
job_name=scott2

Export: Release 10.1.0.2.0 - Production on Friday, 31 December, 2004 14:54

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

Connected to: Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 -
Production
With the Partitioning, OLAP and Data Mining options
FLASHBACK automatically enabled to preserve database integrity.
Starting "SCOTT"."SCOTT2": scott/******** directory=dumpdir
dumpfile=scott2.dmp parallel=4 job_name=scott2
Estimate in progress using BLOCKS method...

Export> status

Job: SCOTT2
Operation: EXPORT
Mode: SCHEMA
State: EXECUTING
Bytes Processed: 0
Current Parallelism: 4
Job Error Count: 0
Dump File: C:SCOTT2.DMP
bytes written: 4,096

Worker 1 Status:
State: EXECUTING

Worker 2 Status:
State: WORK WAITING

Worker 3 Status:
State: WORK WAITING

Worker 4 Status:
State: WORK WAITING

其实不仅仅只有Data Pump 是在数据库内部运行的,事实上大部分的命令行性质的命令都是在数据库内部运行的,只不过是通过一个PL/SQL API—— DBMS_DATAPUMP显示出来。例如,可以通过以下的PL/SQL代码来实现通过PL/SQL 包启动导出任务:

declare
handle number;
begin
handle := dbms_datapump.open('EXPORT','SCHEMA');
dbms_datapump.add_file(handle,'SCOTT3.DMP','DUMPDIR');
dbms_datapump.metadata_filter(handle,'SCHEMA_EXPR','= ''SCOTT''');
dbms_datapump.set_parallel(handle,4);
dbms_datapump.start_job(handle);
dbms_datapump.detach(handle);
end; /

仔细研究 Data Pump ,你可以了解到 Data Pump 其他更多的新特性。例如,Data Pump 可以对数据文件重命名,可以将对象移动到不同的表空间中,还可以通过使用通配符结构或者是语句来查找图表对象或是图表。Data Pump 还可以用作外部表的接口 (例如,可以将一个表与存储在一个数据泵导出文件中的数据关联起来,这就像Oracle 9i 以及更高版本中的Oracle Loader 接口一样)。

责任编辑:邢胜

欢迎投稿

声明:
Builder.com.cn(原ZDNet China应用开发频道)原创文章版权所有,未经许可严禁转载,且不构成投资建议。
近期相关报道:
实用技术文档
J2me XML
C/C++ C#
Java Oracle
Mysql .Net
VB.NET CSS
SQL Server 数据库
SQL UNIX
Linux Jsp
PHP Perl
Javascript IIS
XHTML ColdFusion
ASP/ASP.NET Apache
AJAX
订阅技术邮件
订阅"技术圈"杂志!请在下面选择您感兴趣的专题,填写e-mail地址,然后按订阅按钮:
应用开发管理
VS.NET 周刊
Database 周刊
WEB Service周刊
JAVA 周刊
IT 认证
Windows服务器周刊
互联网开发
当Windows Server 2008专家得5000元现金大奖
CNET NETWORKS 中国: 爱卡汽车网 | CNET科技资讯网 | e询网 | CWEEK | 蜂鸟网 | GameSpot China | 个人电脑 | PChome | SPN | 网友世界 | ZDNet China | 中关村在线
CNET NETWORKS 美国: BNET | CNET.com | CNET Download.com | CNET News.com | CNET Reviews | CNET Shopper.com | GameSpot | MP3.com | mySimon | Release 1.0 | Search.com | TechRepublic | TV.com | Webshots | ZDNet
Copyright (c) CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
ZDNet 公司标识是 CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号