- 最后登录
- 2017-5-4
- 在线时间
- 81 小时
- 威望
- 999
- 金钱
- 2391
- 注册时间
- 2013-9-11
- 阅读权限
- 150
- 帖子
- 1124
- 精华
- 5
- 积分
- 999
- UID
- 1220
|
1#
发表于 2013-9-25 22:34:14
|
查看: 2943 |
回复: 0
datapump数据泵概览
数据泵:概览
使用数据泵可快速加载或卸载Oracle 数据库的数据与元数据。可通过DBMS_DATAPUMP
PL/SQL 程序包调用数据泵基础结构。因此,使用数据泵可构建自定义的移动数据实用
程序。
Oracle Database 10g 可提供以下工具:
• 命令行导出与导入客户端,分别称为expdp 和impdp
• 基于Web 的导出与导入界面,可通过Database Control 进行访问
数据泵会自动确定要使用的数据访问方法;可能是直接路径或外部表。如果表结构允许使
用直接路径加载和卸载,而且希望达到最大单个流性能时,数据泵就会使用直接路径加载
和卸载。但是,如果存在集群表、引用完整性约束条件、加密列或一些其它项,数据泵会
使用外部表,而不是使用直接路径来移动数据。
由于能够与长时间运行的作业相分离和重新挂接,且不影响作业本身,所以您可以监视多
个位置正在运行的作业。只要元信息未受干扰,就可重新启动所有停止的数据泵作业而不
会丢失数据。作业是自发停止的,还是由于崩溃而非自发停止的,这无关紧要。
注:数据泵是Oracle Database 10g 的一个组成功能,因此,在所有配置中都可使用。但是,
并行度只在Enterprise Edition 中可用。
数据泵:优点
• 选择细粒度级对象和数据
• 显式指定数据库版本
• 并行执行
• 估计导出作业占用的空间
• 分布式环境中的网络模式
• 导入过程中的重新映射功能
• 数据取样和元数据压缩
数据泵:优点
EXCLUDE、INCLUDE 和CONTENT 参数用于选择细粒度级对象和数据。
可以通过指定要移动的对象的数据库版本(使用VERSION 参数)来创建与Oracle 数据库
(支持数据泵)的前一个版本兼容的转储文件集。
可以使用PARALLEL 参数指定代表导出作业运行的活动执行服务器的最大线程数。
使用ESTIMATE_ONLY 参数可估计导出作业占用的空间量(实际上并不执行导出)。
使用网络模式可从远程数据库直接导出到转储文件集。使用指向源系统的数据库链接可完
成此操作。
在导入过程中,可以更改目标数据文件名、方案和表空间。
此外,Oracle Database 10g 还允许您指定在执行数据泵导出时,要从源数据库取样和卸载
的数据百分比。指定SAMPLE 参数可完成此操作。
使用COMPRESSION 参数可指示是否应在导出转储文件中压缩元数据,以便占用更少的
磁盘空间。如果压缩了元数据,导入过程中会自动执行解压缩。
数据泵导出和导入实用程序:概览
数据泵导出实用程序用于将数据和元数据卸载到一个被称为转储文件集的操作系统文件集。
使用数据泵导入实用程序可将导出转储文件集中存储的元数据和数据加载到目标系统。
数据泵API 会访问它在服务器上的文件,而不是在客户机上的文件。
还可以使用这些实用程序直接从远程数据库导出到转储文件集,或者直接从源数据库加载
目标数据库,而不使用任何干预文件。这就称为网络模式。从只读源数据库导出数据时,
此模式尤其有用。
每个数据泵操作的中心都是主表(MT),就是在运行数据泵作业的用户方案中创建的表。
MT 保留了作业的各个方面。MT 是在基于文件的导出作业期间构建的,在最后一步会写
入转储文件集。相反,将MT 加载到当前用户方案是基于文件的导入操作的第一步,用于
确定创建所有导入对象的顺序。
注:在按计划停止作业或计划外停止作业的情况下,MT 是数据泵重新启动功能的关键。
数据泵作业正常完成时,MT 会停止。
数据泵实用程序:接口与模式
使用下列一种接口可与数据泵导出和导入实用程序进行交互:
• 使用命令行接口可直接在命令行中指定大多数导出参数。
• 使用参数文件接口可在参数文件中指定所有命令行参数。唯一例外是PARFILE 参数。
• 交互式命令接口可停止到终端的登录操作,显示导出或导入提示符,可在这些提示
符下输入多种命令。在使用命令行接口或参数文件接口启动导出操作过程中,按
[Ctrl] + [C] 可启用这种模式。另外,挂接到正执行的作业或已停止的作业时,也能
启用交互式命令模式。
• 还可以访问Web 接口。在Database Control 主页上,单击“Maintenance(维护)”
标签,然后从“Utilities(实用程序)”区域选择下列链接之一:“Export to Files
(导出到文件)”、“Import from Files(从文件导入)”或“Import from Database
(从数据库导入)”。
数据泵导出和导入实用程序对卸载或加载数据库的不同部分提供不同的模式。使用相应
参数可在命令行中指定所提供的模式。
细粒度级对象的选择
数据泵作业实际上可以包括(或排除)任何类型的对象。
使用EXCLUDE 参数可从导出或导入操作中排除任何数据库对象类型。使用可选名称限定
符可在指定的每个对象类型中进行更细的选择。示例:
EXCLUDE=VIEW
EXCLUDE=PACKAGE
EXCLUDE=INDEX:"LIKE 'EMP%'"
INCLUDE 参数用于在操作中只包含指定的对象类型和对象。语法:
INCLUDE = object_type[:"name_expr"]
使用CONTENT 参数可在当前操作中只请求元数据、只请求数据,或者请求这两者。语法:
CONTENT = ALL | METADATA_ONLY | DATA_ONLY
QUERY 参数与原始导出实用程序的工作方式相似,但前者具有两个重要的增强功能:可
以将其限定于一个表名称,使其只应用于此表,另外,还可以在导入过程中使用此参数。
示例:
QUERY=hr.employees:"WHERE department_id in (10,20) and salary
< 1600 ORDER BY department_id"
高级功能:取样率
使用SAMPLE 参数时,可指定在执行数据泵导出时,要从源数据库取样和卸载的数据
百分比。
语法:
SAMPLE=[[schema_name.]table_name:]sample_percent
sample_percent 的范围:.000001 至100(但不包括此值)
取样率指示包含行块的可能性。
注:SAMPLE 参数对网络导出无效。
导出选项:文件
数据泵作业可管理以下三种类型的文件:
• 数据和元数据要移动到的转储文件
• 存储消息的日志文件
• 存储SQLFILE 操作输出的SQL 文件
由于数据泵基于服务器而不基于客户机,因此会使用Oracle 相对目录路径访问数据泵
文件。出于安全性原因,不支持绝对路径。
数据泵文件位置
幻灯片显示了数据泵客户机定位这些文件时依据的优先级次序:
• 可按文件为每个转储文件、日志文件和SQL 文件指定目录对象。如果指定了对象,
则会使用冒号(:) 将对象与文件名分隔开来。
• 数据泵导出和导入实用程序客户机提供了一个DIRECTORY 参数,这个参数指定了
目录对象的名称。这些目录对象说明了访问文件的位置。
• 还可选择通过定义环境变量DATA_PUMP_DIR 来指定目录对象名,而不使用
DIRECTORY 参数。如果未显式指定目录对象,数据泵客户机会查找这个环境变量。
• 系统为每个数据库创建了一个默认目录对象。这个目录对象名为DATA_PUMP_DIR。
对DATA_PUMP_DIR 目录的访问权限会自动授予给EXP_FULL_DATABASE 和
IMP_FULL_DATABASE 角色。
在使用数据泵导出实用程序之前不需要手动创建目录对象。已经为每个数据库创建
了一个默认目录对象,这个目录对象可能是新建对象,也可能是UNIX 或Windows
平台上的脚本对其进行升级后得到的对象。这个目录对象名为DATA_PUMP_DIR。
对DATA_PUMP_DIR 目录的访问权限会自动授予给EXP_FULL_DATABASE 和
IMP_FULL_DATABASE 角色。DATA_PUMP_DIR 目录是在下列一个位置创建的:
- <ORACLE_BASE>/admin/ORACLE_SID
- <ORACLE_HOME>/admin/ORACLE_SID
DATA_PUMP_DIR 的确切目录路径说明会有所不同,具体取决于ORACLE_BASE 和
ORACLE_HOME 系统环境变量值,以及是否存在DATA_PUMP_DIR 子目录。如果在
目标系统上定义了ORACLE_BASE,则使用该值。否则,使用ORACLE_HOME 值。
如果因某种原因未找到DATA_PUMP_DIR 子目录,则使用以下默认路径:
ORACLE_HOME/rdbms/log.
注:在任何情况下,必须有对目录对象的相应访问权限才能执行所需的操作。导出时,
需要有对所有文件的写权限;导入时,需要有对转储文件的读权限,以及对日志文件和
SQL 文件的写权限。
数据泵文件的命名和大小
DUMPFILE 参数指定了基于磁盘的转储文件的名称和(可选)目录。可采用以逗号分隔的
列表的形式或者在单独的DUMPFILE 参数说明中提供多个文件说明。文件名可包含替代
变量%U,这个变量表示可生成多个文件。%U 在生成的文件名中扩展为双字符、固定宽度、
从01 开始的单一递增整数。如果未指定DUMPFILE,则默认情况下使用expdat.dmp。
默认情况下,创建的转储文件可自动扩展。
如果指定了FILESIZE,则每个文件的大小为FILESIZE 字节且不可扩展。如果需要更
多的转储空间,并且提供了带%U 的模板,则会自动创建具有FILESIZE 字节的新文件;
否则,客户机会收到要添加新文件的消息。
如果指定了带%U 的模板,则最初创建的文件数目会等于PARALLEL 参数。
不会覆盖与所生成文件名匹配的预先存在的文件;这些文件会导致出错并导致作业中止。
注:如果提供了多个转储文件模板,则会使用这些模板以循环方式生成转储文件。
数据泵导入实用程序是一个可将导出转储文件集加载到目标系统的实用程序。这个转储文
件集由一个或多个包含表数据、数据库对象元数据和控制信息的磁盘文件构成。这些文件
以专有的二进制格式编写。在执行导入操作期间,数据泵导入实用程序使用这些文件定位
转储文件集中的每个数据库对象。
使用命令行、参数文件或交互式命令模式可与数据泵导入实用程序进行交互:
• 可直接在命令行中使用impdp 命令并指定参数。
• 可在文件中输入命令行参数(因无法嵌套参数文件,所以不包括PARFILE 参数)。
• 在交互命令模式下,当前作业会继续运行,但是,终端登录会停止,同时会显示
“Import(导入)”提示。例如,可将其它作业挂接到正在执行的作业或已停止的
作业。
由于对象元数据是以XML 形式存储在转储文件集中的,因此,在导入过程中形成DDL
时比较容易进行转换。数据泵导入实用程序支持多种转换:
• 在具有不同文件系统语义的平台之间移动数据库时,REMAP_DATAFILE 十分有用。
• 使用REMAP_TABLESPACE 可将对象从一个表空间移至另一个表空间。
• REMAP_SCHEMA 提供原有FROMUSER /TOUSER 的功能,可用于更改对象所有权。
使用TRANSFORM 参数可更改特定对象或所加载的所有适用对象的创建对象DDL。可指
定TRANSFORM 参数,如幻灯片所示。下面是一些可能存在的选项:
• SEGMENT_ATTRIBUTES:如果将该值指定为Y,则包含段属性(物理属性、存储
属性、表空间和事件记录)。
• STORAGE:如果将该值指定为Y,则包含STORAGE 子句。
• OID:使用此参数可确定是重用还是重新创建抽象数据类型的对象ID (OID)。如果将
该值指定为N,则会禁止生成对象类型的导出OID 子句。如果需要使用导出和导入
跨数据库复制方案,但是不能保证对象类型在这些数据库中会具有相同的OID 值,
则这个选项会十分有用。
• PCTSPACE:使用PCTSPACE 参数时,可通过对表空间存储分配执行收缩操作来减
少表空间所需的空间量。为这个转换提供的值必须是一个大于零的数值。这个值表
示用于更改区分配和数据文件大小的百分比乘数。
expdp hr/hr FULL=y
DUMPFILE=dp_dir1:full1%U.dmp, dp_dir2:full2%U.dmp
FILESIZE=2G PARALLEL=3
LOGFILE=dp_dir1:expfull.log JOB_NAME=expfull
使用PARALLEL 参数可提高作业的吞吐量。并行度设置是由主进程强制设置的,因此可将
要执行的工作分配到在操作中负责执行数据和元数据处理的那些工作进程。这些工作进程
以并行方式运行。一般而言,并行度应设置为超过实例中CPU 数的两倍。要最大化并行度,
必须至少为每个并行度提供一个文件。如果转储文件数不够,就不能优化性能,因为执行
的多个线程会尝试访问同一个转储文件。执行作业期间可随时重置并行度。
幻灯片示例中显示了一个完整的数据库导出过程。会导出数据库中的所有数据和元数据。
会在dp_dir1 和dp_dir2 目录对象指向的目录中,以循环方式创建转储文件
(full101.dmp、full201.dmp、full102.dmp 等)。为实现最佳性能,这些文件
应位于不同的I/O 通道上。每个文件的最大大小为2 GB,具体视需要而定。最初,最多会
创建三个文件。如有需要,会创建更多的文件。作业与主表具有相同的名称:expfull。
日志文件会写入到dp_dir1 目录中的expfull.log。
性能初始化参数
• 以下设置会影响数据泵性能:
– DISK_ASYNCH_IO=TRUE
– DB_BLOCK_CHECKING=FALSE
– DB_BLOCK_CHECKSUM=FALSE
• 以下参数应设置得较高,才能实现最大并行度:
– PROCESSES
– SESSIONS
– PARALLEL_MAX_SERVERS
• 应大幅度调整以下参数的大小:
– SHARED_POOL_SIZE
– UNDO_TABLESPACE
数据泵会自动选择以下一种访问路径:
• 直接路径
• 如果数据包括以下项,则为外部表:
– 加密列
– 集群表
– 卸载和加载时的不同分区,以及其它项
(请参阅“注释”)
数据泵可为每个表自动选择最适当的访问方法。
如果表结构允许使用直接路径加载和卸载,而且希望达到最大单个流性能时,数据泵就会
使用直接路径加载和卸载。
如果存在下列任一条件,数据泵会使用外部表:
• 在插入和选择模式下启用了细粒度级访问控制的表
• LOB 列存在域索引
• 定义了活动触发器的表
• 带有单分区负载的分区表的全局索引
• BFILE 或不透明类型列
• 引用完整性约束条件
• 嵌入式不透明类型的VARRAY 列
注:由于这两种方法都支持相同的外部数据表示法,因此,可使用一种方法加载使用另一
种方法卸载的数据。
外部表填充
• 使用ORACLE_DATAPUMP 访问驱动程序
将数据卸载到外部文件
• 不修改外部表
“外部表”由与操作系统无关的专有格式(即直接路径API)平面文件组成。由于数据是
从Oracle 数据库提取并“卸载”到文件中的,因此,数据将以透明方式从Oracle 内部表
示法转换为等同的Oracle 本机外部表示法(即DPAPI)。
可使用CREATE TABLE AS SELECT 命令填充外部表。创建并填充了外部表之后,就不
能在外部表中添加、更新或删除行了。在外部表中修改数据的任何尝试都会失败。外部表
不能包含索引。
使用数据泵访问驱动程序可对外部表执行卸载和加载操作。
使用外部表
• 可直接使用外部文件中的数据或将数据加载到另一个
数据库。
• 只能使用ORACLE_DATAPUMP 访问驱动程序读取生成
的文件。
• 可将从不同源生成的文件组合在一起以进行加载。
为外部表创建的数据文件是可移动的数据文件,可用作同一数据库或不同数据库中另一外
部表的数据文件。只能使用ORACLE_DATAPUMP 访问驱动程序读取这些数据文件。可选
择是让应用程序使用SELECT 命令直接访问外部表,还是先将数据加载到目标数据库。
可在另一外部表的LOCATION 子句中指定由不同外部表填充的所有数据文件。这样,可
轻松地聚集多个源中的数据。唯一限制是,所有外部表的元数据必须完全相同。
使用ORACLE_DATAPUMP 填充外部表
CREATE TABLE emp_ext
(first_name, last_name, department_name)
ORGANIZATION EXTERNAL
(
TYPE ORACLE_DATAPUMP
DEFAULT DIRECTORY ext_dir
LOCATION ('emp1.exp','emp2.exp','emp3.exp')
)
PARALLEL
AS
SELECT e.first_name,e.last_name,d.department_name
FROM employees e, departments d
WHERE e.department_id = d.department_id AND
d.department_name in
('Marketing', 'Purchasing');
使用ORACLE_DATAPUMP 填充外部表
本示例显示了这种新的外部表填充操作如何帮助导出由联接在一起的EMPLOYEES 和
DEPARTMENTS 表生成的一组有选择性的记录。
由于外部表可能非常大,因此可使用并行填充操作将数据卸载到外部表。与外部表的并行
查询相反,并行填充操作的并行度受到访问驱动程序可写入的并行文件的数目所限制。在
特定时间点,决不能有多个并行执行的服务器同时写入一个文件。
LOCATION 子句中的文件数必须与指定的并行度匹配,因为每个输入/输出(I/O) 服务器进
程都需要使用自己的文件。此时,会忽略指定的任何附加文件。如果指定的并行度没有足
够的文件数,就会通过降低并行度来匹配LOCATION 子句中的文件数。
注:有关ORACLE_DATAPUMP 访问驱动程序参数的详细信息,请参阅《Oracle 数据库实
用程序》指南。
使用ORACLE_LOADER 填充外部表
CREATE TABLE extab_employees
(employee_id NUMBER(4),
first_name VARCHAR2(20),
last_name VARCHAR2(25),
hire_date DATE)
ORGANIZATION EXTERNAL
( TYPE ORACLE_LOADER DEFAULT DIRECTORY extab_dat_dir
ACCESS PARAMETERS
( records delimited by newline
badfile extab_bad_dir:'empxt%a_%p.bad'
logfile extab_log_dir:'empxt%a_%p.log'
fields terminated by ','
missing field values are null
( employee_id, first_name, last_name,
hire_date char date_format date mask "dd-mon-yyyy“))
LOCATION ('empxt1.dat', 'empxt2.dat') )
PARALLEL REJECT LIMIT UNLIMITED;
使用ORACLE_LOADER 填充外部表
ORACLE_LOADER 访问驱动程序使用SQL*Loader 语法来创建外部表。
幻灯片中的示例假定创建了三个目录对象(extab_dat_dir、extab_bad_dir 和
extab_log_dir),并且这三个目录对象已映射到用户有权访问的现有操作系统目录。
提示:如果有大量的数据要加载,请为加载操作启用PARALLEL:
ALTER SESSION ENABLE PARALLEL DML;
|
|