oracle使用数据泵导出和导入.docx
- 文档编号:29780284
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:21
- 大小:27.30KB
oracle使用数据泵导出和导入.docx
《oracle使用数据泵导出和导入.docx》由会员分享,可在线阅读,更多相关《oracle使用数据泵导出和导入.docx(21页珍藏版)》请在冰豆网上搜索。
oracle使用数据泵导出和导入
使用数据泵导出和导入
几乎所有DBA都熟悉oracle的导出和导入实用程序,它们将数据装载进或卸载出数据库,在oracledatabase10g和11g中,你必须使用更通用更强大的数据泵导出和导入(DataPumpExportandImport)实用程序导出和导入数据。
以前的导出和导入实用程序在oracledatabase11g中仍然可以使用,但是Oracle强烈建议使用数据泵(DataPump)技术,因为它提供了更多的高级特性。
例如,你可以中断导出/导入作业,然后恢复它们;可以重新启动已失败的导出和导入作业;可以重映射对象属性以修改对象;可以容易地从另一个会话中监控数据泵的作业,甚至可以在作业过程中修改其属性;使用并行技术很容易快速移动大量的数据;因为oracle提供了针对数据泵技术的API,所以可以容易地在PL/SQL程序中包含导出/导入作业;可以使用更强大的可移植表空间特性来快速移植大量的数据,甚至可在不同操作系统平台之间移动。
与旧的导出和导入实用程序不同,数据泵程序有一组可以在命令行中使用的参数以及一组只能以交互方式使用的特殊命令,你可以通过在命令行中输入expdphelp=y或者impdphelp=y快速获取所有数据泵参数及命令的概述。
一.数据泵技术的优点
原有的导出和导入技术基于客户机,而数据泵技术基于服务器。
默认所有的转储,日志和其他文件都建立在服务器上。
以下是数据泵技术的主要优点:
1.改进了性能
2.重新启动作业的能力
3.并行执行的能力
4.关联运行作业的能力
5.估算空间需求的能力
6.操作的网格方式
7.细粒度数据导入功能
8.重映射能力
二.数据泵导出和导入的用途
1.将数据从开发环境转到测试环境或产品环境
2.在不同的操作系统平台上的oracle数据库直接的传递数据
3.在修改重要表之前进行备份
4.备份数据库
5.把数据库对象从一个表空间移动到另一个表空间
6.在数据库直接移植表空间
7.提取表或其他对象的DDL
注意:
数据库不建立完备的备份,因为在导出文件中没有灾难发生时的最新数据。
但是对于较小的数据库和个别的表空间的导出,数据导出仍然是一个可行的备份工具。
三.数据泵的组成部分
数据泵技术主要有三个以下部件组成
a.DBMS_DATAPUMP程序包。
这是驱动数据字段元数据装载和卸载的主要引擎。
DBMS_DATAPUMP程序包包括数据泵技术的核心部分,此核心部分以过程的形式出现,实际驱动数据装载和卸载。
b.DBMS_METADATA。
为了提取并修改元数据,Oracle提供了DBMS_METADATA程序包。
c.命令行客户机。
两个实用程序-------expdp和impdp进行导出和导入工作。
四.数据泵文件
对于数据泵操作,可以使用三种类型的文件:
a.转储文件:
此文件存储表数据已经被装载或卸载的原数据
b.日志文件:
记录数据泵操作的消息和结果
c.SQL文件:
数据泵使用一种特殊的参数sqlfile,把导入作业中要执行的所有DDL语句写入一个文件中。
数据泵并不实际执行SQL,它仅仅是将DDL语句写入由SQLFILE参数制定的文件中。
1.使用目录对象
数据泵作业在服务器上(而不是启动左右的客户机上)创建其所有的转储文件。
Oracle后台进程代表Oracle的拥有者,负责为所有转储文件设置I/O。
这意味着从安全角度讲,你不能让用户在服务器上指定绝对路径,除此之外还存在安全措施等问题。
为了避免这些类型的问题,数据泵使用目录对象。
目录对象(directoryobject)被称为是数据泵映射到一个特定操作系统目录的对象,例如,一个目录对象dump_dir可以指向服务器上/u01/app/oracle/admin/export目录。
然后通过简单的dump_dir目录对象名,访问该目录。
Oracle会创建一个默认的目录对象DATA_PUMP_DIR。
改默认的对象目录由oracle在以下位置自动创建:
a)ORACLE_BASE/admin/sid
b)ORACLE_HOME/admin/sid
如果未建立自己的目录对象,oracle将使用默认的目录对象DATA_PUMP_DIR,并将转储文件,日志文件,SQL文件写到里面。
要想了解默认的DATA_PUMP_DIR,可以使用基于DBA_DIRECTORIES视图查询。
SELECT*FROMDBA_DIRECTORIES
只有拥有SYS和SYSTEM权限的用户才能够使用默认目录对象DATA_PUMP_DIR。
因此,SYSTEM用户可以启动数据泵作业,而不用提供目录名。
其他,未授权的用户能够使用数据泵导出或导入前,DBA(或者有CREATEANYDIRECTORY权限的用户)必须创建一个目录对象并授予相应的权限。
CREATEORREPLACEDIRECTORYdirectoy_nameas‘/u/test/oradata’
授予权限:
GRANTREAD,WRITEONDIRECTORYdirectoy_nameTOuser_name
之后所有的数据泵导出或导入作业均可使用DIRECTORY参数指定目录
如:
DIRECTORY=directoy_name,如果用户视图使用expdp或impdp没有指定目录对象将报错。
在实际的作业中,可以通过以下方式指定目录对象:
a)DIRECTORY参数:
在一个数据泵导出作业中,可以使用DIRECOTY参数指定对象名;
$expdphr/hrDIRECOTY=dump_dir……
b)DIRECOTY:
FILE表示法:
为替代使用DIRECTORY参数,可以讲目录对象包含在一个特定的数据泵文件中(转储,日志,SQLFILE)。
使用冒号(:
)隔开文件说明中的目录和个别文件名;
$expdphr/hrLOGFILE=dump_dir:
test.log……
c)DATA_PUMP_DIR环境变量:
可以使用环境变量DATA_PUMP_DIR指向服务器的目录对象。
使用export命令,
$EXPORTDATA_PUMP_DIR=dump_dir
指定之后,就不需要在作业中再指定DIRECTORY参数了。
2.文件位置的优先次序
由于存在几种指定目录的方法,则究竟使用哪种,有一定的优先次序
a)Oracle首先检查是否将目录包含在一个与文件有关的参数内
b)第二个检查是否存在DIRECTORY参数
c)第三个检查是否使用环境变量
d)最后检查默认的DATA_PUMP_DIR目录对象
五.数据泵的权限
所有的oracle用户都可以在默认情况下使用数据泵实用程序,若使用某些高级任务,还必须拥有以下的权限
EXP_FULL_DATABASE,IMP_FULL_DATABASE
六.数据泵的作业结构
数据泵导出和导入实用程序使用几个进程来执行其作业,其中包括关键的主进程和工进程,以及客户机进程和影子进程,下面我们具体来看看各个进程:
a)主进程
主进程,更精确地说,MCP(MasterControlProcess),有一个进程名为DMnn,全主进程名用
主进程控制整个数据泵作业的执行和顺序。
具体来说,主进程执行一下任务:
1.创建并控制左右
2.创建并管理工进程(workerprocess)
3.监控作业并记录进程
4.维护作业状态并重新启动主表中的信息
5.管理必要的文件,包括转储文件集
主进程使用一个特殊的表,即主表。
记录导出转储文件中的各数据对象的位置。
主表很像oracle的其他表,它位于每个数据泵导出和导入作业的中心。
主进程维护作业状态并启动主表中的信息。
Oracle在每个导出任务作业开始的时候,在正在运行数据泵作业的用户模式中创建主表。
主表包括了关于当前作业的各类信息,如导出/导入作业中的对象状态,转储文件集的位置,作业的参数以及所有工进程的状态,主表与导出左右的名字相同。
主进程只对导出过程使用主表,在导出结束时,在导出作业的最后一步,主进程将主表的内容写入导出转储文件并自动从数据库中删除主表。
主要导出作业成功完成或者发布了KILL_JOB的命令主表都讲自动删除,但是如果使用STOP_JOB命令停止作业,或者导出作业由于某种原因失败,主表不会被删除,表中包含了要重新启动中断作业的全部必要信息。
b)工进程
工进程名为
它是实际执行繁重的装载和卸载数据工作的进程。
主进程创建工进程,并行度决定主进程将创建几个工进程,工进程维护主表的行,在导出和导入各种对象时,他们根据作业状态信息更新主表,完成,未决或失败
c)影子进程
当客户机登陆Oracle服务器时,数据库创建了一个Oracle进程为数据泵API的请求服务。
此影子进程(shadowprocess)创建由主表和主进程组成的作业,一旦客户机崩溃,影子进程自动消失
d)客户机进程
客户机进程调用数据泵API。
可使用两个客户机expdp和impdp,执行导出和导入。
七.数据泵的导出
i.数据泵的导出方法
1.使用命令行,如:
$expdpsystem/managerDIRECTORY=dump_dirDUMPFILE=expda1.dmp
2.使用参数文件
除了在命令行直接指定导出参数外,还可以将他们放入参数文件中,从而在实际的导出作业中调用该参数文件,如:
mytext.txt
SCHEMA=hr
DIRECTORY=dump_dir
DUMPFILE=expda1.dmp
创建参数文件后,为了导出HR模式,所需要做的就是用PARFILE参数调用:
$expdpPARFILE=mytext.txt
ii.数据泵导出的方式
可以使用下列几种方式执行导出作业
1.全导出方式(fullexportmode)。
当你想要在一个导出回话中导出整个数据库时,使用FULL参数,但是要有EXPORT_FULL_DATABASE的权限。
2.模式方式(schemamode)。
如果只想导出一个单独用户的数据或对象,必须使用SCHEMA参数
3.表空间方式(tablespacemode)。
使用表空间方式可以导出一个或多个表空间中的全部表。
如果使用TRANSPORT_TABLESPACE参数,则只导出包含在一个或多个表空间中的对象的元数据,你能够通过先导出元数据,在讲表空间的文件复制到目标服务器,然后再将元数据导入目标服务器。
4.表方式(tablemode)。
用TABLES参数,可以导出一个或多个表。
模式方式是数据泵导出作业的默认方式,如果按以下命令执行,则数据泵将自动执行导出SYSTEM的对象
$expdpsystem/123456
iii.数据泵的导出参数
数据泵导出实用程序的使用主要是一些参数,为了方便讨论,将参数分成以下几类:
1.与文件目录有关的参数
2.与导出方式有关的参数
3.导出过滤的参数
4.与加密有关的参数
5.估算参数
6.网络链接参数
7.交互方式参数
8.与作业有关的参数
下面分别讨论
A.与文件目录有关的参数
可以在数据泵的导出参数中指定几个与文件和目录有关的参数,这些参数包括,DIRECTORY,DUMPFILE,FILESIZE,PARFILE,LOGFILE,NOLOGFILE和COMPRESSION参数
a.DIRECTORY
Directory参数指向为转储文件和日志文件使用的目录对象,见4.1。
b.DUMPFILE
DUMPFILE参数提供应该写入导出的转储文件的名字(或列表)。
通过指定%U替换变量,可创建多个转储文件,替换变量将从01到99,例如exp%U.dmp可以转储成exp01.dmp,exp02.dmp,exp03.dmp等文件名。
用%U指定的多个转储文件,由参数PARALLEL决定。
在用逗号分隔的列表中提供多个文件
如果未指定默认的DUMPFILE,作业将使用默认的文件参数名expdat.dmp。
c.FILESIZE
FILESIZE参数是可选的,它指定转储文件的大小,默认以字节为单位,可以用字节,KB,MB,GB为单位指定FILESIZE参数。
若不指定,则转储文件没有大小的限制,如果通过FILESIZE指定了转储文件的最大大小。
倘若转储文件超过限制,导出作业将停止,待该问题解决后仍可以重新启动它。
d.PARFILE
PARFILE参数文件,如同前面介绍的内容。
e.LOGFILE和NOLOGFILE
可以用LOGFILE指定导出作业的日志文件,如果使用NOLOGFILE则作业将不创建日志文件,但屏幕仍可看到日志信息。
f.REUSE_DUMPFILES
可指定REUSE_DUMPFILES参数覆盖一个导出的转储文件。
默认是不覆盖。
可以指定值Y,覆盖一个之前的转储文件,N是默认行为。
$expdphr/hrDIRECTORY=dump_dirDUMPFILE=expdat.dmpTABLES=employeesREUSE_DUMPFILES=y
当然必须保证不在使用之前的expdat.dmp文件了
g.COMPRESSION
COMPRESSION参数允许用户指定在将导出数据写入转储文件时,压缩哪些数据。
默认时,所有被导出的元数据均被压缩。
可以指定all,data_only,metadata_only,none等参数:
All:
允许对整个操作压缩
data_only:
只压缩数据
metadata_only:
只压缩原数据,这是默认值
none:
不压缩
B.与导出方式有关的参数
与导出方式有关的参数有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,则数据泵导出作业将检查单向相关性。
如果可移植表空间集合包含包而未包含索引,则导出将成功,但是如果只包含索引还没有表,则导出作业将失败。
C.导出过滤参数
a.CONTENT
使用CONTENT参数,可以过滤要写入导出转储文件中的内容。
CONTENT参数可取以下三个值:
ALL:
同时导出数据和元数据
DATA_ONLY:
只导出数据
METADATA:
只导出元数据
$expdphr/hrDUMPFILE=expdat1.dmpCONTENT=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允许用户用一个新值替换某个列中的多个值,列的新值由重映射函数(remapfunction)指定。
将数据从产品环境移动到测试环境,可能由于保密等原因而需要更改敏感信息,可使用此参数。
你可以使用相同的重映射函数引用约束中的子列和父列。
如:
$expdphr/hrDIRECTORY=dump_dirDUMPFILE=expdat1.dmp
TABLES=employeeREMAP_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:
”whereorder_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两个值
D.对导出数据进行加密
可使用后面的一个或多个与加密相关的参数指定数据写到转储文件时是否加密:
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。
下面的例子只加密数据
$expdphr/hrDIRECROTY=dump_dirDUMPFILE=expdat1.dmpENCRYPTION=data_onlyENCRYPTION_PASSWORD=123456
b.ENCRYPTION_ALGORIHM
ENCRYPTION_ALGORIHM参数指定数据使用的加密算法,默认为AES128,你也可以指定AES192,AES256
c.ENCRYPTION_MODE
dual:
password:
transparent:
d.ENCRYPTION_PASSWORD
在导出转储文件中,可以使用ENCRYPTION_PASSWORD参数加密数据,以防未授权的用户从转储文件中读取数据。
E.估算参数
使用两个有趣的估算参数可以估算导出作业将消耗多少无力空间:
ESTIMATE和ESTIMATE_ONLY
ESTIMATE参数将指出新的导出作业将要消耗多少空间,空间总是以字节为单位进行估算,可以指定数据库使用正在被导出的对象中的数据库块(BLOCK)的数量,或者表的优化程序统计数据(STATISTICS)进行空间估算
ESTIMATE=(BLOCKS|STATISTICS),BLOCKS是默认选项
ESTIMATE_ONLY
虽然ESTIMATE参数只在导出作业中生效,但是可以使用ESTIMATE_ONLY参数而不启动导出作业。
$expdphr/hrESTIMATE_ONLY=y
F.网络链接参数
省略
G.与作业有关的参数
JOB_NAME:
可选参数,指出导出作业的名字,若未指定,oracle将默认。
此名字与作业主表的名字相同。
STATUS:
STATUS参数在运行长时间作业的时候非常有用。
因为它可以按照指定的时间间隔提供更新的状态,此参数以秒为单位取整数,默认是0,将在必要时显示新的状态。
如果想每分钟地确保有关正在运行中数据泵作业的更新状态,指定STATUS=60
FLASHBACK_SCN:
FLASHBACK_TIME:
PARALLEL:
PARALLEL是功能强大的参数,允许作业指定一个以上的活动执行线程,工进程,使用PARALLEL参数意味着作业将使用多线程执行,可以使用ATTACH命令在运行中改变并行度。
默认值是1。
不要忘记指定PARALLEL参数后,转储文件的命名要注意相同数量。
$expdphr/hrPARALLEL=3DUMPFILE=expdat%U.dmp
或者
$expdphr/hrPARALLEL=3DUMPFILE=(expdat01.dmp,expdat02.dmp,expdat03.dmp)
ATTACH:
ATTACH参数将使你的数据泵客户机会话加入到一个运行的作业中,并使你进入交互的方式,此参数只能与用户名密码组合使用。
$expdphr/hrATTACH=job_name
H.交互方式的导出参数
可以使用ATTACH命令或者CTRL+C命令交互地加入作业中,不会停止正在允许的作业。
交互命令只停止在屏幕上显示该作业消息并显示提示符(export>)
常见的交互式命令
ADD_FILE:
给转储文件集合增加一个转储文件
CONTINUE_CLIENT:
返回登陆方式,作业将重新启动
EXIT_CLIENT:
退出客户机会话,并保持作业允许
HELP:
提供交换命令的帮助
KILL_JOB:
释放并删除作业
PARALLEL:
更改当前作业的活动工进程数量
START_JOB:
启动并重新恢复当前作业
STATUS:
设置作业的监控频率
STOP_JOB:
顺序关闭作业的执行,并退出客户机
八.数据泵的导入
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- oracle 使用 数据 导出 导入
![提示](https://static.bdocx.com/images/bang_tan.gif)