--数据泵导出 在本例中,我们将用 Data Pump 来导出一个大表 T , Data Pump 在服务器端使用文件处理来创建和读取文件; 因此,目录作为位置使用。在这种情况下,我们将使用文件系统 F:\DUMPFILE 来保存转储文件。 sys@ORCL> create directory dump_dir as 'F:\DUMPFILE'; 目录已创建。 sys@ORCL> grant read, write on directory dump_dir to admin; 授权成功。 --这里需要在数据库服务器上手工创建F:\DUMPFILE文件夹 接下来,我们将导出数据: expdp admin1/admin1 tables=T directory=dump_dir dumpfile=T.dmp logfile=export_t.log job_name=CASES_EXPORT 让我们来分析该命令的各个部分。用户 ID/ 口令组合、表和转储文件参数的意义是显而易见的。 注意这里的DUMP文件是在服务器(不是客户端)上创建的。位置由目录参数值 dump_dir 指定, 它指向之前创建的 F:\DUMPFILE。 默认下,这个进程还在DUMP目录参数指定的位置上创建一个日志文件export_t.log(同样在服务器上)。 若不指定logfile参数,Oracle仍会创建一个默认为export.log的日志文件 注意上面的参数 job_name,这是个特殊的参数,在原来的导出中没有。所有的 Data Pump 工作都通过作业来完成。 Data Pump 作业 — 与 DBMS 作业不同 — 只是服务器进程,它代表主进程处理数据。主进程(称为主控制进程)通过高级队列 (AQ) 来协调这项工作; 它通过在运行期内创建的一个特殊的表(称为主表)来实现这个目的。在我们的例子中,如果您在 expdp 运行时检查用户 ADMIN 的模式 , 您将注意到一个表 CASES_EXPORT 的存在(对应参数 job_name )。当 expdp 结束时,这个表被丢弃。 --导出日志如下: Export: Release 10.2.0.1.0 - Production on 星期五, 03 1月, 2014 17:43:32 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 启动 "ADMIN1"."CASES_EXPORT": admin1 tables=T directory=dump_dir dumpfile=T.dmp logfile=export_t.log job_name=CASES_EXPORT 正在使用 BLOCKS 方法进行估计... 处理对象类型 TABLE_EXPORT/TABLE/TABLE_DATA 使用 BLOCKS 方法的总估计: 524 MB 处理对象类型 TABLE_EXPORT/TABLE/TABLE 处理对象类型 TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS . . 导出了 "ADMIN1"."T" 453.4 MB 4637568 行 已成功加载/卸载了主表 "ADMIN1"."CASES_EXPORT" ****************************************************************************** ADMIN1.CASES_EXPORT 的转储文件集为: F:\DUMPFILE\T.DMP 作业 "ADMIN1"."CASES_EXPORT" 已于 17:44:34 成功完成 数据库监控 您还可以从数据库视图获得关于运行的 Data Pump 作业的更多信息。监控作业的主视图是 DBA_DATAPUMP_JOBS, 它将告诉您在作业上有多少个工作进程(列 DEGREE )在工作。另一个重要的视图是 DBA_DATAPUMP_SESSIONS, 当它与上述视图和 V$SESSION 结合时将给出主前台进程的会话 SID 。 admin1@ORCL> SELECT * FROM DBA_DATAPUMP_JOBS; OWNER_NAME JOB_NAME OPERATION JOB_MODE STATE DEGREE ATTACHED_SESSIONS DATAPUMP_SESSIONS ---------- --------------- ---------- ---------- ---------- ---------- ----------------- ----------------- ADMIN1 CASES_EXPORT EXPORT TABLE EXECUTING 1 1 3 --导出的SESSION admin1@ORCL> SELECT * FROM DBA_DATAPUMP_SESSIONS; OWNER_NAME JOB_NAME SADDR SESSION_TYPE ---------- --------------- -------- ------------- ADMIN1 CASES_EXPORT BF73F224 DBMS_DATAPUMP ADMIN1 CASES_EXPORT BF728D4C MASTER ADMIN1 CASES_EXPORT BF727A84 WORKER --找出DATAPUMP对应的SID admin1@ORCL> SELECT D.SESSION_TYPE,SID, SERIAL# 2 FROM V$SESSION S, DBA_DATAPUMP_SESSIONS D 3 WHERE S.SADDR = D.SADDR; SESSION_TYPE SID SERIAL# -------------- ---------- ---------- DBMS_DATAPUMP 148 40 MASTER 157 98 WORKER 140 73 --导出监控 当 Data Pump Export (DPE) 运行时,按 Control-C;它将阻止消息在屏幕上显示,但不停止导出进程本身。 相反,它将显示 DPE 提示符(如下所示)。进程现在被认为处于 “ 交互式 ” 模式: Export> 或者重新attach命令重新 连接到JOB expdp admin1/admin1 attach=CASES_EXPORT --连接后如下: C:\Users\Administrator>expdp admin1/admin1 attach=CASES_EXPORT Export: Release 10.2.0.1.0 - Production on 星期五, 03 1月, 2014 18:31:32 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 作业: CASES_EXPORT 所有者: ADMIN1 操作: EXPORT 创建者权限: FALSE GUID: 2DFE3CBF5F9B4B108A1C8C2B688F5186 起始时间: 星期五, 03 1月, 2014 18:30:57 模式: TABLE 实例: orcl 最大并行度: 1 EXPORT 个作业参数: 参数名 参数值: CLIENT_COMMAND admin1 tables=T directory=dump_dir dumpfile=T.dmp logfile=export_t.log job_name=CASES_EXPORT 状态: EXECUTING 处理的字节: 0 当前并行度: 1 作业错误计数: 0 转储文件: F:\DUMPFILE\T.DMP 写入的字节: 8,192 Worker 1 状态: 状态: EXECUTING 对象方案: ADMIN1 对象名: T 对象类型: TABLE_EXPORT/TABLE/TABLE_DATA 完成的对象数: 1 总的对象数: 1 完成的行数: 1,537,932 Worker 并行度: 1 --Export> help 下列命令在交互模式下有效。 注: 允许使用缩写 命令 说明 -------------------------------------------------------------------------- ADD_FILE 向转储文件集中添加转储文件。 CONTINUE_CLIENT 返回到记录模式。如果处于空闲状态, 将重新启动作业。 EXIT_CLIENT 退出客户机会话并使作业处于运行状态。 FILESIZE 后续 ADD_FILE 命令的默认文件大小 (字节)。 HELP 总结交互命令。 KILL_JOB 分离和删除作业。 PARALLEL 更改当前作业的活动 worker 的数目。 PARALLEL=<worker 的数目>。 START_JOB 启动/恢复当前作业。 STATUS 在默认值 (0) 将显示可用时的新状态的情况下, 要监视的频率 (以秒计) 作业状态。 STATUS[=interval] STOP_JOB 顺序关闭执行的作业并退出客户机。 STOP_JOB=IMMEDIATE 将立即关闭 数据泵作业。 --注意 KILL_JOB是真正的停止任务并删除任务,而STOP_JOB只是暂停任务,可以通过START_JOB继续启动任务 --并行操作 您可以通过 PARALLEL 参数为导出使用一个以上的线程来显著地加速作业. 每个线程创建一个单独的转储文件, 因此参数 dumpfile 应当拥有和并行度一样多的项目。您可以指定通配符作为文件名,而不是显式地输入各个文件名,例如: EXPDP ADMIN1/ADMIN1 TABLES=T DIRECTORY=DUMP_DIR DUMPFILE=EXPCASES_%U.DMP PARALLEL=4 JOB_NAME=CASES_EXPORT 注意 dumpfile 参数拥有一个通配符 %U ,它指示文件将按需要创建,格式将为 EXPCASES_NN.dmp ,其中 nn 从 01 开始,然后按需要向上增加。 在并行模式下,状态屏幕将显示四个工作进程。(在默认模式下,只有一个进程是可见的) 所有的工作进程同步取出数据,并在状态屏幕上显示它们的进度。 分离访问数据文件和转储目录文件系统的输入 / 输出通道是很重要的。否则,与维护 Data Pump 作业相关的开销可能超过并行线程的效益, 并因此而降低性能。并行方式只有在表的数量多于并行值并且表很大时才是有效的。 --数据导入 impdp admin1/admin1 directory=dump_dir dumpfile=T.dmp job_name=cases_import 导入进程的默认行为是创建表和所有相关的对象,然后在表已存在时产生一个错误。如果您想把数据添加到一个现有的表中,您可以在上述命令行中使用 TABLE_EXISTS_ACTION=APPEND 。 和使用 Data Pump 导入一样,在进程中按 Control-C 将进入 Date Pump Import (DPI) 的交互模式;同样,提示符是 Import> 。 --处理特定对象 您是否有过只需要从一个用户导出特定的过程,以在一个不同的数据库或用户中重新创建这些过程的情况? 与传统的导出实用工具不同, Data Pump 允许您只导出特定类型的对象。 例如,以下命令让您只导出过程,而不导出其它任何东西 — 不导出表、视图、甚至函数: expdp admin1/admin1 directory=dump_dir dumpfile=exp_admin.dmp include=TABLE 要只导出一些特定的对象 — 比如说,函数 FUNC1 和过程 PROC1 — 您可以使用 expdp admin1/admin1 directory=dump_dir dumpfile=expprocs.dmp include=PROCEDURE:"='PROC1'",FUNCTION:"='FUNC1'" 这个转储文件充当了源对象的一个备份。您甚至可以用它来创建 DDL 脚本,以供之后使用。一个称为 SQLFILE 的特殊参数允许创建 DDL 脚本文件。 impdp ananda/iclaim directory=DPDATA1 dumpfile=expprocs.dmp sqlfile=procs.sql 该指令在 DPDATA1 指定的目录中创建一个名称为 procs.sql 的文件,并将对象的脚本包含在导出转储文件中。这种方法帮助您快速地在另一个模式中创建源对象。 利用参数 INCLUDE 允许您从转储文件中定义要包含或排除的对象。您可以使用子句 INCLUDE=TABLE:"LIKE 'TAB%'" 来仅导出那些名称以 TAB 开头的表。类似地,您可以使用结构 INCLUDE=TABLE:"NOT LIKE 'TAB%'" 来排除所有名称以 TAB 开头的表。 作为另一种选择,您可以使用 EXCLUDE 参数来排除特定的对象。 --EXPDP用法举例: 1)按用户导 EXPDP SCOTT/TIGER@ORCL SCHEMAS=SCOTT DUMPFILE=EXPDP.DMP DIRECTORY=DPDATA1 2)并行进程PARALLEL EXPDP ADMIN1/ADMIN1 TABLES=T DIRECTORY=DUMP_DIR DUMPFILE=EXPCASES_%U.DMP PARALLEL=4 JOB_NAME=CASES_EXPORT 3)按表名导 EXPDP SCOTT/TIGER@ORCL TABLES=EMP,DEPT DUMPFILE=EXPDP.DMP DIRECTORY=DPDATA1 4)按查询条件导 EXPDP SCOTT/TIGER@ORCL DIRECTORY=DPDATA1 DUMPFILE=EXPDP.DMP TABLES=EMP QUERY='WHERE DEPTNO=20' 5)按表空间导 EXPDP SYSTEM/MANAGER DIRECTORY=DPDATA1 DUMPFILE=TABLESPACE.DMP TABLESPACES=TEMP,EXAMPLE 6)导整个数据库 EXPDP SYSTEM/MANAGER DIRECTORY=DPDATA1 DUMPFILE=FULL.DMP FULL=Y --IMPDP用法举例: 1)导到指定用户下 impdp scott/tiger DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=scott; 2)改变表的owner impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp TABLES=scott.dept REMAP_SCHEMA=scott:system; 3)导入表空间 impdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=example; 4)导入数据库 impdb system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=y; 5)追加数据 impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=system TABLE_EXISTS_ACTION --按用户导出实例 C:\Users\Administrator>expdp admin/admin directory=dump_dir dumpfile=admin1.dmp schemas=admin1 Export: Release 10.2.0.1.0 - Production on 星期二, 07 1月, 2014 17:53: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 启动 "ADMIN"."SYS_EXPORT_SCHEMA_01": admin/********/ directory=dump_dir dumpfile=admin1.dmp schemas=admin1 正在使用 BLOCKS 方法进行估计... 处理对象类型 SCHEMA_EXPORT/TABLE/TABLE_DATA 使用 BLOCKS 方法的总估计: 9 MB 处理对象类型 SCHEMA_EXPORT/USER 处理对象类型 SCHEMA_EXPORT/SYSTEM_GRANT 处理对象类型 SCHEMA_EXPORT/ROLE_GRANT 处理对象类型 SCHEMA_EXPORT/DEFAULT_ROLE 处理对象类型 SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA 处理对象类型 SCHEMA_EXPORT/TABLE/TABLE 处理对象类型 SCHEMA_EXPORT/TABLE/INDEX/INDEX 处理对象类型 SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS . . 导出了 "ADMIN1"."T" 6.883 MB 70575 行 已成功加载/卸载了主表 "ADMIN"."SYS_EXPORT_SCHEMA_01" ****************************************************************************** ADMIN.SYS_EXPORT_SCHEMA_01 的转储文件集为: F:\DUMPFILE\ADMIN1.DMP 作业 "ADMIN"."SYS_EXPORT_SCHEMA_01" 已于 17:53:42 成功完成 --注意导出的内容中已包含USER,所以在目标库中不必要额外创建用户 C:\Users\Administrator>impdp admin/admin dumpfile=admin1.dmp directory=dump_dir Import: Release 10.2.0.1.0 - Production on 星期二, 07 1月, 2014 17:54:30 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 已成功加载/卸载了主表 "ADMIN"."SYS_IMPORT_FULL_01" 启动 "ADMIN"."SYS_IMPORT_FULL_01": admin/********/ dumpfile=admin1.dmp directory=dump_dir 处理对象类型 SCHEMA_EXPORT/USER 处理对象类型 SCHEMA_EXPORT/SYSTEM_GRANT 处理对象类型 SCHEMA_EXPORT/ROLE_GRANT 处理对象类型 SCHEMA_EXPORT/DEFAULT_ROLE 处理对象类型 SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA 处理对象类型 SCHEMA_EXPORT/TABLE/TABLE 处理对象类型 SCHEMA_EXPORT/TABLE/TABLE_DATA . . 导入了 "ADMIN1"."T" 6.883 MB 70575 行 处理对象类型 SCHEMA_EXPORT/TABLE/INDEX/INDEX 处理对象类型 SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS 作业 "ADMIN"."SYS_IMPORT_FULL_01" 已于 17:55:46 成功完成 --以下错误是由于要创建的表所在的表空间不存在,所以报错,可以通过REMAP_TABLESPACE=ADMIN1:USERS来将一个方案中的对象加载到另一个方案 ORA-39083: 对象类型 TABLE 创建失败, 出现错误: ORA-00959: 表空间 'ADMIN1' 不存在