SQL> create directory dpump_dir as 'e:\dumpdir';
目录已创建。
SQL> grant read,write on directory dpump_dir to sjh;
授权成功。
SQL> select * from dba_directories where directory_name='DPUMP_DIR';
OWNER DIRECTORY_NAME
------------------------------ ------------------------------
DIRECTORY_PATH
--------------------------------------------------------------------
SYS DPUMP_DIR
e:\dumpdir
--使用之前需要创建目录并授权。
C:\>expdp sjh/sjh directory=dpump_dir dumpfile='sjh.dmp'
Export: Release 10.2.0.1.0 - Production on 星期五, 12 6月, 2009 14:38:01
Copyright (c) 2003, 2005, Oracle. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
启动 "SJH"."SYS_EXPORT_SCHEMA_01": sjh/******** directory=dpump_dir dumpfile='s
jh.dmp'
正在使用 BLOCKS 方法进行估计...
处理对象类型 SCHEMA_EXPORT/TABLE/TABLE_DATA
Export> stop_job
是否确实要停止此作业 ([Y]/N):
C:\>
SQL> select * from dba_datapump_jobs;
OWNER_NAME JOB_NAME
------------------------------ ------------------------------
OPERATION
------------------------------------------------------------
JOB_MODE
------------------------------------------------------------
STATE DEGREE ATTACHED_SESSIONS DATAPUMP_SESSIONS
------------------------------ ---------- ----------------- -----------------
SJH SYS_EXPORT_SCHEMA_01
EXPORT
SCHEMA
NOT RUNNING 0 0 0
--这时sjh.dmp的大小是4k。expdp作为一个job可以停止。
C:\>expdp sjh/sjh attach=SYS_EXPORT_SCHEMA_01
Export: Release 10.2.0.1.0 - Production on 星期五, 12 6月, 2009 14:44:20
Copyright (c) 2003, 2005, Oracle. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
作业: SYS_EXPORT_SCHEMA_01
所有者: SJH
操作: EXPORT
创建者权限: FALSE
GUID: E58C19D70E6C40099B138084B5A43031
起始时间: 星期五, 12 6月, 2009 14:44:22
模式: SCHEMA
实例: orasjh
最大并行度: 1
EXPORT 个作业参数:
参数名 参数值:
CLIENT_COMMAND sjh/******** directory=dpump_dir dumpfile='sjh.dmp'
状态: IDLING
处理的字节: 0
当前并行度: 1
作业错误计数: 0
转储文件: e:\dumpdir\sjh.dmp
写入的字节: 4,096
Worker 1 状态:
状态: UNDEFINED
Export> start_job
Export> exit
SQL> select * from dba_datapump_jobs;
未选定行
--重新链接job_name接着执行该导出任务。如果导出的过程你按ctrl + c 这时并没有中断导出过程。
SQL> select table_name from dba_tables where owner='SJH';
TABLE_NAME
------------------------------
TEST
H
EMP
DEPT
TEST1
SQL> drop table sjh.test;
表已删除。
SQL> drop table sjh.h;
表已删除。
C:\>impdp sjh/sjh directory=dpump_dir dumpfile=sjh.dmp include=table:\"in('TEST'
,'H')\"
Import: Release 10.2.0.1.0 - Production on 星期五, 12 6月, 2009 15:41:29
Copyright (c) 2003, 2005, Oracle. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
已成功加载/卸载了主表 "SJH"."SYS_IMPORT_FULL_01"
启动 "SJH"."SYS_IMPORT_FULL_01": sjh/******** directory=dpump_dir dumpfile=sjh.
dmp include=table:"in('TEST','H')"
处理对象类型 SCHEMA_EXPORT/TABLE/TABLE
处理对象类型 SCHEMA_EXPORT/TABLE/TABLE_DATA
. . 导入了 "SJH"."H" 5.242 KB 4 行
. . 导入了 "SJH"."TEST" 4.968 KB 3 行
处理对象类型 SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
作业 "SJH"."SYS_IMPORT_FULL_01" 已于 15:42:38 成功完成
SQL> select table_name from dba_tables where owner='SJH';
TABLE_NAME
------------------------------
EMP
DEPT
TEST1
H
TEST
--这里介绍了include的用法,同时还有exclude。比较以前的exp/imp这是个改进。但这两个不能同时使用。
C:\>impdp sjh/sjh directory=dpump_dir dumpfile=sjh.dmp include=table:\"in('TEST'
,'H')\" TABLE_EXISTS_ACTION=replace
Import: Release 10.2.0.1.0 - Production on 星期五, 12 6月, 2009 15:44:03
Copyright (c) 2003, 2005, Oracle. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
已成功加载/卸载了主表 "SJH"."SYS_IMPORT_FULL_01"
启动 "SJH"."SYS_IMPORT_FULL_01": sjh/******** directory=dpump_dir dumpfile=sjh.
dmp include=table:"in('TEST','H')" TABLE_EXISTS_ACTION=replace
处理对象类型 SCHEMA_EXPORT/TABLE/TABLE
处理对象类型 SCHEMA_EXPORT/TABLE/TABLE_DATA
. . 导入了 "SJH"."H" 5.242 KB 4 行
. . 导入了 "SJH"."TEST" 4.968 KB 3 行
处理对象类型 SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
作业 "SJH"."SYS_IMPORT_FULL_01" 已于 15:44:13 成功完成
--TABLE_EXISTS_ACTION还有几个选项,具体看help。
最后对这个工具做个简单的理论概述:
在Oracle 10g中,数据泵(Data Pump)的所有工作都有数据库实例来完成,数据库可以并行来处理这些工作,不仅可以通过建立多个数据泵工作进程来读/写正在被导出/导入的数据,也可以建立并行I/O服务器以更快地读取或插入数据,从而,单进程瓶颈被彻底解决。
通过数据泵,以前通过EXP/IMP主要基于Client/Server的逻辑备份方式转换为服务器端的快速备份,数据泵主要工作在服务器端,可以通过并行方式快速装入或卸载数据,而且可以在运行过程中调整并行的程度,以加快或减少资源消耗。
数据泵通过新的API来建立和管理,这些新的工作主要由DBMS_DATAPUMP来完成。新的导入/导出工具完全成为了一个客户端应用,通过IMPDP/EXPDP执行的命令实际上都是在调用Server端的API在执行操作,所以一旦一个任务被调度或执行,客户端就可以推出连接,任务会在server端继续执行,随后通过客户端实用程序从任何地方检查任务的状态和进行修改。