数据泵(二)-导入和导出

数据泵的导出

数据泵的导出方法

使用命令行,如:
$ expdp system/manager DIRECTORY=dump_dir DUMPFILE = expda1.dmp

使用参数文件
除了在命令行直接指定导出参数外,还可以将他们放入参数文件中,从而在实际的导出作业中调用该参数文件,如:mytext.txt
SCHEMA=hr
DIRECTORY=dump_dir
DUMPFILE=expda1.dmp
创建参数文件后,为了导出HR模式,所需要做的就是用PARFILE参数调用:
$ expdp PARFILE=mytext.txt

数据泵导出的方式

可以使用下列几种方式执行导出作业
全导出方式(full export mode)。当你想要在一个导出会话中导出整个数据库时,使用FULL参数,但是要有EXPORT_FULL_DATABASE的权限。

模式方式(schema mode)。如果只想导出一个单独用户的数据或对象,必须使用SCHEMA参数

表空间方式(tablespace mode)。使用表空间方式可以导出一个或多个表空间中的全部表。
如果使用TRANSPORT_TABLESPACE参数,则只导出包含在一个或多个表空间中的对象的元数据,你能够通过先导出元数据,在将表空间的文件复制到目标服务器,然后再将元数据导入目标服务器。

表方式(table mode)。 用TABLES参数,可以导出一个或多个表。

模式方式是数据泵导出作业的默认方式,如果按以下命令执行,则数据泵将自动执行导出SYSTEM的对象
$ expdp system/123456

数据泵的导出参数
数据泵导出实用程序的使用主要是一些参数,为了方便讨论,将参数分成以下几类:
与文件目录有关的参数
与导出方式有关的参数
导出过滤的参数
与加密有关的参数
估算参数
网络链接参数
交互方式参数
与作业有关的参数

下面分别讨论

与文件目录有关的参数

可以在数据泵的导出参数中指定几个与文件和目录有关的参数,这些参数包括,DIRECTORY, DUMPFILE, FILESIZE, PARFILE, LOGFILE, NOLOGFILE和COMPRESSION参数
DIRECTORY
Directory参数指向为转储文件和日志文件使用的目录对象。

DUMPFILE
DUMPFILE参数提供应该写入导出的转储文件的名字(或列表)。
通过指定%U替换变量,可创建多个转储文件,替换变量将从01到99,例如exp%U.dmp可以转储成exp01.dmp, exp02.dmp, exp03.dmp等文件名。
用%U指定的多个转储文件,由参数PARALLEL决定。
在用逗号分隔的列表中提供多个文件
如果未指定默认的DUMPFILE,作业将使用默认的文件参数名expdat.dmp。

FILESIZE
FILESIZE参数是可选的,它指定转储文件的大小,默认以字节为单位,可以用字节,KB,MB,GB为单位指定FILESIZE参数。若不指定,则转储文件没有大小的限制,如果通过FILESIZE指定了转储文件的最大大小。倘若转储文件超过限制,导出作业将停止,待该问题解决后仍可以重新启动它。

PARFILE
PARFILE参数文件,如同前面介绍的内容。

LOGFILE和NOLOGFILE
可以用LOGFILE指定导出作业的日志文件,如果使用NOLOGFILE则作业将不创建日志文件,但屏幕仍可看到日志信息。

REUSE_DUMPFILES
可指定REUSE_DUMPFILES参数覆盖一个导出的转储文件。默认是不覆盖。可以指定值Y,覆盖一个之前的转储文件,N是默认行为。
$expdp hr/hr DIRECTORY=dump_dir DUMPFILE=expdat.dmp TABLES=employees REUSE_DUMPFILES=y
当然必须保证不再使用之前的expdat.dmp文件了

COMPRESSION
COMPRESSION参数允许用户指定在将导出数据写入转储文件时,压缩哪些数据。默认时,所有被导出的元数据均被压缩。可以指定all, data_only, metadata_only, none等参数:
All:允许对整个操作压缩
data_only:只压缩数据
metadata_only:只压缩元数据,这是默认值
none:不压缩

与导出方式有关的参数

与导出方式有关的参数有FULL, SCHEMA, TABLESPACE, TABLES, TRANSPORT_TABLESPACE, TRANSPORT_FULL_CHECK。除了TRANSPORT_FULL_CHECK参数外,其他参数已经在之前介绍过了。
TRANSPORT_FULL_CHECK参数检查以确定试图传送的可移植表空间满足可移植表空间作业限定的所有条件。使用此参数,可以检查可移植集合内的对象和数据库其他对象之间的相关性。例如索引完全依赖于表,因为没有表,索引就没有意义。
可设置TRANSPORT_FULL_CHECK为Y或N,如果设置TRANPORT_FULL_CHECK=Y,则数据泵导出作业将检查双向相关性,如果你有一个表在可移植表空间中,但索引不在其中,或者表空间只包含了索引而没有表,则导出作业将失败。如果设置TRANSPORT_FULL_CHECK=N,则数据泵导出作业将检查单向相关性。如果可移植表空间集合包含表而未包含索引,则导出将成功,但是如果只包含索引而没有表,则导出作业将失败。

导出过滤参数

a. CONTENT
使用CONTENT参数,可以过滤要写入导出转储文件中的内容。CONTENT参数可取以下三个值:
ALL:同时导出数据和元数据
DATA_ONLY:只导出数据
METADATA:只导出元数据
$ expdp hr/hr DUMPFILE=expdat1.dmp CONTENT=DATA_ONLY

b. EXCLUDE和INCLUDE
EXCLUDE和INCLUDE是两个对立的参数,可用来过滤元数据。
元数据的过滤允许在导出或导入过程中选择去除或包含指定类型的对象。注意:使用CONTENT=DATA_ONLY时,不能再使用EXCLUDE和INCLUDE。
简单设置EXCLUDE参数,可在导出作业中排除特定的数据库对象。另外INCLUDE允许只包括一组特定的对象,格式
EXCLUDE=object_type[:name_clause]
INCLUDE=object_type[:name_clause]
如:EXCLUDE=TABLE:”LIKE ‘EMP%’”。它排除所有以EMP开头的表。
EXCLUDE=index排除所有索引
EXCLUDE=SCHEMA:”=’HR’” 排除HR整个模式
INCLUDE正好和EXCLUDE相反,包含特定的对象,如:
INCLUDE=TABLE:”IN(‘tableA’, ‘tableB’)” 只导出tableA和tableB两个表
INCLUDE=PROCEDURE 只导出模式中所有的存储过程
INCLUDE=INDEX:’LIKE ‘EMP%’’只导出以EMP开头的索引
注意EXCLUDE和INCLUDE是相对的两个参数,不可同时使用。

c. REMAP_DATA
REMAP_DATA允许用户用一个新值替换某个列中的多个值,列的新值由重映射函数(remap function)指定。
将数据从产品环境移动到测试环境,可能由于保密等原因而需要更改敏感信息,可使用此参数。你可以使用相同的重映射函数引用约束中的子列和父列。
如:$ expdp hr/hr DIRECTORY=dump_dir DUMPFILE=expdat1.dmp
TABLES=employee REMAP_DATA=hr.employee.employee_id:hr.remap.minux10
REMAP_DATA=hr.employee.first_name: hr.remap.plusx
程序包REMAP的两个函数minux10和plusx

d. DATA_OPTIONS
DATA_OPTIONS参数允许在导出过程中处理特定的数据类型指定选项。只能将此参数指定为XML_CLOBS

e. QUERY
QUERY参数与它在传统的导出实用程序中作用相同:借助于SQL语句选择导出的表行数据。QUERY参数允许用一个表名限定SQL语句,
如:QUERY=hr.orders:”where order_id > 1000000”。订单表中的order_id >1000000的订单行被导出

f. SAMPLE
使用SAMPLE参数,可以导出表的一个数据子集。SAMPLE参数允许指定的范围从0.000001到100的一个百分数。语法如下:
SAMPLE=schema_name.table_name:sample_percent
SAMPLE=”hr”.”employee”:50
导出hr模式表employee百分之50的数据,可以不指定模式名,如不指定,则默认当前模式,如指定表名,则一般指定模式名,不然会导出所有表的百分比。

g. TRANSPORTABLE
TRANSPORTABLE参数允许指定进行表模式导出时,是否想要数据库导出特定的表的元数据,有ALWAYS和NEVER两个值

对导出数据进行加密
可使用后面的一个或多个与加密相关的参数指定数据写到转储文件时是否加密:ENCRYPTION, EXCRYPTION_ALGORITHM, ENCRYPTION_MODE, ENCRYPTION_PASSWORD.
a. ENCRYPTION
ENCRYPTION参数指定在将数据写到转储文件时是否对其加密。可给ENCRYTION参数指定以下值
ALL:加密所有数据和元数据
DATA_ONLY:只加密数据
ENCRYPTION_COLUMN_ONLY:只加密使用TDE特性的加密列
METADATA_ONLY:只加密元数据
NONE:不进行加密(默认)
注意:可通过指定ENCRYPTION或ENCRYPTION_PASSWORD参数,或者两者都指定,实施加密。如果指定了ENCRYPTION_PASSWORD参数,则ENCRYPTION参数默认ALL。
下面的例子只加密数据
$ expdp hr/hr DIRECROTY=dump_dir DUMPFILE=expdat1.dmp ENCRYPTION=data_only ENCRYPTION_PASSWORD=123456

b. ENCRYPTION_ALGORIHM
ENCRYPTION_ALGORIHM参数指定数据使用的加密算法,默认为AES128,你也可以指定AES192,AES256

c. ENCRYPTION_MODE
dual:
password:
transparent:

d. ENCRYPTION_PASSWORD
在导出转储文件中,可以使用ENCRYPTION_PASSWORD参数加密数据,以防未授权的用户从转储文件中读取数据。

估算参数
使用两个有趣的估算参数可以估算导出作业将消耗多少存储空间: ESTIMATE和ESTIMATE_ONLY
ESTIMATE参数将指出新的导出作业将要消耗多少空间,空间总是以字节为单位进行估算,可以指定数据库使用正在被导出的对象中的数据库块(BLOCK)的数量,或者表的优化程序统计数据(STATISTICS)进行空间估算
ESTIMATE=(BLOCKS|STATISTICS), BLOCKS是默认选项
ESTIMATE_ONLY
虽然ESTIMATE参数只在导出作业中生效,但是可以使用ESTIMATE_ONLY参数而不启动导出作业。
$ expdp hr/hr ESTIMATE_ONLY=y

网络链接参数
省略

与作业有关的参数
JOB_NAME:可选参数,指出导出作业的名字,若未指定,oracle将默认。此名字与作业主表的名字相同。
STATUS:
STATUS参数在运行长时间作业的时候非常有用。因为它可以按照指定的时间间隔提供更新的状态,此参数以秒为单位取整数,默认是0,将在必要时显示新的状态。如果想每分钟地确保有关正在运行中数据泵作业的更新状态,指定STATUS=60
FLASHBACK_SCN:
FLASHBACK_TIME:
PARALLEL:
PARALLEL是功能强大的参数,允许作业指定一个以上的活动执行线程,工进程,使用PARALLEL参数意味着作业将使用多线程执行,可以使用ATTACH命令在运行中改变并行度。默认值是1。不要忘记指定PARALLEL参数后,转储文件的命名要注意相同数量。
$ expdp hr/hr PARALLEL=3 DUMPFILE=expdat%U.dmp
或者
$ expdp hr/hr PARALLEL=3 DUMPFILE=(expdat01.dmp, expdat02.dmp, expdat03.dmp)
ATTACH:
ATTACH参数将使你的数据泵客户机会话加入到一个运行的作业中,并使你进入交互的方式,此参数只能与用户名密码组合使用。
$ expdp hr/hr ATTACH=job_name

交互方式的导出参数
可以使用ATTACH命令或者CTRL C命令交互地加入作业中,不会停止正在允许的作业。交互命令只停止在屏幕上显示该作业消息并显示提示符(export>)
常见的交互式命令
ADD_FILE: 给转储文件集合增加一个转储文件
CONTINUE_CLIENT:返回登陆方式, 作业将重新启动
EXIT_CLIENT:退出客户机会话,并保持作业运行
HELP:提供交换命令的帮助
KILL_JOB: 释放并删除作业
PARALLEL: 更改当前作业的活动工进程数量
START_JOB:启动并重新恢复当前作业
STATUS: 设置作业的监控频率
STOP_JOB: 顺序关闭作业的执行,并退出客户机

数据泵的导入

与数据泵导出实用程序的情形一样, 调用impdp实用程序时,可以借助于各种参数控制数据的导入,
与文件和目录有关的参数
过滤参数
与作业有关的参数
重映射参数
TRANSFORM参数
NETWORK_LINK参数
闪回参数

与文件和目录有关的参数
数据泵导入实用程序与导出程序以同样的方式使用PARFILE, DIRECTORY, DUMPFILE, LOGFILE, NOLOGFILE命令。但是SQLFILE是一个唯一针对导入程序的文件。
在执行数据导入的过程中,有时希望从导出的转储文件中提取DDL,SQLFILE参数可以很轻易的做到这一点。
$impdp hr/hr DIRECTORY=dump_dir DUMP_FILE=expdat1.dmp SQLFILE=dump02_dir:finance.sql SCHEMA=scott
此命令会将与SCOTT模式相关的DDL语句写入到SQLFILE。
要记住,SQLFILE参数只为特定的文件提取DDL,并不发生实际的数据导入。使用此参数,可以从导出的转储文件中提取带有全部DDL的SQL脚本。
另一个与导入相关的文件参数是REUSE_DATAFILES参数,指定在导入数据时是否使用已有的数据文件,=Y为使用。

B.       过滤参数
与数据泵的导出作业情形一样,使用CONTENT参数确定是否装载数据或者元数据。
EXCLUDE和INCLUDE参数限制导入的对象
可以使用TABLE_EXISTS_ACTION参数指定数据泵导入数据时若表已经存在,将做什么
SKIP: 默认值,跳过
APPEND:在已存在的表后面追加
TRUNCATE: 截取表并从转储文件中重新装载
REPLACE:删除表,重新创建表,并导入数据

C. 与作业有关的参数
JOB_NAME, STATUS,PARALLEL

D. 与导入方式有关的参数
TABLES, SCHEMAS, TABLESPACES和FULL

E. 重映射参数
重映射参数增加了ORACLE在数据导入处理过程中重映射对象的能力,参数有remap_TABLES, REMAP_SCHEMA, REMAP_DATAFILE和REMAP_TABLESPACE
REMAP_TABLE:
REMAP_TABLE参数允许在使用可移植方式的导入操作中,重命名表,
$impdp hr/hr DIRECTORY=dump_dir DUMPFILE=newdump.dmp TABLES=hr.employee REMAP_TABLE=hr.employee:emp
REMAP_TABLE参数在导入中,将HR.EMPLOYEE表更名为EMP表

REMAP_SCHEMA:
使用REMAP_SCHEMA参数,可以将对象从一个模式移动到另一个模式。
$impdp hr/hr DIRECTORY=dump_dir DUMPFILE=newdump.dmp REMAP_SCHEMA=HR:OE
将HR模式的所有对象导入到OE模式中。导入程序甚至能创建OE模式,如果他不存在的话。

REMAP_DATAFILE:
平台不同,可以使用此参数改变文件系统的名字

REMAP_TABLESPACE
将一个表空间数据导入到另一个表空间中

REMAP_DATA
REMAP_OPTIONS
TRANSPORTABLE

F. TRANSFORM参数
  假如你正从一个模式甚至另一个数据库中导入表,假设你想确保在导入过程中不导入对象的存储属性,而只导入表所包含的数据,则TRANSFORM参数允许指定数据泵导入作业不导入某些存储属性和其他属性。
  有几个值:
  SEGMENT_ATTRIBUTES: 段属性包括物理属性,存储属性,表空间和日志。通过指定SEGMENT_ATTRIBUTES=Y(默认),指示导入作业包括上述属性
  STORAGE: 可以使用STORAGE=Y默认,说明导入作业只包括对象的存储属性。
  OID:如果指定OID=Y默认,则导入过程中将分配一个新的OID给对象表
  PCTSPACE:通过给出一个正数作为该转换的值,可增加对象的分配大小,并且数据文件大小等于PCTSPACE的值
  TRANSFORM_NAME:VALUE:OBJECT TYPE
  $impdp hr/hr TABLES=hr.employee DIRECTORY=dump.dir DUMPFILE=newdump.dmp TRANSFORM=segment_attributes:n:table
  导入的数据不包括表的段属性

G.NETWORK_LINK参数
  使用新的NETWORK_LINK参数可以不通过转储文件,直接从远程导入数据。
  第一步:创建一个远程数据库的链接
  CREATE DATABASE LINK remote CONNECT TO system IDENTIFIED BY password USING ‘remote.world’
  第二部:若没有的话创建一个目录对象
  CREATE DIRECTORY remote_dir AS ‘/u/app/oracle/dp_dir’;
  第三步: EXPORT DATA_PUMP_DIR=remote_dir环境变量
  第四步: 从数据库remote中执行网络导入
  $ impdp system/password SCHEMA=scott NETWORD_LINK=remote

H. 闪回参数
I.交互式参数
与导出基本类似,不在多介绍

监控数据泵作业
有两个视图(DBA_DATAPUMP_JOBS和DBA_DATAPUMP_SESSIONS)对于监控数据泵作业至关重要。另外,可以使用视图V$SESSION_LONGOPS和V$SESSION获取会话信息。在大多数情况下,可以联结两个或更多的视图来获得作业进展的必要信息。

浏览数据泵作业
DBA_DATAPUMP_JOBS视图显示所有当前运行的数据泵作业的概要信息。如下:
SELECT * FROM DBA_DATAPUMP_JOBS
由于动态DBA_DATAPUMP_JOBS视图只显示活动的作业,所以在该视图中的查询将显示正在运行的重要JOB_NAME列值。如果想半路加入到正在运行的作业中,需要知道作业名,由于主表的名字与与JOB_NAME列值相同,所以可以通过该视图确定主表的名字。
JOB_MODE列可以取值为FULL, TABLE, SCHEMA或TABLESPACE, 反映当前执行的导出或导入作业的方式。
STATE列根据执行查询所在的导出或导入的阶段,可以取值为UNDEFINED,DEFINING, EXCUTING和NOT RUNNING。

浏览数据泵会话
DBA_DATAPUMP_SESSIONS视图显示当前加入到数据泵导出或导入作业中的用户会话,可以将此视图中的SADDR列与V$SESSION视图的SADDR列联结,以获取有关当前加入到作业中的用户会话的有用信息。
SELECT SID, SERIAL# FROM V$SESSION S, DBA_DATAPUMP_SESSIONS D
WHERE S.SADDR = D.SADDR

浏览数据泵作业的进度
在V$SESSION_LONGOPS视图中,可以使用以下4个列的监控导出或导入作业的进展:
TOTALWORK: 显示作业的以MB为单位的总估算量
SOFAR: 显示作业中迄今为止移动的字节数量,以MB为单位
UNITS: 代表兆字节,以MB为单位
OPNAME: 显示数据泵的作业名
以下是个典型的脚本,
SELECT OPNAME, TARGET_DESC, SOFAR, TOTALWORK
FROM V$SESSION_LONGOPS

使用数据泵API           
使用数据泵API来编写PLSQL脚本以导出或导入数据,数据泵API在DBMS_DATAPUMP程序包中,他可以完成以下任务
启动作业
监控作业
分解作业
停止作业
重新启动作业
DBMS_DATAPUMP.OPEN()
DBMS_DATAPUMP.ADD_FILE()
DBMS_DATAPUMP.METADATA_FILEDIR()
DBMS_DATAPUMP.START_JOB()

可移植表空间
Oracle的可移植表空间特性通过将数据简单地从一个数据库移动的另一个数据库,提供了一种数据库之间有效移动大数据的简易方法。Oracle强烈推荐尽可能地使用可移植表空间特性,因为其在数据库之间的移动数据特性超越了其他方法。

移植表空间主要有以下几个步骤
选择要移动的表空间,确保与其他表空间的对象无任何依赖关系
生成可移植表空间集
执行表空间导入。这涉及将数据文件复制到目标服务器并将相关元数据导入到目标数据库中

选择要移植的表空间
移植表空间必须满足的主要条件是:候选的表空间集必须为自包含。在要移植的表空间内的对象的引用完整性约束一定不能指向表空间外的对象。检验表空间是否满足自包含条件的一种方法是使用DBMS_TTS程序包
EXECUTE SYS.DBMS_TTS.TRANSPORT_SET_CHECK(‘TABLESPACE’, TRUE)
必须拥有EXECUTE_CATALOG_ROLE角色来执行TRANSPORT_SET_CHECK过程。如果执行这个过程没有返回出错信息。则表明在可移植集合中的表空间是自包含的,因而符合条件。

生成可移植表空间集
在将表空间移植到目标数据库之前,必须生产一个可移植表空间集。可移植表空间集由表空间中所有数据文件和导出转储文件组成。导出转储文件中包含了关于表空间的格式化数据目录信息。
在移植表空间之前要做的一件事情就是将表空间设置为只读方式。如果有活动的事务正在修改表,则不能移植表空间。
ALTER TABLESPACE TABLESPACE_NAME READ_ONLY
然后就是导出表空间的元数据
此步骤在执行过程中,很快,因为没有导出行数据,只是元数据。
EXPDP OE/OE DIRECTORY=dump_dir DUMPFILE=sales.dmp
TRANPORT_TABLESPACE=sales01
将导出的转储文件和数据文件复制到目标数据库
复制之前要确保表空间的块大小与目标表空间的标准块大小相等,如果不等,目标数据泵必须在其init.ora文件中指定一个非标准的块大小来充当要导出的表空间的块大小。最后使用FTP,远程复制或其他方法,将文件复制到目标数据库

执行表空间的导入
最后运行数据泵导入实用程序(在目标数据库中),插入表空间并且在目标数据库的数据泵中并入表空间信息。由于导出转储文件没有任何数据,将要导入的只是对象的元数据。目标数据库将简单的使用从源数据库复制过来的数据文件作为可移植表空间的数据文件。所需要做的就是把表空间插入目标数据库中
IMPDP system/password DUMPFILE=sales.dmp TRANSPORT_DATAFILES=’sales01.dbf’ directory=dump_dir
可移植表空间功能强大同时非常高效,可跨平台。

转自:http://wenku.baidu.com/view/1359cd3843323968011c92bd .html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值