A-A+

Data Pump基本术语和概念

2013年01月14日 BasicKnowledge 评论 1 条 阅读 2,039 次


Data Pump
1.简介
数据泵可以快速把数据和数据库元数据从一个数据库迁移到另一个数据库,数据泵从oracle10.1版本开始出现。由命令行,DBMS_DATAPUMP PL/SQL package,DBMS_METADATA PL/SQL package三部分组成。Data Pump使用接口expdp和impdp通过调用DBMS_DATAPUMP PL/SQL package或者DBMS_METADATA PL/SQL package实现数据的抽取和导入。expdp/impdp和之前的exp/imp比较相似,但是区别很大,二者之间的dump文件不可交叉使用,即就是,用expdp出来的dump文件时无法使用imp导入到数据库的。并且新的expdp/impdp比原始的exp/imp性能有大幅提升。

2.expdp/impdp新特性
2.1 可以指定并行度,参数:parallel(10g企业版)
2.2 可以重启Data Pump的job,参数:start job
2.3 可以分离和重新连接到一个job而不影响到该job,便于dba对job的监控,参数:attach
2.4 可以通过网络进行操作,参数:network link
2.5 可以在一个impdp的job中将数据库数据文件重命名,参数:remap datafile
2.6 增强支持重新映射表空间,参数:remap tablespace
2.7 可以根据对象的类型支持过滤元数据,参数:include和exclude
2.8 支持交互式模式,可以监控和交互正在运行的job
2.9 可以不去实际执行,而估算导出文件的大小,参数:estimate only
2.10 可以指定一个数据库的对象的版本从源库抽取出来数据,参数:version
2.11 可以在服务端一次执行多个Data Pump程序(而以前基于客户端的exp/imp是办不到的)

3.Data Pump权限相关
只要用户具有exp_full_database和imp_full_database的角色,其就可以拥有以下权限
3.1 让其他用导出/导入自己的数据库对象
3.2 可以导出/导入非模式对象,如:表空间,模式定义信息,系统授予的权限,资源计划或以上全部
3.3 让其他用户监控,控制,分离Data Pump job的权限
3.4 数据库数据文件的remap操作
3.5 数据库其他用户的remap操作

4.Data Pump如何加载和卸载数据
Data Pump有2中方式进行加载或卸载数据,外部表或者直接路径。
注意:在不禁用唯一性索引的情况下,impdp是不会加载数据库表的。除非在impdp表之前删除索引或者重新是索引生效。
数据库的直接路径的功能是从oracle7开始的,而API是从oracle8i开始的,Data Pump在以下方面加强了直接路径加载和卸载的特性。
4.1 以自己的方式直接路径卸载数据
4.2 通过取消不必要的内部转换,使用内部流形式的方式将数据卸载至dump文件
4.3 支持额外的数据类型和传输方式
在表结构允许的情况data pump默认是采用直接路径加载和卸载数据的,如果表有很对数据类型为long的列时,必须使用直接路径。

以下情况将不使用直接路径加载数据
1. 在分区表上有全局索引。
2. 在lob列上有domain索引
3. 聚簇表
4. 表上有已存在的活动的触发器
5. Fine-grained access control is enabled in insert mode on a pre-existing table.
6. A table contains BFILE columns or columns of opaque types.
7. 在表上有参照约束存在
8. A table contains VARRAY columns with an embedded opaque type.
9. 表上有加密的列
10. 补充日志模式开启,且表上至少有一个lob列。
11. The table into which data is being imported is a pre-existing table and at least one of the following conditions exists:
There is an active trigger
The table is partitioned
fgac is in insert mode
A referential integrity constraint exists
A unique index exists

以下情况将不使用直接路径卸载数据
1. Fine-grained access control for SELECT is enabled.
2. 表正在查询
3. The table contains one or more columns of type BFILE or opaque, or an object type containing opaque columns.
4. 表上有加密列
5. A column of an evolved type that needs upgrading.
6. A column of type LONG or LONG RAW that is not last.

5. 关于Data Pump Job
Data Pump使用一个主表,一个主进程,多个工作进程来进行工作。一旦一个data pump启动,则会创建一个主进程,主进程会控制整个job,包括和客户端的通信和创建工作进程池,以及产生日志的操作。
相关视图和数据字典如下:
DBA_DATAPUMP_JOBS,
USER_DATAPUMP_JOBS,
DBA_DATAPUMP_SESSIONS,
V$SESSION_LONGOPS
The V$SESSION_LONGOPS columns that are relevant to a Data Pump job are as follows:
USERNAME - job owner
OPNAME - job name
TARGET_DESC - job operation
SOFAR - megabytes (MB) transferred thus far during the job
TOTALWORK - estimated number of megabytes (MB) in the job
UNITS - 'MB'
MESSAGE - a formatted status message of the form:
: : nnn out of mmm MB done'

6.文件位置
首先需要有一个dump目录,而创建目录,用户需要CREATE ANY DIRECTORY 的权限,并且有在这个目录上的读写权限。
Data Pump首先会采用指定的目录存数数据,如果不指定,则会使用参数DIRECTORY 指定的目录;如果也没有这个参数,那么会使用到用环境变量DATA_PUMP_DIR设定的目录,如果以上均没有设定,则会使用数据字典中DATA_PUMP_DIR指定的目录,而该值是在数据库创建或者在数据字典升级之后自动创建的。
相关命令:
SQL> SELECT directory_name, directory_path FROM dba_directories WHERE directory_name='DATA_PUMP_DIR';
SQL> CREATE DIRECTORY DUMP_FILES1 AS '/usr/apps/dumpfiles1';
SQL> GRANT READ, WRITE ON DIRECTORY dpump_dir1 TO hr;

7. expdp/impdp和exp/imp的对比
7.1 Data Pump使用一组dump的文件,而不是一个有序的dump文件。
7.2 Data Pump运行在服务端而不是客户端,提高性能,且需要你指定一个目录。
7.3 Data Pump和以前的exp/imp命令基本相同
7.4 Data Pump可以使用并行,而不是一个单独的流。
7.5 Data Pump可以以xml的形式代替ddl语言描述数据库元数据
7.6 Data Pump有自己的优化参数
7.7 Data Pump没有原始的类似commit的参数
7.8 Data Pump没有原始的compress参数可以merge extent而是根据存储参数重现分配。
7.9 串型设备如磁带,管道不支持。
7.10 使用参数version进行不同版本的数据迁移
7.11 Data Pump存在参数append 和 truncate进行数据的追加
7.12 Data Pump将消耗更多的UNDO
7.13 Data Pump将以压缩的数据加载数据到压缩表,而不是以非压缩的数据加载的压缩的表
7.14 在直接路径或者外部表均支持字符集转换,

标签:

1 条留言  访客:0 条  博主:0 条   引用: 1 条

来自外部的引用: 1 条

  • 数据库高版本到低版本跨操作系统位数跨用户的数据导入导出 | YallonKing

给我留言

Copyright © YallonKing 保留所有权利.   Theme  Ality

用户登录

分享到: