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' 不存在
--数据泵导出
在本例中,我们将用 Data Pump 来导出一个大表 T , Data Pump