Chinaunix首页 | 论坛 | 博客
  • 博客访问: 436848
  • 博文数量: 55
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1584
  • 用 户 组: 普通用户
  • 注册时间: 2013-05-04 15:15
个人简介

热衷技术,热爱交流

文章分类

全部博文(55)

文章存档

2014年(7)

2013年(48)

分类: Oracle

2013-08-25 22:06:53

1 数据泵与传统工具exp/imp优劣比较

1.1 优势

(1)Exp/imp是客户端工具,导入导出的效率受到网络影响;数据泵是服务器端工具,直接把转储文件导入到数据库上,不受网路影响。

(2)Exp/imp通常是单线程工作;数据泵实际是实例活动,可以多进程,多cpu并行处理,充分利用硬件资源。

(3)Imp/exp工具必须一次性完成,数据泵支持断续工作。

(4)数据泵优化了默认参数,避免了因为没有设置正确的buffer造成效率底下。

(5)数据泵支持交互操作。

(6)Exp/imp工具仅仅支持trigger, INDEXES、GRANDS、TRIGGERS、CONSTRAINTS和STATISTICS对象的过滤,数据泵则通过include和exclude支持任意类型对象过滤。

(7)对于一些类似功能如指定表空间、过滤导出、加密、压缩,数据泵也做了一些优化,使得效率更高,操作更加简单。

1.2 劣势

(1)数据泵只能在数据库上操作,exp/imp是客户端工具,操作简单方便。

(2)Exp/imp适用于各版本的数据库,支持跨版本数据迁移,数据泵是10g新出的工具,只适用于10g以后的数据库。

综上所述,数据泵远远强于传统工具,下面情况下才考虑使用exp/imp工具

(1)无法直接登录到数据库的操作系统;

(2)网络状况良好,而且导出的数据量很少(例如小表迁移);

(3)据库从9i迁移到高版本;

2 帮助信息:

查看expdp工具的帮助信息,着重关注其功能描述以及默认值。

C:\Users\Administrator>expdp  help=y

数据泵导出实用程序提供了一种用于在 Oracle 数据库之间传输

数据对象的机制。该实用程序可以使用以下命令进行调用:

   示例: expdp scott/tiger DIRECTORY=dmpdir DUMPFILE=scott.dmp

您可以控制导出的运行方式。具体方法是: 在 'expdp' 命令后输入

各种参数。要指定各参数, 请使用关键字:

   格式:  expdp KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)

   示例: expdp scott/tiger DUMPFILE=scott.dmp DIRECTORY=dmpdir SCHEMAS=scott

               或 TABLES=(T1:P1,T1:P2), 如果 T1 是分区表

USERID 必须是命令行中的第一个参数。

关键字               说明 (默认)

------------------------------------------------------------------------------

ATTACH                连接到现有作业, 例如 ATTACH [=作业名]。

COMPRESSION           减小有效的转储文件内容的大小

                      关键字值为: (METADATA_ONLY) 和 NONE。

CONTENT               指定要卸载的数据, 其中有效关键字为:

                      (ALL), DATA_ONLY 和 METADATA_ONLY。

DIRECTORY             供转储文件和日志文件使用的目录对象。

DUMPFILE              目标转储文件 (expdat.dmp) 的列表,

                      例如 DUMPFILE=scott1.dmp, scott2.dmp, dmpdir:scott3.dmp。

ENCRYPTION_PASSWORD   用于创建加密列数据的口令关键字。

ESTIMATE              计算作业估计值, 其中有效关键字为:

                      (BLOCKS) 和 STATISTICS。

ESTIMATE_ONLY         在不执行导出的情况下计算作业估计值。

EXCLUDE               排除特定的对象类型, 例如 EXCLUDE=TABLE:EMP。

FILESIZE              以字节为单位指定每个转储文件的大小。

FLASHBACK_SCN         用于将会话快照设置回以前状态的 SCN。

FLASHBACK_TIME        用于获取最接近指定时间的 SCN 的时间。

FULL                  导出整个数据库 (N)。

HELP                  显示帮助消息 (N)。

INCLUDE               包括特定的对象类型, 例如 INCLUDE=TABLE_DATA。

JOB_NAME              要创建的导出作业的名称。

LOGFILE               日志文件名 (export.log)。

NETWORK_LINK          链接到源系统的远程数据库的名称。

NOLOGFILE             不写入日志文件 (N)。

PARALLEL              更改当前作业的活动 worker 的数目。

PARFILE               指定参数文件。

QUERY                 用于导出表的子集的谓词子句。

SAMPLE                要导出的数据的百分比;

SCHEMAS               要导出的方案的列表 (登录方案)。

STATUS                在默认值 (0) 将显示可用时的新状态的情况下,

                      要监视的频率 (以秒计) 作业状态。

TABLES                标识要导出的表的列表 - 只有一个方案。

TABLESPACES           标识要导出的表空间的列表。

TRANSPORT_FULL_CHECK  验证所有表的存储段 (N)。

TRANSPORT_TABLESPACES 要从中卸载元数据的表空间的列表。

VERSION               要导出的对象的版本, 其中有效关键字为:

                      (COMPATIBLE), LATEST 或任何有效的数据库版本。

下面从一系列实验出发,重点突出数据泵和传统工具的区别。       

3 使用数据泵进行数据导出和导入:

讨论使用数据泵进行数据导入和导出,可以从实际需求出发,参照imp/exp的讨论路线

3.1 单表导出

需求:把system用户的表student导出,而且只需导出age !=50 的记录。

源和数据库操作系统和oracle版本均一致:

服务器:windows server 2008 R2 

Oracle:10.2.0.4

(1)登录数据库,建立directory

oracle[~]$sqlplus system/talent@191.255.255.249/hr

SYSTEM >create or replace directory expdir as 'd:\expdir';

由于数据泵是服务器端工具,执行导入时候,需要指定把转储文件导出到什么目录,这里的directory就是这个作用。在指定目录时,还要注意,服务器端是否已经有这个目录,如果没有则新建。

C:\Users\Administrator>mkdir d:\expdir

(2)查看已经建立的directory:

SYSTEM >select * from dba_directories;
OWNER     |DIRECTORY_NAME                |DIRECTORY_PATH
----------|------------------------------|--------------------------------------------------
SYS       |DATA_PUMP_DIR                 |C:\oracle\product\10.2.0/admin/hr/dpdump/
SYS       |ORACLE_OCM_CONFIG_DIR         |C:\oracle\product\10.2.0\db_1/ccr/state

SYS       |EXPDIR                        |d:\expdir


3 rows selected.

这里建立的directory所有者是sys,如果其他用户要使用这个direcory,需要授权,否则无法读写这个目录:

SYSTEM >grant read,write on directory expdir to hr;

(3)使用下列脚本进行单表导出:

@echo off

sqlplus system/talent@localhost/hr @student.sql

文件student.sql:

column time new_val ok 

select to_char(sysdate,'yyyy-mm-dd') time from dual;

host expdp "'system/talent@localhost/hr'" dumpfile=stuent_&ok..dmp tables=student% query='where age != 50'  logfile=student_&ok..log

exit

(4)导出日志包含下列内容:

Db.log:

Data Pump default directory object created: 

directory object name: DATA_PUMP_DIR 

creation date: 21-2月 -2013 10:39

通过日志看到,由于没有指定directory,导出时候使用系统默认的directory:DATA_PUMP_DIR,可以手动设置这个环境变量。如果没有指定导出文件名和日志文件名,导出的dmp文件和日志文件都自动写到了这个目录,dmp文件名名为expdp.dmp,日志文件名是exp.log。最好指定directory,还要注意授权,让导出时使用的用户对这个directory具备读写权限:

column time new_val ok 
select to_char(sysdate,'yyyy-mm-dd') time from dual;
host expdp "'system/talent@localhost/hr'" dumpfile=stuent_&ok..dmp tables=student%  query='where age != 50'   directory=expdir logfile=student_&ok..log

3.2 单表数据导入

3.2.1 Content

导入时候,如果这表已经存在,会提示失败。Imp导入时候通过ingore=y选项跳过这个错误,继续插入数据,impdp则通过更灵活的参数contents跳过错误:

Content选项的三个值:

All:表示把元数据和数据一起导入.

data_only:表示只是追加数据

metadata_only:表示只导入表元数据,相当于exp中的rows=n。

C:\Users\Administrator>impdp system/talent dumpfile=STUENT_2013-08-25.DMP directory=expdir  tables=student content=data_only

3.2.2 过滤导入

imp导入时,如果要忽略索引,可以通过index=n实现,impdp实现则更加灵活一些

C:\Users\Administrator>impdp system/talent dumpfile=STUENT_2013-08-25.DMP directory=expdir  tables=student content=data_only  EXCLUDE=INDEX

3.2.3 导入数据给其他用户

Imp导入时候,使用fromuser/touser选项指定导入的用户,expdp使用remap_schema选项导入数据给其他用户:

C:\Users\Administrator>impdp system/talent dumpfile=STUENT_2013-08-25.DMP directory=expdir  tables=student content=all  remap_schema=system:hr

3.2.4 指定表空间

和imp一样,导入时候是数据写入表在源数据库中的表空间,如果目的库不存在对应的表空间时,导入会失败。impdp导入时候可以指定表空间,十分灵活。

C:\Users\Administrator>impdp system/talent dumpfile=STUENT_2013-08-25.DMP directory=expdir  tables=student content=all  remap_schema=system:hr  remap_tablespace=system: hr_SYSTEM_DATA

3.3 模式对象导出

3.3.1 Estimate评估

模式对象导出时,如果导出的数据较多,可以先用estimate参数评估工作量:

Statistics参数有两个值:blocks(默认)和statistics,两者区别:

expdp "'system/talent@localhost/hr'"  schemas=hr directory=expdir logfile=student_&ok..log  estimate_only=y estimate=statistics


连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

启动 "SYSTEM"."SYS_EXPORT_SCHEMA_01":  "system/********@localhost/hr" schemas=hr directory=expdir logfile=student_2013-08-25.log estimate_only=y estimate=statistics 

正在使用 STATISTICS 方法进行估计...

处理对象类型 SCHEMA_EXPORT/TABLE/TABLE_DATA

.  预计为 "hr"."TEST11"                              391.6 MB

.  预计为 "hr"."hr_D_LEAKAGEBASE"                   14.77 MB

.  预计为 "hr"."hr_D_PATCHBASE"                     8.520 MB

.  预计为 "hr

.  预计为 "hr"."WF_WORKPROCESS_INS"                      0 KB

.  预计为 "hr"."WF_WORKPROCESS_MSG"                      0 KB

使用 STATISTICS 方法的总估计: 419.6 MB


作业 "SYSTEM"."SYS_EXPORT_SCHEMA_01" 已于 16:58:59 成功完成

expdp "'system/talent@localhost/hr'"  schemas=hr directory=expdir logfile=student_&ok..log  estimate_only=y estimate=blocks

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

启动 "SYSTEM"."SYS_EXPORT_SCHEMA_01":  "system/********@localhost/hr" schemas=hr directory=expdir logfile=student_2013-08-25.log estimate_only=y estimate=blocks 

正在使用 BLOCKS 方法进行估计...

处理对象类型 SCHEMA_EXPORT/TABLE/TABLE_DATA

.  预计为 "hr"."TEST11"                              5.363 GB

.  预计为 "hr"."hr_D_LEAKAGEBASE"                      19 MB

.  预计为 "hr"."hr_D_PATCHBASE"                        11 MB

.  预计为 "hr"."hr_RESOURCE"                            5 MB

.  预计为 "hr"."AAS_AUDIT_REC"                           3 MB

.  预计为 "hr"."AAS_POLICY"                              2 MB

.  预计为 "hr"."AAS_RESOURCE_SYSTEM"                     2 MB

.  预计为 "hr"."AAS_USER"                                2 MB

.  预计为 "hr"."RPT_DEF"                                 2 MB

.  预计为 "hr"."AAS_RESOURCE_DOMAIN"                  1024 KB

.  预计为 "hr"."NMS_PORTOFVLAN"                          0 KB

.  预计为 "hr"."NMS_PORTRESOURCE"                        0 KB

.  预计为 "hr"."NMS_SCANDEVICEINFO"                      0 KB

使用 BLOCKS 方法的总估计: 5.466 GB

作业 "SYSTEM"."SYS_EXPORT_SCHEMA_01" 已于 17:02:12 成功完成

3.3.2 过滤导出

使用exp工具进行模式对象导出时,可以根据trigger, INDEXES、GRANDS、TRIGGERS、CONSTRAINTS和STATISTICS进行过滤,expdp可以通过include和exclude参数过滤任意对象。

例如:如果仅仅需要导出函数和序列,可以按照如下方法进行:

C:\Users\Administrator>expdp "'hr/hr@localhost/hr'"  schemas=hr directory=expdir dumpfile=hr2.dmp logfile=hr2.log job_name=hr include=function include=sequence

3.3.3 调整并行度

为了充分利用CPU和I/O资源,导入时候可以调整并行度:

impdp "'system/talent@localhost/hr'"  schemas=hr directory=expdir dumpfile=hr.dmp logfile=hr1.log job_name=hr   parallel=2  exclude=table:"""LIKE 'student%'"""

使用imp导入时,模式对象必须已经存在;使用expdp导入,如果模式不存在,可以自动建立,并且根据源库中的属性自动设置相关属性,例如权限、默认表空间和临时表空间等。

3.3.4 交互操作

在导出时,expdp把传统的exp/imp导出方式转化为了内部的job任务,这样可以手动控制任务,进行暂停、删除与重启等交互操作:

例如:

expdp "'system/talent@localhost/hr'"  schemas=hr directory=expdir logfile=student_&ok..log job_name=hr 

使用job_name选项后,数据库会为system模式生成一个名字为hr的表,用于记录导出导入进度,Job完成后自动卸载这个表。
导出过程中可以使用ctrl+c进入交互模式。

Export>

查看帮助

Export> help

下列命令在交互模式下有效。

注: 允许使用缩写

命令               说明

------------------------------------------------------------------------------

ADD_FILE              向转储文件集中添加转储文件。

CONTINUE_CLIENT       返回到记录模式。如果处于空闲状态, 将重新启动作业。

EXIT_CLIENT           退出客户机会话并使作业处于运行状态。

FILESIZE              后续 ADD_FILE 命令的默认文件大小 (字节)。

HELP                  总结交互命令。

KILL_JOB              分离和删除作业。

PARALLEL              更改当前作业的活动 worker 的数目。

                      PARALLEL=

START_JOB             启动/恢复当前作业。

STATUS                在默认值 (0) 将显示可用时的新状态的情况下,

                      要监视的频率 (以秒计) 作业状态。

                      STATUS[=interval]

STOP_JOB              顺序关闭执行的作业并退出客户机。

                      STOP_JOB=IMMEDIATE 将立即关闭

                      数据泵作业。

查看当前状态

Export> status

作业: hr

  操作: EXPORT

  模式: SCHEMA

  状态: EXECUTING

  处理的字节: 0

  当前并行度: 1

  作业错误计数: 0

  转储文件: D:\EXPDIR\hr.DMP

    写入的字节: 4,096


Worker 1 状态:

  状态: EXECUTING

  对象方案: hr

  对象名: WF_STATE_POINT

  对象类型: SCHEMA_EXPORT/TABLE/TABLE

  完成的对象数: 173

  Worker 并行度: 1

暂停job

Export> stop_job

是否确实要停止此作业 ([Y]/N): yes
停止后就退出了这次任务,可以下次连上来,重新开始:

C:\Users\Administrator>expdp "'system/talent@localhost/hr'"   attach=hr

作业: hr

  所有者: SYSTEM

  操作: EXPORT

  创建者权限: FALSE

  GUID: 0F572B49364D482CBE7FF94DBE211ED1

  起始时间: 星期日, 25 8月, 2013 17:33:58

  模式: SCHEMA

  实例: hr

  最大并行度: 1

  EXPORT 个作业参数:

  参数名      参数值:

     CLIENT_COMMAND        "system/********@localhost/hr" schemas=hr directory=expdir dumpfile=hr.dmp logfile=hr.log job_name=hr

  状态: IDLING

  处理的字节: 423,131,416

  完成的百分比: 79

  当前并行度: 1

  作业错误计数: 0

  转储文件: d:\expdir\hr.dmp

    写入的字节: 424,370,176


Worker 1 状态:

  状态: UNDEFINED

Export>

重新开始

Export> start_job

翻屏显示

Export> CONTINUE_CLIENT

使用 BLOCKS 方法的总估计: 5.466 GB

处理对象类型 SCHEMA_EXPORT/USER

处理对象类型 SCHEMA_EXPORT/SYSTEM_GRANT

处理对象类型 SCHEMA_EXPORT/ROLE_GRANT

处理对象类型 SCHEMA_EXPORT/DEFAULT_ROLE

处理对象类型 SCHEMA_EXPORT/TABLESPACE_QUOTA

处理对象类型 SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA

处理对象类型 SCHEMA_EXPORT/TYPE/TYPE_SPEC

处理对象类型 SCHEMA_EXPORT/SEQUENCE/SEQUENCE

处理对象类型 SCHEMA_EXPORT/TABLE/TABLE

处理对象类型 SCHEMA_EXPORT/TABLE/INDEX/INDEX


阅读(4727) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~