第 4 周
高速的导出/导入:oracle data pump 【相关文章:在Internet上用通过.Net Re】 【扩展阅读:一对多关联的数据库在VB.NET中如何新】迄今为止,导出/导入工具集仍是跨多个平台转移数据所需劳动强度最小的首选实用工具,尽管人们常常抱怨它速度太慢。导入只是将每条记录从导出转储文件中读出来,然后使用常见的 insert into 命令将其插入到目标表中,因此导入可能是个很慢的过程,这一点并不让人感到吃惊。 【扩展信息:shark工作流源代码学习(四)】
利用 oracle database 10g 实用工具数据移动得到了很大的提高。
进入 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>
... 下一页