DataDump基础框架及参数介绍

expdp/impdp工具看起来很像exp/imp,这里郑重的说明,这是两个不同的工具。通过expdp dump出来的文件,imp是无法dump进去库里,反之,亦然。
一、oracle数据库泵工具组件
1、命令行客户端 expdp和impdp
2、data pump api==>dbms_datapump pl/sql包

3、metadata api==>dbms_metadata pl/sql包

下面的结构图是11g,我这边文章是参考10gR2,中间可能有点出入



三者之间的关系:
在命令行上使用一些参数,expdp和impdp客户端利用dbms_datapump包提供的proc来执行导出导入;
dbms_datapump和dbms_metadata包可不通过数据泵客户端来独立使用;

数据库泵有两种方法加载和卸载表数据:direct path和external tables

数据泵利用a master table、a master process、worker processes来工作和保证工作进度的跟踪

job工作进度的跟踪==>
一个主表会被用来跟踪正在被传输的data和metadata的job
1、对于export的job,master表记录dump文件里本地数据库的对象。在执行export期间建立和维护master表。在export job结束后,master表的内容被写入到dump文件集里。
2、对于import的job,master表从dump文件集里被加载和用来控制导入到目标库本地对象的操作顺序。
master表被创建在执行expdp/impdp操作schema下。因此,用户要有tablespace quota权限来创建它;master表的名字和创建job的名字是一样的,因此,不能指定job名字与schema下的table或view名一样。
master表是保留还是删除,依赖如下的情况
a)、Upon successful job completion, the master table is dropped.
b)、 If a job is stopped using the STOP_JOB interactive command, the master table is retained for use in restarting the job.
c)、 If a job is killed using the KILL_JOB interactive command, the master table is dropped and the job cannot be restarted.
d)、If a job terminates unexpectedly, the master table is retained. You can delete it if you do not intend to restart the job.
e)、 If a job stops before it starts running (that is, it is in the Defining state), the master table is dropped.

job执行过程的监控
v$session_longops视图是数据泵传输表数据(export and import)维护的接口。它包含了估算传输数据的大小和周期性的更新实际的数据传输的量;此视图在评估table里的信息后才会出现相关信息。具体v$session_longops视图的信息,请查看官方文档参考手册
查询impdp/expdp的运行情况==>
set linesize 200;
col username for a25;
col opname for a25;
col total for a20;
col remain for a15;
col sofar for a20;
SELECT sl.username,
       sl.opname,
       sl.target_desc,
       sl.totalwork||sl.UNITS as total,
       sl.SOFAR||sl.UNITS as sofar,
       sl.TOTALWORK - sl.SOFAR||sl.UNITS AS remain
  FROM v$session_longops sl ;

泵的文件类型
1、dump文件包含了被移动的数据和元数据
2、记录相关操作的日志文件
3、SQLFILE操作的sql ddl操作的记录文件;SQLFILE操作在impdp里的SQLFILE参数指定的,所有的结果将在SQLFILE参数文件指定的文件里;

dump,log,sql file放置位置的指定
因为data pump是基于server端的,data pump要求之定义个文件夹目录作为文件夹对象,即一个文件对象映射一个文件系统的文件夹路径;例如
SQL> CREATE DIRECTORY dpump_dir1 AS '/usr/apps/datafiles';
创建文件夹对象后,相关用户需要read or writer权限在此文件夹目录下;例如hr用户具有对dpump_dir1文件夹有读写的权限
SQL> GRANT READ, WRITE ON DIRECTORY dpump_dir1 TO hr;
指定在OS文件系统上和ASM文件系统上,操作都是一样,没有什么大的区别

日志和dump文件分别放在不同的文件夹里
SQL> create or replace directory dump_dir as '/u01/dump';
Directory created.
SQL> create or replace directory log_dir as '/u01/log';
Directory created.
SQL> grant read,write on directory dump_dir to public;
Grant succeeded.
SQL> grant read,write on directory log_dir to public;
Grant succeeded.
[oracle@trsen01 dump]$ more expdp_test.sh
expdp scott/scott directory=dump_dir dumpfile=f.dmp logfile=dump_log:f.log;

二、进一步了解Data Pump Export
1、什么是Data Pump Export
Export就是一个下载数据和元数据到OS下一组dump文件集的一个工具而已;没有什么神秘 。这个dump文件只能被Data Pump Import工具使用导入。这个dump文件集可以在相同系统或移动其他系统下进行加载。
dump文件由一个或多个磁盘文件组成,它包含表数据、数据库对象元数据,和控制信息;是以特殊的二进制格式写入信息,Import工具能使用凡在dump文件中每个数据库对象。
可以利用数据过滤或元数据过滤来选择自己想要的数据子集来Export数据到dump文件里
2、Data Pump Export三种方式来进行操作
1)、命令行模式:可以使用大部分的参数来做Export动作
2)、参数文件模式:让其在在参数文件里指定一些命令行的一些参数。但是除了parfile参数,因为参数文件不能被嵌套。在参数文件里的参数值最好用引号标记
3)、交互模式:这个模式可以可以执行追加执行或停止job,一般都是用attach参数来实现交互模式的登陆;
3、Data Pump Export五种mode
1)、full export mode
利用full参数,full database export,整个数据被下载。这个操作必须要有exp_full_database权限
2)、schema mode
利用schemas参数。这个是默认export mode。如果有exp_full_database权限,可以导出其他schema,包含其定义,一些系统权限;如果没有exp_full_database权限,你只能导出当前的schema。
交叉对象的参考是不能被export,除非参考对象也被指定在export的schemas列表里。例如:一个触发器参考某个对象下的表,但是在export文件里没有此对象及表,导出触发器时会报
3)、table mode
利用tables参数,在table mode,只能指定一些tables、分区和他们相关的对象集合导出。必须要有exp_full_database权限来导出不在当前schema下的tables。所有指定表必须在单个schema下。请注意,列的类型定义在table mode下不能被导出。期望在import时,列的定义已经存在实例里。
4)、tablespace mode
利用tablespaces参数,在tablespace mode下,只有被指定表空间的tables导出,并且表相关联的对象也被导出,对象的元数据及数据被导出。在tablespace mode里,表相关的对象也会也会被导出。
5)、Transportable Tablespace Mode
利用 transport_tablespaces参数,仅仅只指定表空间表及其相关对象的元数据被导出。这允许对应表空间的数据文件复制到另个oracle数据和结合使用 transportable tablespace导入。这个mode下必须要有exp_full_database权限
注意:
a、此mode下,如果stopped了,就不能被restarted;也不能开并行。
b、要求指定表是完全独立的。 That is, the partitions of all tables in the set must also be in the set.
c、目标库必须>=源库的版本。
3、network considerations
使用export工具,可以指定一个连接符。这个连接符可以是不同于当前实例的一个数据库实例,也可以是oracle*net连接描述或其映射名。注意oracle网络监听要起来。例如:
expdp hr/hr@inst1 DIRECTORY=dpump_dir1 DUMPFILE=hr.dmp TABLES=employees
inst1就是配置tnsnames.ora的名字。
这里的连接符与export参数network_link区分开,是两把事
4、Export的过滤操作
Export有强大的数据和元数据过滤功能
1)、data filter
是通过query和sample两个参数来实现检索表来导出数据rows。
数据过滤也可以间接发生由于元数据过滤,它可以包括或排除表对象以及任何相关的行数据。
每个data filter在执行过程中被每张表被指定一回。如果不懂的过滤器利用相同的名字被用到特殊表和整个执行过程中,滤波器参数提供给特定的表将优先考虑。
2)、metadata filters
metadata filters过滤通过exclude和include参数来实现,这两个参数是互斥关系。例如做个schemas export,可以排除部分不要的表额。
在做metadata filter时,被指定对象的相关联的对象也会被处理了。例如:如果一张表被exclude了,那么这张表的索引,约束,触发器,统计信息等也会被exclude。
3)、查看哪些对象在做data pump时,被filter,可以参看database_export_objects,schema_export_objects,table_export_objects.
5、export一些参数的解析说明,建议参考官方文档;
1)、attach:此参数被使用时除了连接串,其他参数不能用;不能attach一个在另个schema下job,除了它在运行;如果dump file set或者master table被drop了,此操作会失败如果修改master table,可能会导致不可预知的问题。可通过DBA_DATAPUMP_JOBS或USER_DATAPUMP_JOBS视图去确定job_name
ATTACH [=[schema_name.]job_name]
例如:如果import_job存在scott下
>expdp scott/scott attach=import_job
2)、network_link:此参数是将远程数据库服务的数据通过dblink来写dump文件到本地的系统上;如果source database是read-only模式,那时在source database的用户必须有本地管理的表空间作为默认的临时表空间。否则,expdp job会失败。
3)、content:unloads需要的data和metadata,默认是all
CONTENT={ALL | DATA_ONLY | METADATA_ONLY}
ALL:unloads both data and metadata. This is the default.
DATA_ONLY:unloads only table row data; no database object definitions are unloaded.
METADATA_ONLY:unloads only database object definitions; no table row data is unloaded.
> expdp scott/scott DIRECTORY=dump_dir DUMPFILE=scott.dmp CONTENT=METADATA_ONLY
4)、COMPRESSION:默认是METADATA_ONLY
COMPRESSION=(METADATA_ONLY | NONE)
要么压缩元数据,要么不做处理
5)、dumpfile:这个参数没有什么要解释的,注意%U这个参数要与(filesize及parallel)两个参数集合使用
6)、ENCRYPTION_PASSWORD:Data Pump既不支持也不提供整个dump文件的加密。这个参数用于 Transparent Data Encryption functionality.加密列的数据
7)、ESTIMATE:此参数默认值是blocks,使用此参数用来评估在做export时,消耗磁盘空间大小;它只针对表的数据,不针对元数据
ESTIMATE={BLOCKS | STATISTICS}
BLOCKS - The estimate is calculated by multiplying the number of database blocks used by the source objects, times the appropriate block sizes.
STATISTICS - The estimate is calculated using statistics for each table. For this method to be as accurate as possible, all tables should have been analyzed recently.
如果表有压缩时,blocks评估是不准的,建议采用statistics。
> expdp scott/scott TABLES=empESTIMATE=STATISTICS DIRECTORY=dump_dir DUMPFILE=estimate_stat.dmp
8)、exclude:过滤你不需要metadata数据的对象及类型。
EXCLUDE=object_type[:name_clause] [, ...]
所有对象类型除了在exclude指定的的对象类型外都能被export。如果一个对象被excluded,所有相关关联的对象也被excluded。例如:一张表被excluded,那么其上面的触发器及索引也被excluded。
The name_clause is optional. It allows selection of specific objects within an object type. It is a SQL expression used as a filter on the type's object names. It consists of a SQL operator and the values against which the object names of the specified type are to be compared. The name clause applies only to object types whose instances have names (for example, it is applicable to TABLE, but not to GRANT). The name clause must be separated from the object type with a colon and enclosed in double quotation marks, because single-quotation marks are required to delimit the name strings. For example, you could set EXCLUDE=INDEX:"LIKE 'EMP%'" to exclude all indexes whose names start with emp.
如果没有name_clause字句,指定的类型对象将会被excluded了
Excluding Constraints==>
not null约束不能被excluded了
约束需要被用来表创建和成功加载时,不能被excluded,例如,索引组织表的主键约束,或REF SCOPE和WITH ROWID约束作为表的REF列
EXCLUDE=CONSTRAINT will exclude all (nonreferential) constraints, except for NOT NULL constraints and any constraints needed for successful table creation and loading.
EXCLUDE=REF_CONSTRAINT will exclude referential integrity (foreign key) constraints.
Specifying EXCLUDE=GRANT excludes object grants on all object types and system privilege grants.
Specifying EXCLUDE=USER excludes only the definitions of users, not the objects contained within users' schemas.
> expdp scott/scott DIRECTORY=dump_dir DUMPFILE=scott_exclude.dmp EXCLUDE=VIEW,PACKAGE, FUNCTION
9)、include:指定在include参数里的对象和对象类型及其相关的对象被export出来,grants在这些对象也被export出来。其他与exclude相仿,只是相反的而已。
INCLUDE = object_type[:name_clause] [, ...]
For example,指定一个parameter文件hr.par 如下:
SCHEMAS=HR
DUMPFILE=expinclude.dmp
DIRECTORY=dpump_dir1
LOGFILE=expinclude.log
INCLUDE=TABLE:"IN ('EMPLOYEES', 'DEPARTMENTS')"
INCLUDE=PROCEDURE
INCLUDE=INDEX:"LIKE 'EMP%'"
> expdp hr/hr parfile=hr.par
10)、PARALLEL:并行参数
通过此参数指定并行,最好并行数少于等于dump file的数(即指定%U)。因为每个active worker process或I/O server process是同时独占写一个文件,如果dump文件数不够,则有相反效果,导致有些worker进程因等待files而处于idle状态,这样就会降低性能,更甚至出现抓不到文件输出报出ORA-39095错误。可以再交互模式下进行parallel的修改,但是效果并不是那么有效果
> expdp scott/scott DIRECTORY=dump_dir LOGFILE=parallel_export.log  DUMPFILE=par_exp%u.dmp PARALLEL=3
11)、query:过滤出你导出来的数据,如果[schema.][table_name:] 没有被指定,则查询应用导出job的所有表。当查询是应用于一个特定的表,利用冒号分开表名和查询语句。多个表的查询可以被指定,需要对每个表做指定。建议写query在参数文件里。
QUERY = [schema.][table_name:] query_clause
例如:导出scott用户下所有表,但是emp表里只取过滤条的数据。
参数文件emp_query.par如下
QUERY=emp:'"WHERE department_id > 10 AND salary > 10000"'
NOLOGFILE=y
DIRECTORY=dump_dir
DUMPFILE=exp.dmp
> expdp scott/scott parfile=emp_query.par
其他一些参数,就不在这里过多说明,可以查找官方文档

三、进一步了解Data Pump Import
import的很多东东与export很类似,这里不作具体的介绍,主要说明不同于export工具且重要的参数
1)、REMAP_DATAFILE:这个参数挡在不同平台的数据库做move时,会用到。利用此参数来更改datafile的位置;create tablespace,create library or create directory
REMAP_DATAFILE=source_datafile:target_datafile
例如:将在linux的datafile指定不同的目录下的案例
参数文件:
DIRECTORY=dump_dir1
FULL=Y
DUMPFILE=db_full.dmp
REMAP_DATAFILE='u01/app/oradata/tbs6.f':'/opt/app/oradata/tbs6.f'
脚本文件:
> impdp hr/hr PARFILE=payroll.par
2)、REMAP_SCHEMA:加载源端schema对象到目标schema对象下。
如果指定的remap对象在目标库不存在的话,在导入过程中,会自动创建用户,导入结束后,需要自己手工为此用户创建密码,否则无法登陆;如果指定的remap对象已存在,那么将会将dump的对象导入到该对象下。
REMAP_SCHEMA=source_schema:target_schema
ALTER USER [schema_name] IDENTIFIED BY [new_pswd]
> expdp SYSTEM/password SCHEMAS=hr DIRECTORY=dump_dir1 DUMPFILE=hr.dmp
> impdp SYSTEM/password DIRECTORY=dump_dir1 DUMPFILE=hr.dmp REMAP_SCHEMA=hr:scott
3)、REMAP_TABLESPACE:选择所有export出来的表空间对象remap到目标表空间里
REMAP_TABLESPACE=source_tablespace:target_tablespace
4)、SKIP_UNUSABLE_INDEXES:是否跳过unusable状态的index
SKIP_UNUSABLE_INDEXES={y | n}
如果设置为y,遇到unusable索引,table或partition也会导入
如果这是为n,遇到unusable索引,table或partition不能被导入,其他的可以;
如果没有指定,那时就会根据参数的skip_unsable_indexes做判断。
5)、SQLFILE:生成DDL语句到指定的文件下,但是password是不会包括在此文件里,在处理的过程中没有对目标库做成任何改变。
SQLFILE=[directory_object:]file_name
6)、TABLE_EXISTS_ACTION:
default:skip(但是如果content=data_only,那么default就变成了append,而不是skip)
TABLE_EXISTS_ACTION={SKIP | APPEND | TRUNCATE | REPLACE}
skip:放弃当前表并且move下个对象。如果content参数设置了data_only,这个操作无效
append:不改当前数据,加载从source端过来的数据
truncate:删除存在的数据并且加载数据
replace:先drop表,然后加载数据,如果content是data_only,这个操作无效
更多使用请参考官方文档,若有问题,请联系我,多多做交流,不做过多解释,请参考官方文档


===========================
相关交流信息
QQ群: 330218614
Email: 623009431@qq.com
Blog: http://blog.csdn.net/trsenzhang
============================


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值