Oracle exp及imp导出导入工具的使用全Word格式文档下载.docx
- 文档编号:17984505
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:23
- 大小:32.09KB
Oracle exp及imp导出导入工具的使用全Word格式文档下载.docx
《Oracle exp及imp导出导入工具的使用全Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Oracle exp及imp导出导入工具的使用全Word格式文档下载.docx(23页珍藏版)》请在冰豆网上搜索。
QUERY选定导出表子集的子句
下列关键字仅用于可传输的表空间
TRANSPORT_TABLESPACE导出可传输的表空间元数据(N
TABLESPACES将传输的表空间列表
IMP的所有参数(括号中为参数的默认值:
USERID用户名/口令
FULL导入整个文件(N
BUFFER数据缓冲区大小
FROMUSER所有人用户名列表
FILE输入文件(EXPDAT.DMP
TOUSER用户名列表
SHOW只列出文件内容(N
TABLES表名列表
IGNORE忽略创建错误(N
GRANTS导入权限(Y
INCTYPE增量导入类型
INDEXES导入索引(Y
COMMIT提交数组插入(N
ROWS导入数据行(Y
PARFILE参数文件名
CONSTRAINTS导入限制(Y
DESTROY覆盖表空间数据文件(N
INDEXFILE将表/索引信息写入指定的文件
SKIP_UNUSABLE_INDEXES跳过不可用索引的维护(N
ANALYZE执行转储文件中的ANALYZE语句(Y
TOID_NOVALIDATE跳过指定类型id的校验
RECALCULATE_STATISTICS重新计算统计值(N
TRANSPORT_TABLESPACE导入可传输的表空间元数据(N
TABLESPACES将要传输到数据库的表空间
DATAFILES将要传输到数据库的数据文件
TTS_OWNERS拥有可传输表空间集中数据的用户
关于增量参数的说明:
exp/imp的增量并不是真正意义上的增量,所以最好不要使用。
使用方法:
Expparameter_name=valueorExpparameter_name=(value1,value2……
只要输入参数help=y就可以看到所有帮助.
EXP常用选项
1.FULL,这个用于导出整个数据库,在ROWS=N一起使用时,可以导出整个数据库的结构。
例如:
expuserid=test/testfile=./db_str.dmplog=./db_str.logfull=yrows=ncompress=ydirect=y
2.OWNER和TABLE,这两个选项用于定义EXP的对象。
OWNER定义导出指定用户的对象;
TABLE指定EXP的table名称,例如:
expuserid=test/testfile=./db_str.dmplog=./db_str.logowner=duanl
expuserid=test/testfile=./db_str.dmplog=./db_str.logtable=nc_data,fi_arap
3.BUFFER和FEEDBACK,在导出比较多的数据时,我会考虑设置这两个参数。
expuserid=test/testfile=yw97_2003.dmplog=yw97_2003_3.logfeedback=10000buffer=100000000tables=WO4,OK_YT
4.FILE和LOG,这两个参数分别指定备份的DMP名称和LOG名称,包括文件名和目录,例子见上面。
5.COMPRESS参数不压缩导出数据的内容。
用来控制导出对象的storage语句如何产生。
默认值为Y,使用默认值,对象的存储语句的initextent等于当前导出对象的extent的总和。
推荐使用COMPRESS=N。
6.FILESIZE该选项在8i中可用。
如果导出的dmp文件过大时,最好使用FILESIZE参数,限制文件大小不要超过2G。
如:
expuserid=duanl/duanlfile=f1,f2,f3,f4,f5filesize=2Gowner=scott
这样将创建f1.dmp,f2.dmp等一系列文件,每个大小都为2G,如果导出的总量小于10GEXP不必创建f5.bmp.
IMP常用选项
1、FROMUSER和TOUSER,使用它们实现将数据从一个SCHEMA中导入到另外一个SCHEMA中。
假设我们做exp时导出的为test的对象,现在我们想把对象导入用户:
impuserid=test1/test1file=expdat.dmpfromuser=test1touser=test1
2、IGNORE、GRANTS和INDEXES,其中IGNORE参数将忽略表的存在,继续导入,这个对于需要调整表的存储参数时很有用,我们可以先根据实际情况用合理的存储参数建好表,然后直接导入数据。
而GRANTS和INDEXES则表示是否导入授权和索引,如果想使用新的存储参数重建索引,或者为了加快到入速度,我们可以考虑将INDEXES设为N,而GRANTS一般都是Y。
impuserid=test1/test1file=expdat.dmpfromuser=test1touser=test1indexes=N表空间传输
表空间传输是8i新增加的一种快速在数据库间移动数据的一种办法,是把一个数据库上的格式数据文件附加到另外一个数据库中,而不是把数据导出成Dmp文件,这在有些时候是非常管用的,因为传输表空间移动数据就象复制文件一样快。
关于传输表空间有一些规则,即:
·
源数据库和目标数据库必须运行在相同的硬件平台上。
源数据库与目标数据库必须使用相同的字符集。
源数据库与目标数据库一定要有相同大小的数据块
目标数据库不能有与迁移表空间同名的表空间
SYS的对象不能迁移
必须传输自包含的对象集
有一些对象,如物化视图,基于函数的索引等不能被传输
可以用以下的方法来检测一个表空间或一套表空间是否符合传输标准:
execsys.dbms_tts.transport_set_check(‘tablespace_name’,true;
select*fromsys.transport_set_violation;
如果没有行选择,表示该表空间只包含表数据,并且是自包含的。
对于有些非自包含的表空间,如数据表空间和索引表空间,可以一起传输。
以下为简要使用步骤,如果想参考详细使用方法,也可以参考ORACLE联机帮助。
1.设置表空间为只读(假定表空间名字为APP_Data和APP_Index
altertablespaceapp_datareadonly;
altertablespaceapp_indexreadonly;
2.发出EXP命令
SQL>
hostexpuserid=”””sys/passwordassysdba”””
transport_tablespace=ytablespace=(app_data,app_index
以上需要注意的是
为了在SQL中执行EXP,USERID必须用三个引号,在UNIX中也必须注意避免“/”的使用
在816和以后,必须使用sysdba才能操作
这个命令在SQL中必须放置在一行(这里是因为显示问题放在了两行
3.拷贝数据文件到另一个地点,即目标数据库
可以是cp(unix或copy(windows或通过ftp传输文件(一定要在bin方式
4.把本地的表空间设置为读写
5.在目标数据库附加该数据文件
impfile=expdat.dmpuserid=”””sys/passwordassysdba”””transport_tablespace=y“datafile=(c:
\temp\app_data,c:
\temp\app_index”
6.设置目标数据库表空间为读写
altertablespaceapp_datareadwrite;
altertablespaceapp_indexreadwrite;
优化EXP/IMP的方法:
当需要exp/imp的数据量比较大时,这个过程需要的时间是比较长的,我们可以用一些方法来优化exp/imp的操作。
exp:
使用直接路径direct=y
oracle会避开sql语句处理引擎,直接从数据库文件中读取数据,然后写入导出文件.
可以在导出日志中观察到:
exp-00067:
tablexxxwillbeexportedinconventionalpath
如果没有使用直接路径,必须保证buffer参数的值足够大.
有一些参数于direct=y不兼容,无法用直接路径导出可移动的tablespace,或者用query参数导出数据库子集.
当导入导出的数据库运行在不同的os下时,必须保证recordlength参数的值一致.
imp:
通过以下几个途径优化
1.避免磁盘排序
将sort_area_size设置为一个较大的值,比如100M
2.避免日志切换等待
增加重做日志组的数量,增大日志文件大小.
3.优化日志缓冲区
比如将log_buffer容量扩大10倍(最大不要超过5M
4.使用阵列插入与提交
commit=y
注意:
阵列方式不能处理包含LOB和LONG类型的表,对于这样的table,如果使用commit=y,每插入一行,就会执行一次提交.
5.使用NOLOGGING方式减小重做日志大小
在导入时指定参数indexes=n,只导入数据而忽略index,在导完数据后在通过脚本创建index,指定NOLOGGING选项
导出/导入与字符集
进行数据的导入导出时,我们要注意关于字符集的问题。
在EXP/IMP过程中我们需要注意四个字符集的参数:
导出端的客户端字符集,导出端数据库字符集,导入端的客户端字符集,导入端数据库字符集。
我们首先需要查看这四个字符集参数。
查看数据库的字符集的信息:
SQL>
select*fromnls_database_parameters;
PARAMETERVALUE
--------------------------------------------------------------------------------------------------------------
NLS_LANGUAGEAMERICAN
NLS_TERRITORYAMERICA
NLS_CURRENCY$
NLS_ISO_CURRENCYAMERICA
NLS_NUMERIC_CHARACTERS.,
NLS_CHARACTERSETZHS16GBK
NLS_CALENDARGREGORIAN
NLS_DATE_FORMATDD-MON-RR
NLS_DATE_LANGUAGEAMERICAN
NLS_SORTBINARY
NLS_TIME_FORMATHH.MI.SSXFFAM
NLS_TIMESTAMP_FORMATDD-MON-RRHH.MI.SSXFFAM
NLS_TIME_TZ_FORMATHH.MI.SSXFFAMTZH:
TZM
NLS_TIMESTAMP_TZ_FORMATDD-MON-RRHH.MI.SSXFFAMTZH:
NLS_DUAL_CURRENCY$
NLS_COMPBINARY
NLS_NCHAR_CHARACTERSETZHS16GBK
NLS_RDBMS_VERSION8.1.7.4.1
NLS_CHARACTERSET:
ZHS16GBK是当前数据库的字符集。
我们再来查看客户端的字符集信息:
客户端字符集的参数NLS_LANG=_<
territory>
.
language:
指定oracle消息使用的语言,日期中日和月的显示。
Territory:
指定货币和数字的格式,地区和计算星期及日期的习惯。
Characterset:
控制客户端应用程序使用的字符集。
通常设置或等于客户端的代码页。
或者对于unicode应用设为UTF8。
在windows中,查询和修改NLS_LANG可在注册表中进行:
HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\HOMExx\
xx指存在多个Oracle_HOME时的系统编号。
在unix中:
$env|grepNLS_LANG
NLS_LANG=simplifiedchinese_china.ZHS16GBK
修改可用:
$exportNLS_LANG=AMERICAN_AMERICA.UTF8
通常在导出时最好把客户端字符集设置得和数据库端相同。
当进行数据导入时,主要有以下两种情况:
(1源数据库和目标数据库具有相同的字符集设置。
这时,只需设置导出和导入端的客户端NLS_LANG等于数据库字符集即可。
(2源数据库和目标数据库字符集不同。
先将导出端客户端的NLS_LANG设置成和导出端的数据库字符集一致,导出数据,然后
将导入端客户端的NLS_LANG设置成和导出端一致,导入数据,这样转换只发生在数据库端,而且只发生一次。
这种情况下,只有当导入端数据库字符集为导出端数据库字符集的严格超集时,数据才能完全导成功,否则,可能会有数据不一致或乱码出现。
不同版本的EXP/IMP问题
一般来说,从低版本导入到高版本问题不大,麻烦的是将高版本的数据导入到低版本中,在Oracle9i之前,不同版本Oracle之间的EXP/IMP可以通过下面的方法来解决:
1、在高版本数据库上运行底版本的catexp.sql;
2、使用低版本的EXP来导出高版本的数据;
3、使用低版本的IMP将数据库导入到低版本数据库中;
4、在高版本数据库上重新运行高版本的catexp.sql脚本。
但在9i中,上面的方法并不能解决问题。
如果直接使用低版本EXP/IMP会出现如下错误:
EXP-00008:
orACLEerror%luencountered
orA-00904:
invalidcolumnname
这已经是一个公布的BUG,需要等到Oracle10.0才能解决,BUG号为2261722,你可以到METALINK上去查看有关此BUG的详细信息。
BUG归BUG,我们的工作还是要做,在没有Oracle的支持之前,我们就自己解决。
在Oracle9i中执行下面的SQL重建exu81rls视图即可。
CreateorREPLACEviewexu81rls
(objown,objnam,policy,polown,polsch,polfun,stmts,chkopt,enabled,spolicy
ASselectu.name,o.name,r.pname,r.pfschma,r.ppname,r.pfname,
decode(bitand(r.stmt_type,1,0,'
'
'
Select,'
||decode(bitand(r.stmt_type,2,0,'
Insert,'
||decode(bitand(r.stmt_type,4,0,'
Update,'
||decode(bitand(r.stmt_type,8,0,'
Delete,'
r.check_opt,r.enable_flag,
DECODE(BITAND(r.stmt_type,16,0,0,1
fromuser$u,obj$o,rls$r
whereu.user#=o.owner#
andr.obj#=o.obj#
and(uid=0or
uid=o.owner#or
exists(select*fromsession_roleswhererole='
Select_CATALOG_ROLE'
/
grantselectonsys.exu81rlstopublic;
可以跨版本的使用EXP/IMP,但必须正确地使用EXP和IMP的版本:
1、总是使用IMP的版本匹配数据库的版本,如:
要导入到817中,使用817的IMP工具。
2、总是使用EXP的版本匹配两个数据库中最低的版本,如:
从9201往817中导入,则使用817版本的EXP工具。
一.导出工具exp
1.它是操作系统下一个可执行的文件存放目录/ORACLE_HOME/bin
exp导出工具将数据库中数据备份压缩成一个二进制系统文件.可以在不同OS间迁移
它有三种模式:
a.用户模式:
导出用户所有对象以及对象中的数据;
b.表模式:
导出用户所有表或者指定的表;
c.整个数据库:
导出数据库中所有对象。
2.导出工具exp交互式命令行方式的使用的例子
$exptest/test123@appdb
Enterarrayfetchbuffersize:
4096>
回车
Exportfile:
expdat.dmp>
m.dmp生成导出的文件名
(1E(ntiredatabase,(2U(sers,or(3T(ables:
(2U>
3
Exporttabledata(yes/no:
yes>
Compressextents(yes/no:
ExportdoneinZHS16GBKcharactersetandZHS16GBKNCHARcharacterset
AbouttoexportspecifiedtablesviaConventionalPath...
Table(TorPartition(T:
Ptobeexported:
(RETURNtoquit>
cmamenu要导出的表名
..exportingtableCMAMENU4336rowsexported
要导出的表名n
Exportterminatedsuccessfullywithoutwarnings.
3.导出工具exp非交互式命令行方式的例子
$expscott/tigertables=(emp,deptfile=/directory/scott.dmpgrants=y
说明:
把scott用户里两个表emp,dept导出到文件/directory/scott.dmp
$expscott/tigertables=empquery=\"
wherejob=\'
salesman\'
andsal\<
1600\"
file=/directory/scott2.dmp
在exp里面加上导出emp的查询条件job='
salesman'
andsal<
1600
(但我个人很少这样用,还是把满足条件的记录生成临时表后,再exp会方便一些
$expparfile=username.parfile=/directory1/username_1.dmp,/directory1/username_2.dmpfilesize=2000Mlog=/directory2/username_exp.log
参数文件username.par内容
userid=username/userpassword
buffer=8192000
compress=n
grants=y
username.par为导出工具exp用的参数文件,里面具体参数可以根据需要去修改filesize指定生成的二进制备份文件的最大字节数
(可用来解决某些OS下2G物理文件的限制及加快压缩速度和方便刻历史数据光盘等
二.导入工具imp
imp导入工具将EXP形成的二进制系统文件导入到数据库中.
只有拥有IMP_FULL_DATABASE和DBA权限的用户才能做整个数据库导入
imp步骤:
(1createtable(2insertdata(3createindex(4createtriggers,constraints
2.导入工具imp交互式命令行方式的例子
$imp
Import:
Release8.1.6.0.0-Productionon星期五12月717:
01:
082001
(cCopyright1999OracleCorporation.Allrightsreserved.
用户名:
test
口令:
****
连接到:
Oracle8iEnterpriseEditionRelease8.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle exp及imp导出导入工具的使用全 exp imp 导出 导入 工具 使用
![提示](https://static.bdocx.com/images/bang_tan.gif)