Oracle 数据泵的使用

--数据泵导出

在本例中,我们将用 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' 不存在

猜你喜欢

转载自yangeoo.iteye.com/blog/2000493