- 浏览: 185359 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
springdata_spring:
java程序语言学习教程 地址http://www.zuida ...
JAVA开发者最常去的20个英文网站 -
love-_-java:
那么请问怎么单独导出jar包?我刚单独到处时:Unhandle ...
解决Eclipse中Java工程间循环引用而报错的问题 -
Hello_June:
...
使用Spring2.5的Autowired实现注释型的IOC -
两两ACE:
棒棒哒
使用Spring2.5的Autowired实现注释型的IOC -
liubang201010:
Foglight 监控OC4j 旧系统9.0.3/9.0.4等 ...
OC4J
Oracle Export/Import工具使用介绍
Oracle Exp/Imp工具是一个操作简单、方便灵活的备份恢复和数据迁移工具,它可以实施全库级、用户级、表级的数据备份和恢复。对于数据量在G级或G级以内,强调高可用性,可以容忍少量数据丢失的数据库系统,Exp/Imp是普遍使用的逻辑备份方式。
Export从数据库中导出数据到dump文件中
Import从dump文件中到入数据导数据库中
1. 使用到Exp/Imp工具的的场景:
1) 两个数据库之间传送数据
同一个版本的oracle Server之间
不同版本的oracle Server之间
同种OS之间
不同种OS之间
2) 用于数据库的备份和恢复
3) 从一个SCHEMA传送到另一个SCHEMA
4) 从一个TABLESPACE传送到另一个TABLESPACE
2. DUMP文件介绍
EXPORT到出的是二进制格式的文件,不可以手工编辑,否则会损坏数据。该文件在ORACLE支持的任何平台上都是一样的格式,可以在各平台上通用。
DUMP文件在IMPORT时采用向上兼容方式,就是说ORALCE8的DUMP文件可以导入到ORACLE9中,但是版本相差很大的版本之间可能有问题。
3. Oracle9i EXP功能描述
Oracle9i EXP在原有的基础上新增了部分新的参数,按功能主要分为以下几个部分:
1) OBJECT_CONSISTENT - 用于设置EXP对象为只读以保持对象的一致性。默认是N。
2) FLASHBACK_SCN和FLASHBACK_TIME - 用于支持FLASHBACK功能而新增。
3) RESUMABLE、RESUMABLE_NAME和RESUMABLE_TIMEOUT - 用于支持RESUMABLE空间分配而新增。
4) TTS_FULL_CHECK - 用于在传输表空间时使用依赖性检查。
5) TEMPLATE - 用于支持iAS。
6) TABLESPACES - 设置表空间导出模式。个人觉得对于一般用户而言,这个才是新增参数中最实用的一个,可以让用户在原来的FULL、OWNER、TABLES的基础上多了一种选择,使得EXP更加灵活。
4. EXPORT/IMPORT过程 (DUMP文件包含的数据对象)
EXPORT导出的DUMP文件包含两种基本类型的数据 :
DDL (Data Dictionary Language)
Data
DUMP文件包含所有重新创建Data Dictionary的DDL语句,基本上是可以读的格式 ;但是应该注意的是,千万不要用文本编辑器编辑之,oracle说不支持这样做的。
下面列出的是DUMP文件中包括的ORACLE对象,分为TABLE/USER/FULL方式,有些对象只是在FULL方式下才有(比如public synonyms, users, roles, rollback segments等)
Table mode User Mode Full Database Mode
---------------------- ---------------------- ----------------------
Table definitions Table definitions Table definitions
Table data Table data Table data
Owner's table grants Owner's grants Grants
Owner's table indexes Owner's indexes Indexes
Table constraints Table constraints Table constraints
Table triggers Table triggers All triggers
Clusters Clusters
Database links Database links
Job queues Job queues
Refresh groups Refresh groups
Sequences Sequences
Snapshots Snapshots
Snapshot logs Snapshot logs
Stored procedures Stored procedures
Private synonyms All synonyms
Views Views
Profiles
Replication catalog
Resource cost
Roles
Rollback segments
System audit options
System privileges
Tablespace definitions
Tablespace quotas
User definitions
5. IMPORT时的对象倒入顺序
1.Tablespaces
2.Profiles
3.Users
4.Roles
5.SystemPrivilegeGrants
6.RoleGrants
7.DefaultRoles
8.TablespaceQuotas
9.ResourceCosts
10.RollbackSegments
11.DatabaseLinks
12.Sequences
13.Snapshots
14.SnapshotLogs
15.JobQueues
16.RefreshGroups
17.ClusterDefinitions
18.Tables(alsogrants,comments,indexes,constraints,auditing)
19.ReferentialIntegrity
20.POSTTABLESactions
21.Synonyms
22.Views
23.StoredProcedures
24.Triggers,DefaultsandAuditing
按这个顺序主要是解决对象之间依赖关系可能产生的问题。TRIGGER最后导入,所以在INSERT数据到数据库时不会激发TRIGGER。在导入后可能会有一些状态是NVALID的PROCEDURE,主要是IMPORT时会影响一些数据库对象,而IMPORT并不重新编译PROCEDURE,从而造成这种情况,可以重新编译之,就能解决这个问题。
6. 兼容性问题
IMPORT工具可以处理EXPORT 5.1.22之后的版本导出的DUMP文件,所以你用ORACLE7的IMPORT处理ORACLE6的DUMP文件,依次类推,但是ORACLE如果版本相差很大有可能不能处理。具体的问题可以参照相应的文档,比如有关参数设置等(COMPATIBLE参数)
EXPORT需要的VIEW
EXPORT需要的VIEW是由CATEXP.SQL创建,这些内部VIEW用于EXPORT组织DUMP文件中数据格式。大部分VIEW用于收集创建DDL语句的,其他的主要供ORACLE开发人员用。这些VIEW在不同ORACLE版本之间有可能不同,每个版本可能都有新的特性加入。所以在新的版本里面执行旧的dump文件会有错误,一般可以执行CATEXP.SQL解决这些问题,
解决向后兼容问题的一般步骤如下:
1) 导出数据库的版本比目标数据库老的情况:
在需要导入的目标数据库中执行旧的CATEXP.SQL
使用旧的EXPORT导出DUMP文件
使用旧的IMPORT导入到数据库中
在数据库中执行新的CATEXP.SQL,以恢复该版本的EXPORT VIEW
2) 导出数据库的版本比目标数据库新的情况
在需要导入的目标数据库中执行新的CATEXP.SQL
使用新的EXPORT导出DUMP文件
使用新的IMPORT导入到数据库中
在数据库中执行旧的CATEXP.SQL,以恢复该版本的EXPORT VIEW
7. 碎片整理
EXPORT/IMPORT一个很重要的应用方面就是整理碎片。因为如果时初次IMPPORT,就会重新CREATE TABLE 再导入数据,所以整张表都是连续存放的。
另外缺省情况下EXPORT会在生成DUMP文件是“压缩(COMPRESS)”TABLE,但是这种压缩在很多情况下被误解。事实上,COMPRESS是改变STORAGE参数INITIAL的值。比如:CREATE TABLE .... STORAGE( INITIAL 10K NEXT 10K..) 现在数据已经扩展到100个EXTENT,如果采用COMPRESS=Y来EXPORT数据,则产生的语句时 STORAGE( INITIAL 1000K NEXT 10K) ;我们可以看到NEXT值并没有改变,而INITIAL是所有EXTENT的总和。所以会出现如下情况,表A有4个100M的EXTENT,执行DELETE FROM A,然后再用COMPRESS=Y 导出数据,产生的CREATE TABLE语句将有400M的INITIAL EXTENT。即使这是TABLE中已经没有数据!!这是的DUMP文件即使很小,但是在IMPORT时就会产生一个巨大的TABLE. 另外,也可能会超过DATAFILE的大小。比如,有4个50M的数据文件,其中表A有15个10M的EXTENT,如果采用COMPRESS=Y的方式导出数据,将会有INITIAL=150M那么在重新导入时,不能分配一个150M的EXTENT,因为单个EXTENT不能跨多个文件。
8. 在USER和TABLESPACE之间传送数据
一般情况下EXPORT的数据要恢复到它原来的地方去。如果SCOTT用户的表以TABLE或USER方式EXPORT数据,在IMPORT时,如果SCOTT用户不存在,则会报错! 以FULL方式导出的数据带有CREATE USER的信息,所以会自己创建USER来存放数据。当然可以在IMPORT时使用FROMUSER和TOUSER参数来确定要导入的USER,但是要保证TOUSER一定已经存在啦。
在imp添加参数TABLESPACES 可以改变导入数据的表空间;
这有2种情况:一种是在数据导入前建好表,把表建到其他表空间上,再导入数据;另一种情况是收回导入用户的unlimited tablespace的权限会导入用户的默认表空间;
9. EXPORT/IMPORT对SQUENCE的影响
在两种情况下,EXPORT/IMPORT会对SEQUENCE。
1) 如果在EXPORT时,用户正在取SEQUENCE的值,可能造成SEQUENCE的不一致。
2) 另外如果SEQUENCE使用CACHE,在EXPORT时,那些在CACHE中的值就会被忽略的,只是从数据字典里面取当前值EXPORT。
如果在进行FULL方式的EXPORT/IMPORT时,恰好在用sequence更新表中某列数据,而且不是上面两种情况,则导出的是更新前的数据。
如果采用常规路径方式,每一行数据都是用INSERT语句,一致性检查和INSERT TRIGGER
如果采用DIRECT方式,某些约束和trigger可能不触发,如果在trigger中使用sequence.nextval,将会对sequence有影响。
10. EXP常用选项
1) FULL,这个用于导出整个数据库,在ROWS=N一起使用时,可以导出整个数据库的结构。例如:
exp sys file=test.dmp log=test.log full=y rows=n compress=y direct=y
2) BUFFER和FEEDBACK,在导出比较多的数据时,考虑设置这两个参数。例如:
exp new file=test.dmp log=test.log feedback=10000 buffer=100000000 tables=test1,test2
3) FILL和LOG,这两个参数分别指定备份的DMP名称和LOG名称,包括文件名和目录;需要说明的是,EXP可以直接备份到磁带中,即使用FILE=/dev/rmt0(磁带设备名),但是一般我们都不这么做,原因有二:一、这样做的速度会慢很多,二、现在一般都是使用磁带库的,不建议直接对磁带进行操作。至于没有使用磁带库的朋友可以考虑和UNIX的TAR结合使用。如果你真想使用EXP直接到磁带,你可以参考Metalink文章“EXPORTING TO TAPE ON UNIX SYSTEMS”(文档号:30428.1),该文中有详细解释。
4) COMPRESS参数将在导出的同时合并碎块,尽量把数据压缩到initial的EXTENT里,默认是N,一般建议使用。DIRECT参数将告诉EXP直接读取数据,而不像传统的EXP那样,使用SELECT来读取表中的数据,这样就减少了SQL语句处理过程。一般也建议使用。不过有些情况下DIRECT参数是无法使用的。
5) 如何使用SYSDBA执行EXP/IMP
这是一个很现实的问题,有时候我们需要使用SYSDBA来执行EXP/IMP,如进行传输表空间的EXP/IMP,以及在9i下用SYS用户来执行EXP/IMP时,都需要使用SYSDBA才可。我们可以使用下面方式连入EXP/IMP:
exp "'sys/sys as sysdba'" file=1.dmp tables=trst rows=n
6) QUERY参数后面跟的是where条件,值得注意的是,整个where子句需要使用""括起来,where子句的写法和SELECT中相同;
如果是UNIX平台所有"和'都需要使用\u26469屏蔽它们的特殊含义:
exp test/test file=1.dmp log=1.log tables=testtable query="where c1=20 and c2=test"
注意:>,<,单引号等特殊字符需要转译
exp test/test file=1.dmp log=1.log tables=testtable query="where c1\>20 and c2=to_date\(\'20090506\',\'yyyymmdd\'\)"
如果是windows平台,则使用下面的格式:
exp c/c@ncn file=c.dmp log=c.log tables=t query="""where id=1 and name='gototop'"""(使用unix下格式也是可以的,具体情况测试一下即可)
exp导出时,加where条件:
exp scott/tiger TABLES=(emp,bonus) QUERY="WHERE job='SALESMAN' and sal<1600"
限制:
1.The parameter QUERY cannot be specified for full, user, or tablespace mode exports.
参数query不能使用在完全导出,用户导出和表空间导出方式
2.The parameter QUERY must be applicable to all specified tables.
参数query指定的内容必须对所有指定的表都有效
3.The parameter QUERY cannot be specified in a direct path export (DIRECT=y)
参数query不能与direct路径导出同时使用
4.The parameter QUERY cannot be specified for tables with inner nested tables.
参数query不能导出内嵌表
5.You cannot determine from the contents of the export file whether the data is the result of a QUERY export.
用query参数导出的数据与同其他方式导出的数据是一样的,无法根据导出文件进行分辨
11. IMP常用选项
1) FROMUSER和TOUSER,使用它们实现将数据从一个SCHEMA中导入到另外一个SCHEMA中;
2) IGNORE、GRANTS和INDEXES,其中IGNORE参数将忽略表的存在,继续导入,这个对于需要调整表的存储参数时很有用,我们可以先根据实际情况用合理的存储参数建好表,然后直接导入数据。而GRANTS和INDEXES则表示是否导入授权和索引,如果想使用新的存储参数重建索引,或者为了加快到入速度,我们可以考虑将INDEXES设为N,而GRANTS一般都是Y。
3) 另外一个EXP/IMP都有的参数是PARFILE,它是用来定义EXP/IMP的参数文件,也就是说,上面的参数都可以写在一个参数文件中,但我们一般很少使用。
12. 在进行并行EXP/IMP的时候,如果IMP过程建索引的话不建议同时运行5个以上的IMP,如果你想加快速度,可以在IMP的时候不建索引,这样只要内存允许,可以多跑几个,然后是SQL脚本创建需要的索引。
13. 整理出来的实例供大家参考
Export/Import有三个级别: 表级, 用户级和全数据库级.
1) table model(按表处理的模式)
backup one user's table(备份一个用户下的表)
exp test/test rows=y indexes=n compress=n buffer=65536 feedback=100000 volsize=0 file=exp_table_yyyymmdd.dmp log=exp_table_yyyymmdd.log tables=test_table1,test_table2
recover all table(导入全部备份的表)
imp test2/test2 fromuser=test touser=test2 rows=y indexes=n commit=y buffer=65536 feedback=100000 ignore=y volsize=0 file=exp_table_yyyymmdd.dmp log=imp_table_yyyymmdd.log
recover some table of all table(导入备份的部分表)
imp test2/test2 fromuser=test touser=test2 rows=y indexes=n commit=y buffer=65536 feedback=100000 ignore=y volsize=0 file=exp_table_yyyymmdd.dmp log=imp_table_yyyymmdd.log tables=test_table1
2) user model(用户模式)
backup all someone's object(备份一个用户的所有的数据对象)
exp test/test rows=y indexes=n compress=n buffer=65536 feedback=100000 volsize=0 owner=test file=exp_user_yyyymmdd.dmp log=exp_user_yyyymmdd.log
recover all someone's object
imp test2/test2 fromuser=test touser=test2 rows=y indexes=n commit=y buffer=65536 feedback=100000 ignore=y volsize=0 file=exp_user_yyyymmdd.dmp log=imp_user_yyyymmdd.log
recover some table of all someone's object
imp test2/test2 fromuser=test touser=test2 rows=y indexes=n commit=y buffer=65536 feedback=100000 ignore=y volsize=0 file=exp_user_yyyymmdd.dmp log=imp_user_yyyymmdd.log tables=test_table1,test_table2,test_table3
3) full model
backup the full db for all
exp system/manager rows=y indexes=n compress=n buffer=65536 feedback=100000 volsize=0 full=y inctype=complete file=exp_fulldb_yyyymmdd.dmp log=exp_fulldb_yyyymmdd.log
backup the full db for increment
exp system/manager rows=y indexes=n compress=n buffer=65536 feedback=100000 volsize=0 full=y inctype=incremental file=exp_fulldb_zl_yyyymmdd.dmp log=exp_fulldb_zl_yyyymmdd.log
注意:inctype是8i的9i已经不用了
recover all date for full backup
imp system/manager rows=y indexes=n commit=y buffer=65536 feedback=100000 ignore=y volsize=0 full=y file=exp_fulldb_yyyymmdd.dmp log=imp_fulldb_yyyymmdd.log
recover all date for increment backup
imp system/manager rows=y indexes=n commit=y buffer=65536 feedback=100000 ignore=y vol
size=0 full=y inctype=restore file=exp_fulldb_zl_yyyymmdd.dmp log=imp_fulldb_zl_yyyymmdd.log
UID94628 帖子806 精华1 积分818 流通积分818 点 金钱0 O元 阅读权限80 在线时间6 小时 注册时间2005-4-28 最后登录2010-3-27 查看详细资料
TOP
Oracle ExpImp导入导出工具性能调优
Oracle Exp/Imp工具是一个操作简单、方便灵活的备份恢复和数据迁移工具,它可以实施全库级、用户级、表级的数据备份和恢复。对于数据量在G级或G级以内,强调高可用性,可以容忍少量数据丢失的数据库系统,Exp/Imp是普遍使用的逻辑备份方式。目前现网很多生产系统均使用Exp/Imp进行备份恢复。数据量达到G级以后,备份恢复的时间明显拉长了,有没有方法能够有效提高Exp/Imp的速度呢?答案是肯定的,某些方法还可以成倍的提高速度,本文就从Exp、Imp两个工具分别探讨优化备份恢复性能的方法。
1 Exp调优
1.1 使用DIRECT和RECORDLENGTH选项
DIRECT参数定义了导出是使用直接路径方式(DIRECT=Y),还是常规路径方式(DIRECT=N)。常规路径导出使用SQL SELECT语句从表中抽取数据,直接路径导出则是将数据直接从磁盘读到PGA再原样写入导出文件,从而避免了SQL命令处理层的数据转换过程,大大提高了导出效率。在数据量大的情况下,直接路径导出的效率优势更为明显,可比常规方法速度提高三倍之多。
和DIRECT=Y配合使用的是RECORDLENGTH参数,它定义了Export I/O缓冲的大小,作用类似于常规路径导出使用的BUFFER参数。建议设置RECORDLENGTH参数为最大I/O缓冲,即65535(64kb)。其用法如下:
exp userid=system/manager full=y direct=y recordlength=65535 file=exp_full.dmp log=exp_full.log
直接路径导出根据Oracle版本不同,有一些使用限制。比较重要的限制有,8i及以下版本不支持导出客户端和数据库的字符集转换,因此导出前必须保证NLS_LANG设置正确;8.1.5及以下版本不支持导出含LOBs对象的表;不能使用QUERY参数等。
1.2 使用管道技术
管道是从一个程序进程向另一个程序进程单向传送信息的技术。通常,管道把一个进程的输出传给另一进程作为输入。如果导出的数据量很大,可以利用管道直接生成最终的压缩文件,所耗费的时间和不压缩直接导出的时间相当。这样一来,不仅能够解决磁盘空间不足的问题,而且省去了单独压缩文件的时间;如果需要传输导出文件,还可以减少网络传输的时间。比如,一个10G的文件单独压缩可能需要半小时以上的时间。虽然管道技术不能够直接缩短Exp/Imp本身的时间,但节省出来的压缩时间非常可观。管道和Exp结合的具体使用方法如下:
导出数据示例:
% mknod /tmp/exp_pipe p # Make the pipe
% compress < /tmp/exp_pipe > export.dmp.Z & # Background compress
% exp file=/tmp/exp_pipe # Export to the pipe
2 Imp调优
Oracle Import进程需要花比Export进程数倍的时间将数据导入数据库。某些关键时刻,导入是为了应对数据库的紧急故障恢复。为了减少宕机时间,加快导入速度显得至关重要。没有特效办法加速一个大数据量的导入,但我们可以做一些适当的设定以减少整个导入时间。
2.1 使用管道技术
前面已经说明了Exp时如何使用管道,在导入时管道的作用是相同,不仅能够解决磁盘空间不足的问题,而且省去了单独解压缩文件的时间。在大数据量导入导出的时候,推荐一定要使用管道。
导入数据示例:
2.2 避免I/O竞争
Import是一个I/O密集的操作,避免I/O竞争可以加快导入速度。如果可能,不要在系统高峰的时间导入数据,不要在导入数据时运行job等可能竞争系统资源的操作。
2.3 增加排序区
Oracle Import进程先导入数据再创建索引,不论INDEXES值设为YES或者NO,主键的索引是一定会创建的。创建索引的时候需要用到排序区,在内存大小不足的时候,使用临时表空间进行磁盘排序,由于磁盘排序效率和内存排序效率相差好几个数量级。增加排序区可以大大提高创建索引的效率,从而加快导入速度。
8i及其以下版本:导入数据前增加数据库的sort_area_size大小,可设为正常值的5-10倍。但这个值设定会影响到所有会话,设的过高有可能导致内存不足出现paging, swapping现象。更为稳妥的方法是,对于大表和索引特别多的表,只导数据不导索引。导完数据后,创建一个会话,设定当前会话的sort_area_size一个足够大的值,再手工创建索引。
9i:在workarea_size_policy=AUTO的情况下,所有会话的UGA共用pga_aggregate_target定义的内存,不必单独设定sort_area_size。导入数据前增加pga_aggregate_target大小,如果机器内存够大,可从通常设定的500M提高到1-2G。pga_aggregate_target大小可以动态调整,导入完成后可在线调回原值。
2.4 调整BUFFER选项
Imp参数BUFFER定义了每一次读取导出文件的数据量,设的越大,就越减少Import进程读取数据的次数,从而提高导入效率。BUFFER的大小取决于系统应用、数据库规模,通常来说,设为百兆就足够了。其用法如下:
imp user2/pwd fromuser=user1 touser=user2 file=/tmp/imp_db_pipe1 commit=y feedback=10000 buffer=10240000
2.5 使用COMMIT=Y选项
COMMIT=Y表示每个数据缓冲满了之后提交一次,而不是导完一张表提交一次。这样会大大减少对系统回滚段等资源的消耗,对顺利完成导入是有益的。
2.6 使用INDEXES=N选项
前面谈到增加排序区时,说明Imp进程会先导入数据再创建索引。导入过程中建立用户定义的索引,特别是表上有多个索引或者数据表特别庞大时,需要耗费大量时间。某些情况下,需要以最快的时间导入数据,而索引允许后建,我们就可以使用INDEXES=N 只导入数据不创建索引,从而加快导入速度。
我们可以用INDEXFILE选项生成创建索引的DLL脚本,再手工创建索引。我们也可以用如下的方法导入两次,第一次导入数据,第二次导入索引。其用法如下:
imp user2/pwd fromuser=user1 touser=user2 file=/tmp/imp_db_pipe1 commit=y feedback=10000 buffer=10240000 ignore=y rows=y indexes=n
imp user2/pwd fromuser=user1 touser=user2 file=/tmp/imp_index_pipe1 commit=y feedback=10000 buffer=10240000 ignore=y rows=n indexes=y
2.7 增加LARGE_POOL_SIZE
如果在init.ora中配置了MTS_SERVICE,MTS_DISPATCHERS等参数,tnsnames.ora中又没有(SERVER=DEDICATED)的配置,那么数据库就使用了共享服务器模式。在MTS模式下,Exp/Imp操作会用到LARGE_POOL,建议调整LARGE_POOL_SIZE到150M。
检查数据库是否在MTS模式下:
SQL>select distinct server from v$session;
如果返回值出现none或shared,说明启用了MTS。
附录:EXP/IMP命令选项注释
>exp help=y
通过输入 EXP 命令和用户名/口令,您可以
后接用户名/口令的命令:
例程: EXP SCOTT/TIGER
或者,您也可以通过输入跟有各种参数的 EXP 命令来控制“导出”
按照不同参数。要指定参数,您可以使用关键字:
格式: EXP KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)
例程: EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR)
或 TABLES=(T1: P1,T1: P2),如果 T1 是分区表
USERID 必须是命令行中的第一个参数。
关键字 说明(默认) 关键字 说明(默认)
--------------------------------------------------------------------------
USERID 用户名/口令 FULL 导出整个文件 (N)
BUFFER 数据缓冲区大小 OWNER 所有者用户名列表
FILE 输出文件 (EXPDAT.DMP) TABLES 表名称列表
COMPRESS 导入到一个区 (Y) RECORDLENGTH IO 记录的长度
GRANTS 导出权限 (Y) INCTYPE 增量导出类型
INDEXES 导出索引 (Y) RECORD 跟踪增量导出 (Y)
DIRECT 直接路径 (N) TRIGGERS 导出触发器 (Y)
LOG 屏幕输出的日志文件 STATISTICS 分析对象 (ESTIMATE)
ROWS 导出数据行 (Y) PARFILE 参数文件名
CONSISTENT 交叉表的一致性 (N) CONSTRAINTS 导出的约束条件 (Y)
OBJECT_CONSISTENT 只在对象导出期间设置为读的事务处理 (N)
FEEDBACK 每 x 行的显示进度 (0)
FILESIZE 每个转储文件的最大大小
FLASHBACK_SCN 用于将会话快照设置回以前状态的 SCN
FLASHBACK_TIME 用于获取最接近指定时间的 SCN 的时间
QUERY 用于导出表的子集的 select 子句
RESUMABLE 遇到与空格相关的错误时挂起 (N)
RESUMABLE_NAME 用于标识可恢复语句的文本字符串
RESUMABLE_TIMEOUT RESUMABLE 的等待时间
TTS_FULL_CHECK 对 TTS 执行完整的或部分相关性检查
TABLESPACES 要导出的表空间列表
TRANSPORT_TABLESPACE 导出可传输的表空间元数据 (N)
TEMPLATE 调用 iAS 模式导出的模板名
>imp help=y
可以通过输入 IMP 命令和您的用户名/口令
后接用户名/口令的命令:
例程: IMP SCOTT/TIGER
或者, 可以通过输入 IMP 命令和各种参数来控制“导入”
按照不同参数。要指定参数,您可以使用关键字:
格式: IMP KEYWORD=value 或 KEYWORD=(value1,value2,...,vlaueN)
例程: IMP SCOTT/TIGER IGNORE=Y TABLES=(EMP,DEPT) FULL=N
或 TABLES=(T1: P1,T1: P2),如果 T1 是分区表
USERID 必须是命令行中的第一个参数。
关键字 说明(默认) 关键字 说明(默认)
------------------------------------------------------------------------
USERID 用户名/口令 FULL 导入整个文件 (N)
BUFFER 数据缓冲区大小 FROMUSER 所有人用户名列表
FILE 输入文件 (EXPDAT.DMP) TOUSER 用户名列表
SHOW 只列出文件内容 (N) TABLES 表名列表
IGNORE 忽略创建错误 (N) RECORDLENGTH IO 记录的长度
GRANTS 导入权限 (Y) INCTYPE 增量导入类型
INDEXES 导入索引 (Y) COMMIT 提交数组插入 (N)
ROWS 导入数据行 (Y) PARFILE 参数文件名
LOG 屏幕输出的日志文件 CONSTRAINTS 导入限制 (Y)
DESTROY 覆盖表空间数据文件 (N)
INDEXFILE 将表/索引信息写入指定的文件
SKIP_UNUSABLE_INDEXES 跳过不可用索引的维护 (N)
FEEDBACK 每 x 行显示进度 (0)
TOID_NOVALIDATE 跳过指定类型 ID 的验证
FILESIZE 每个转储文件的最大大小
STATISTICS 始终导入预计算的统计信息
RESUMABLE 在遇到有关空间的错误时挂起 (N)
RESUMABLE_NAME 用来标识可恢复语句的文本字符串
RESUMABLE_TIMEOUT RESUMABLE 的等待时间
COMPILE 编译过程, 程序包和函数 (Y)
STREAMS_CONFIGURATION 导入 Streams 的一般元数据 (Y)
STREAMS_INSTANITATION 导入 Streams 的实例化元数据 (N)
下列关键字仅用于可传输的表空间
TRANSPORT_TABLESPACE 导入可传输的表空间元数据 (N)
TABLESPACES 将要传输到数据库的表空间
DATAFILES 将要传输到数据库的数据文件
TTS_OWNERS 拥有可传输表空间集中数据的用户
Oracle Exp/Imp工具是一个操作简单、方便灵活的备份恢复和数据迁移工具,它可以实施全库级、用户级、表级的数据备份和恢复。对于数据量在G级或G级以内,强调高可用性,可以容忍少量数据丢失的数据库系统,Exp/Imp是普遍使用的逻辑备份方式。
Export从数据库中导出数据到dump文件中
Import从dump文件中到入数据导数据库中
1. 使用到Exp/Imp工具的的场景:
1) 两个数据库之间传送数据
同一个版本的oracle Server之间
不同版本的oracle Server之间
同种OS之间
不同种OS之间
2) 用于数据库的备份和恢复
3) 从一个SCHEMA传送到另一个SCHEMA
4) 从一个TABLESPACE传送到另一个TABLESPACE
2. DUMP文件介绍
EXPORT到出的是二进制格式的文件,不可以手工编辑,否则会损坏数据。该文件在ORACLE支持的任何平台上都是一样的格式,可以在各平台上通用。
DUMP文件在IMPORT时采用向上兼容方式,就是说ORALCE8的DUMP文件可以导入到ORACLE9中,但是版本相差很大的版本之间可能有问题。
3. Oracle9i EXP功能描述
Oracle9i EXP在原有的基础上新增了部分新的参数,按功能主要分为以下几个部分:
1) OBJECT_CONSISTENT - 用于设置EXP对象为只读以保持对象的一致性。默认是N。
2) FLASHBACK_SCN和FLASHBACK_TIME - 用于支持FLASHBACK功能而新增。
3) RESUMABLE、RESUMABLE_NAME和RESUMABLE_TIMEOUT - 用于支持RESUMABLE空间分配而新增。
4) TTS_FULL_CHECK - 用于在传输表空间时使用依赖性检查。
5) TEMPLATE - 用于支持iAS。
6) TABLESPACES - 设置表空间导出模式。个人觉得对于一般用户而言,这个才是新增参数中最实用的一个,可以让用户在原来的FULL、OWNER、TABLES的基础上多了一种选择,使得EXP更加灵活。
4. EXPORT/IMPORT过程 (DUMP文件包含的数据对象)
EXPORT导出的DUMP文件包含两种基本类型的数据 :
DDL (Data Dictionary Language)
Data
DUMP文件包含所有重新创建Data Dictionary的DDL语句,基本上是可以读的格式 ;但是应该注意的是,千万不要用文本编辑器编辑之,oracle说不支持这样做的。
下面列出的是DUMP文件中包括的ORACLE对象,分为TABLE/USER/FULL方式,有些对象只是在FULL方式下才有(比如public synonyms, users, roles, rollback segments等)
Table mode User Mode Full Database Mode
---------------------- ---------------------- ----------------------
Table definitions Table definitions Table definitions
Table data Table data Table data
Owner's table grants Owner's grants Grants
Owner's table indexes Owner's indexes Indexes
Table constraints Table constraints Table constraints
Table triggers Table triggers All triggers
Clusters Clusters
Database links Database links
Job queues Job queues
Refresh groups Refresh groups
Sequences Sequences
Snapshots Snapshots
Snapshot logs Snapshot logs
Stored procedures Stored procedures
Private synonyms All synonyms
Views Views
Profiles
Replication catalog
Resource cost
Roles
Rollback segments
System audit options
System privileges
Tablespace definitions
Tablespace quotas
User definitions
5. IMPORT时的对象倒入顺序
1.Tablespaces
2.Profiles
3.Users
4.Roles
5.SystemPrivilegeGrants
6.RoleGrants
7.DefaultRoles
8.TablespaceQuotas
9.ResourceCosts
10.RollbackSegments
11.DatabaseLinks
12.Sequences
13.Snapshots
14.SnapshotLogs
15.JobQueues
16.RefreshGroups
17.ClusterDefinitions
18.Tables(alsogrants,comments,indexes,constraints,auditing)
19.ReferentialIntegrity
20.POSTTABLESactions
21.Synonyms
22.Views
23.StoredProcedures
24.Triggers,DefaultsandAuditing
按这个顺序主要是解决对象之间依赖关系可能产生的问题。TRIGGER最后导入,所以在INSERT数据到数据库时不会激发TRIGGER。在导入后可能会有一些状态是NVALID的PROCEDURE,主要是IMPORT时会影响一些数据库对象,而IMPORT并不重新编译PROCEDURE,从而造成这种情况,可以重新编译之,就能解决这个问题。
6. 兼容性问题
IMPORT工具可以处理EXPORT 5.1.22之后的版本导出的DUMP文件,所以你用ORACLE7的IMPORT处理ORACLE6的DUMP文件,依次类推,但是ORACLE如果版本相差很大有可能不能处理。具体的问题可以参照相应的文档,比如有关参数设置等(COMPATIBLE参数)
EXPORT需要的VIEW
EXPORT需要的VIEW是由CATEXP.SQL创建,这些内部VIEW用于EXPORT组织DUMP文件中数据格式。大部分VIEW用于收集创建DDL语句的,其他的主要供ORACLE开发人员用。这些VIEW在不同ORACLE版本之间有可能不同,每个版本可能都有新的特性加入。所以在新的版本里面执行旧的dump文件会有错误,一般可以执行CATEXP.SQL解决这些问题,
解决向后兼容问题的一般步骤如下:
1) 导出数据库的版本比目标数据库老的情况:
在需要导入的目标数据库中执行旧的CATEXP.SQL
使用旧的EXPORT导出DUMP文件
使用旧的IMPORT导入到数据库中
在数据库中执行新的CATEXP.SQL,以恢复该版本的EXPORT VIEW
2) 导出数据库的版本比目标数据库新的情况
在需要导入的目标数据库中执行新的CATEXP.SQL
使用新的EXPORT导出DUMP文件
使用新的IMPORT导入到数据库中
在数据库中执行旧的CATEXP.SQL,以恢复该版本的EXPORT VIEW
7. 碎片整理
EXPORT/IMPORT一个很重要的应用方面就是整理碎片。因为如果时初次IMPPORT,就会重新CREATE TABLE 再导入数据,所以整张表都是连续存放的。
另外缺省情况下EXPORT会在生成DUMP文件是“压缩(COMPRESS)”TABLE,但是这种压缩在很多情况下被误解。事实上,COMPRESS是改变STORAGE参数INITIAL的值。比如:CREATE TABLE .... STORAGE( INITIAL 10K NEXT 10K..) 现在数据已经扩展到100个EXTENT,如果采用COMPRESS=Y来EXPORT数据,则产生的语句时 STORAGE( INITIAL 1000K NEXT 10K) ;我们可以看到NEXT值并没有改变,而INITIAL是所有EXTENT的总和。所以会出现如下情况,表A有4个100M的EXTENT,执行DELETE FROM A,然后再用COMPRESS=Y 导出数据,产生的CREATE TABLE语句将有400M的INITIAL EXTENT。即使这是TABLE中已经没有数据!!这是的DUMP文件即使很小,但是在IMPORT时就会产生一个巨大的TABLE. 另外,也可能会超过DATAFILE的大小。比如,有4个50M的数据文件,其中表A有15个10M的EXTENT,如果采用COMPRESS=Y的方式导出数据,将会有INITIAL=150M那么在重新导入时,不能分配一个150M的EXTENT,因为单个EXTENT不能跨多个文件。
8. 在USER和TABLESPACE之间传送数据
一般情况下EXPORT的数据要恢复到它原来的地方去。如果SCOTT用户的表以TABLE或USER方式EXPORT数据,在IMPORT时,如果SCOTT用户不存在,则会报错! 以FULL方式导出的数据带有CREATE USER的信息,所以会自己创建USER来存放数据。当然可以在IMPORT时使用FROMUSER和TOUSER参数来确定要导入的USER,但是要保证TOUSER一定已经存在啦。
在imp添加参数TABLESPACES 可以改变导入数据的表空间;
这有2种情况:一种是在数据导入前建好表,把表建到其他表空间上,再导入数据;另一种情况是收回导入用户的unlimited tablespace的权限会导入用户的默认表空间;
9. EXPORT/IMPORT对SQUENCE的影响
在两种情况下,EXPORT/IMPORT会对SEQUENCE。
1) 如果在EXPORT时,用户正在取SEQUENCE的值,可能造成SEQUENCE的不一致。
2) 另外如果SEQUENCE使用CACHE,在EXPORT时,那些在CACHE中的值就会被忽略的,只是从数据字典里面取当前值EXPORT。
如果在进行FULL方式的EXPORT/IMPORT时,恰好在用sequence更新表中某列数据,而且不是上面两种情况,则导出的是更新前的数据。
如果采用常规路径方式,每一行数据都是用INSERT语句,一致性检查和INSERT TRIGGER
如果采用DIRECT方式,某些约束和trigger可能不触发,如果在trigger中使用sequence.nextval,将会对sequence有影响。
10. EXP常用选项
1) FULL,这个用于导出整个数据库,在ROWS=N一起使用时,可以导出整个数据库的结构。例如:
exp sys file=test.dmp log=test.log full=y rows=n compress=y direct=y
2) BUFFER和FEEDBACK,在导出比较多的数据时,考虑设置这两个参数。例如:
exp new file=test.dmp log=test.log feedback=10000 buffer=100000000 tables=test1,test2
3) FILL和LOG,这两个参数分别指定备份的DMP名称和LOG名称,包括文件名和目录;需要说明的是,EXP可以直接备份到磁带中,即使用FILE=/dev/rmt0(磁带设备名),但是一般我们都不这么做,原因有二:一、这样做的速度会慢很多,二、现在一般都是使用磁带库的,不建议直接对磁带进行操作。至于没有使用磁带库的朋友可以考虑和UNIX的TAR结合使用。如果你真想使用EXP直接到磁带,你可以参考Metalink文章“EXPORTING TO TAPE ON UNIX SYSTEMS”(文档号:30428.1),该文中有详细解释。
4) COMPRESS参数将在导出的同时合并碎块,尽量把数据压缩到initial的EXTENT里,默认是N,一般建议使用。DIRECT参数将告诉EXP直接读取数据,而不像传统的EXP那样,使用SELECT来读取表中的数据,这样就减少了SQL语句处理过程。一般也建议使用。不过有些情况下DIRECT参数是无法使用的。
5) 如何使用SYSDBA执行EXP/IMP
这是一个很现实的问题,有时候我们需要使用SYSDBA来执行EXP/IMP,如进行传输表空间的EXP/IMP,以及在9i下用SYS用户来执行EXP/IMP时,都需要使用SYSDBA才可。我们可以使用下面方式连入EXP/IMP:
exp "'sys/sys as sysdba'" file=1.dmp tables=trst rows=n
6) QUERY参数后面跟的是where条件,值得注意的是,整个where子句需要使用""括起来,where子句的写法和SELECT中相同;
如果是UNIX平台所有"和'都需要使用\u26469屏蔽它们的特殊含义:
exp test/test file=1.dmp log=1.log tables=testtable query="where c1=20 and c2=test"
注意:>,<,单引号等特殊字符需要转译
exp test/test file=1.dmp log=1.log tables=testtable query="where c1\>20 and c2=to_date\(\'20090506\',\'yyyymmdd\'\)"
如果是windows平台,则使用下面的格式:
exp c/c@ncn file=c.dmp log=c.log tables=t query="""where id=1 and name='gototop'"""(使用unix下格式也是可以的,具体情况测试一下即可)
exp导出时,加where条件:
exp scott/tiger TABLES=(emp,bonus) QUERY="WHERE job='SALESMAN' and sal<1600"
限制:
1.The parameter QUERY cannot be specified for full, user, or tablespace mode exports.
参数query不能使用在完全导出,用户导出和表空间导出方式
2.The parameter QUERY must be applicable to all specified tables.
参数query指定的内容必须对所有指定的表都有效
3.The parameter QUERY cannot be specified in a direct path export (DIRECT=y)
参数query不能与direct路径导出同时使用
4.The parameter QUERY cannot be specified for tables with inner nested tables.
参数query不能导出内嵌表
5.You cannot determine from the contents of the export file whether the data is the result of a QUERY export.
用query参数导出的数据与同其他方式导出的数据是一样的,无法根据导出文件进行分辨
11. IMP常用选项
1) FROMUSER和TOUSER,使用它们实现将数据从一个SCHEMA中导入到另外一个SCHEMA中;
2) IGNORE、GRANTS和INDEXES,其中IGNORE参数将忽略表的存在,继续导入,这个对于需要调整表的存储参数时很有用,我们可以先根据实际情况用合理的存储参数建好表,然后直接导入数据。而GRANTS和INDEXES则表示是否导入授权和索引,如果想使用新的存储参数重建索引,或者为了加快到入速度,我们可以考虑将INDEXES设为N,而GRANTS一般都是Y。
3) 另外一个EXP/IMP都有的参数是PARFILE,它是用来定义EXP/IMP的参数文件,也就是说,上面的参数都可以写在一个参数文件中,但我们一般很少使用。
12. 在进行并行EXP/IMP的时候,如果IMP过程建索引的话不建议同时运行5个以上的IMP,如果你想加快速度,可以在IMP的时候不建索引,这样只要内存允许,可以多跑几个,然后是SQL脚本创建需要的索引。
13. 整理出来的实例供大家参考
Export/Import有三个级别: 表级, 用户级和全数据库级.
1) table model(按表处理的模式)
backup one user's table(备份一个用户下的表)
exp test/test rows=y indexes=n compress=n buffer=65536 feedback=100000 volsize=0 file=exp_table_yyyymmdd.dmp log=exp_table_yyyymmdd.log tables=test_table1,test_table2
recover all table(导入全部备份的表)
imp test2/test2 fromuser=test touser=test2 rows=y indexes=n commit=y buffer=65536 feedback=100000 ignore=y volsize=0 file=exp_table_yyyymmdd.dmp log=imp_table_yyyymmdd.log
recover some table of all table(导入备份的部分表)
imp test2/test2 fromuser=test touser=test2 rows=y indexes=n commit=y buffer=65536 feedback=100000 ignore=y volsize=0 file=exp_table_yyyymmdd.dmp log=imp_table_yyyymmdd.log tables=test_table1
2) user model(用户模式)
backup all someone's object(备份一个用户的所有的数据对象)
exp test/test rows=y indexes=n compress=n buffer=65536 feedback=100000 volsize=0 owner=test file=exp_user_yyyymmdd.dmp log=exp_user_yyyymmdd.log
recover all someone's object
imp test2/test2 fromuser=test touser=test2 rows=y indexes=n commit=y buffer=65536 feedback=100000 ignore=y volsize=0 file=exp_user_yyyymmdd.dmp log=imp_user_yyyymmdd.log
recover some table of all someone's object
imp test2/test2 fromuser=test touser=test2 rows=y indexes=n commit=y buffer=65536 feedback=100000 ignore=y volsize=0 file=exp_user_yyyymmdd.dmp log=imp_user_yyyymmdd.log tables=test_table1,test_table2,test_table3
3) full model
backup the full db for all
exp system/manager rows=y indexes=n compress=n buffer=65536 feedback=100000 volsize=0 full=y inctype=complete file=exp_fulldb_yyyymmdd.dmp log=exp_fulldb_yyyymmdd.log
backup the full db for increment
exp system/manager rows=y indexes=n compress=n buffer=65536 feedback=100000 volsize=0 full=y inctype=incremental file=exp_fulldb_zl_yyyymmdd.dmp log=exp_fulldb_zl_yyyymmdd.log
注意:inctype是8i的9i已经不用了
recover all date for full backup
imp system/manager rows=y indexes=n commit=y buffer=65536 feedback=100000 ignore=y volsize=0 full=y file=exp_fulldb_yyyymmdd.dmp log=imp_fulldb_yyyymmdd.log
recover all date for increment backup
imp system/manager rows=y indexes=n commit=y buffer=65536 feedback=100000 ignore=y vol
size=0 full=y inctype=restore file=exp_fulldb_zl_yyyymmdd.dmp log=imp_fulldb_zl_yyyymmdd.log
UID94628 帖子806 精华1 积分818 流通积分818 点 金钱0 O元 阅读权限80 在线时间6 小时 注册时间2005-4-28 最后登录2010-3-27 查看详细资料
TOP
Oracle ExpImp导入导出工具性能调优
Oracle Exp/Imp工具是一个操作简单、方便灵活的备份恢复和数据迁移工具,它可以实施全库级、用户级、表级的数据备份和恢复。对于数据量在G级或G级以内,强调高可用性,可以容忍少量数据丢失的数据库系统,Exp/Imp是普遍使用的逻辑备份方式。目前现网很多生产系统均使用Exp/Imp进行备份恢复。数据量达到G级以后,备份恢复的时间明显拉长了,有没有方法能够有效提高Exp/Imp的速度呢?答案是肯定的,某些方法还可以成倍的提高速度,本文就从Exp、Imp两个工具分别探讨优化备份恢复性能的方法。
1 Exp调优
1.1 使用DIRECT和RECORDLENGTH选项
DIRECT参数定义了导出是使用直接路径方式(DIRECT=Y),还是常规路径方式(DIRECT=N)。常规路径导出使用SQL SELECT语句从表中抽取数据,直接路径导出则是将数据直接从磁盘读到PGA再原样写入导出文件,从而避免了SQL命令处理层的数据转换过程,大大提高了导出效率。在数据量大的情况下,直接路径导出的效率优势更为明显,可比常规方法速度提高三倍之多。
和DIRECT=Y配合使用的是RECORDLENGTH参数,它定义了Export I/O缓冲的大小,作用类似于常规路径导出使用的BUFFER参数。建议设置RECORDLENGTH参数为最大I/O缓冲,即65535(64kb)。其用法如下:
exp userid=system/manager full=y direct=y recordlength=65535 file=exp_full.dmp log=exp_full.log
直接路径导出根据Oracle版本不同,有一些使用限制。比较重要的限制有,8i及以下版本不支持导出客户端和数据库的字符集转换,因此导出前必须保证NLS_LANG设置正确;8.1.5及以下版本不支持导出含LOBs对象的表;不能使用QUERY参数等。
1.2 使用管道技术
管道是从一个程序进程向另一个程序进程单向传送信息的技术。通常,管道把一个进程的输出传给另一进程作为输入。如果导出的数据量很大,可以利用管道直接生成最终的压缩文件,所耗费的时间和不压缩直接导出的时间相当。这样一来,不仅能够解决磁盘空间不足的问题,而且省去了单独压缩文件的时间;如果需要传输导出文件,还可以减少网络传输的时间。比如,一个10G的文件单独压缩可能需要半小时以上的时间。虽然管道技术不能够直接缩短Exp/Imp本身的时间,但节省出来的压缩时间非常可观。管道和Exp结合的具体使用方法如下:
导出数据示例:
% mknod /tmp/exp_pipe p # Make the pipe
% compress < /tmp/exp_pipe > export.dmp.Z & # Background compress
% exp file=/tmp/exp_pipe # Export to the pipe
2 Imp调优
Oracle Import进程需要花比Export进程数倍的时间将数据导入数据库。某些关键时刻,导入是为了应对数据库的紧急故障恢复。为了减少宕机时间,加快导入速度显得至关重要。没有特效办法加速一个大数据量的导入,但我们可以做一些适当的设定以减少整个导入时间。
2.1 使用管道技术
前面已经说明了Exp时如何使用管道,在导入时管道的作用是相同,不仅能够解决磁盘空间不足的问题,而且省去了单独解压缩文件的时间。在大数据量导入导出的时候,推荐一定要使用管道。
导入数据示例:
2.2 避免I/O竞争
Import是一个I/O密集的操作,避免I/O竞争可以加快导入速度。如果可能,不要在系统高峰的时间导入数据,不要在导入数据时运行job等可能竞争系统资源的操作。
2.3 增加排序区
Oracle Import进程先导入数据再创建索引,不论INDEXES值设为YES或者NO,主键的索引是一定会创建的。创建索引的时候需要用到排序区,在内存大小不足的时候,使用临时表空间进行磁盘排序,由于磁盘排序效率和内存排序效率相差好几个数量级。增加排序区可以大大提高创建索引的效率,从而加快导入速度。
8i及其以下版本:导入数据前增加数据库的sort_area_size大小,可设为正常值的5-10倍。但这个值设定会影响到所有会话,设的过高有可能导致内存不足出现paging, swapping现象。更为稳妥的方法是,对于大表和索引特别多的表,只导数据不导索引。导完数据后,创建一个会话,设定当前会话的sort_area_size一个足够大的值,再手工创建索引。
9i:在workarea_size_policy=AUTO的情况下,所有会话的UGA共用pga_aggregate_target定义的内存,不必单独设定sort_area_size。导入数据前增加pga_aggregate_target大小,如果机器内存够大,可从通常设定的500M提高到1-2G。pga_aggregate_target大小可以动态调整,导入完成后可在线调回原值。
2.4 调整BUFFER选项
Imp参数BUFFER定义了每一次读取导出文件的数据量,设的越大,就越减少Import进程读取数据的次数,从而提高导入效率。BUFFER的大小取决于系统应用、数据库规模,通常来说,设为百兆就足够了。其用法如下:
imp user2/pwd fromuser=user1 touser=user2 file=/tmp/imp_db_pipe1 commit=y feedback=10000 buffer=10240000
2.5 使用COMMIT=Y选项
COMMIT=Y表示每个数据缓冲满了之后提交一次,而不是导完一张表提交一次。这样会大大减少对系统回滚段等资源的消耗,对顺利完成导入是有益的。
2.6 使用INDEXES=N选项
前面谈到增加排序区时,说明Imp进程会先导入数据再创建索引。导入过程中建立用户定义的索引,特别是表上有多个索引或者数据表特别庞大时,需要耗费大量时间。某些情况下,需要以最快的时间导入数据,而索引允许后建,我们就可以使用INDEXES=N 只导入数据不创建索引,从而加快导入速度。
我们可以用INDEXFILE选项生成创建索引的DLL脚本,再手工创建索引。我们也可以用如下的方法导入两次,第一次导入数据,第二次导入索引。其用法如下:
imp user2/pwd fromuser=user1 touser=user2 file=/tmp/imp_db_pipe1 commit=y feedback=10000 buffer=10240000 ignore=y rows=y indexes=n
imp user2/pwd fromuser=user1 touser=user2 file=/tmp/imp_index_pipe1 commit=y feedback=10000 buffer=10240000 ignore=y rows=n indexes=y
2.7 增加LARGE_POOL_SIZE
如果在init.ora中配置了MTS_SERVICE,MTS_DISPATCHERS等参数,tnsnames.ora中又没有(SERVER=DEDICATED)的配置,那么数据库就使用了共享服务器模式。在MTS模式下,Exp/Imp操作会用到LARGE_POOL,建议调整LARGE_POOL_SIZE到150M。
检查数据库是否在MTS模式下:
SQL>select distinct server from v$session;
如果返回值出现none或shared,说明启用了MTS。
附录:EXP/IMP命令选项注释
>exp help=y
通过输入 EXP 命令和用户名/口令,您可以
后接用户名/口令的命令:
例程: EXP SCOTT/TIGER
或者,您也可以通过输入跟有各种参数的 EXP 命令来控制“导出”
按照不同参数。要指定参数,您可以使用关键字:
格式: EXP KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)
例程: EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR)
或 TABLES=(T1: P1,T1: P2),如果 T1 是分区表
USERID 必须是命令行中的第一个参数。
关键字 说明(默认) 关键字 说明(默认)
--------------------------------------------------------------------------
USERID 用户名/口令 FULL 导出整个文件 (N)
BUFFER 数据缓冲区大小 OWNER 所有者用户名列表
FILE 输出文件 (EXPDAT.DMP) TABLES 表名称列表
COMPRESS 导入到一个区 (Y) RECORDLENGTH IO 记录的长度
GRANTS 导出权限 (Y) INCTYPE 增量导出类型
INDEXES 导出索引 (Y) RECORD 跟踪增量导出 (Y)
DIRECT 直接路径 (N) TRIGGERS 导出触发器 (Y)
LOG 屏幕输出的日志文件 STATISTICS 分析对象 (ESTIMATE)
ROWS 导出数据行 (Y) PARFILE 参数文件名
CONSISTENT 交叉表的一致性 (N) CONSTRAINTS 导出的约束条件 (Y)
OBJECT_CONSISTENT 只在对象导出期间设置为读的事务处理 (N)
FEEDBACK 每 x 行的显示进度 (0)
FILESIZE 每个转储文件的最大大小
FLASHBACK_SCN 用于将会话快照设置回以前状态的 SCN
FLASHBACK_TIME 用于获取最接近指定时间的 SCN 的时间
QUERY 用于导出表的子集的 select 子句
RESUMABLE 遇到与空格相关的错误时挂起 (N)
RESUMABLE_NAME 用于标识可恢复语句的文本字符串
RESUMABLE_TIMEOUT RESUMABLE 的等待时间
TTS_FULL_CHECK 对 TTS 执行完整的或部分相关性检查
TABLESPACES 要导出的表空间列表
TRANSPORT_TABLESPACE 导出可传输的表空间元数据 (N)
TEMPLATE 调用 iAS 模式导出的模板名
>imp help=y
可以通过输入 IMP 命令和您的用户名/口令
后接用户名/口令的命令:
例程: IMP SCOTT/TIGER
或者, 可以通过输入 IMP 命令和各种参数来控制“导入”
按照不同参数。要指定参数,您可以使用关键字:
格式: IMP KEYWORD=value 或 KEYWORD=(value1,value2,...,vlaueN)
例程: IMP SCOTT/TIGER IGNORE=Y TABLES=(EMP,DEPT) FULL=N
或 TABLES=(T1: P1,T1: P2),如果 T1 是分区表
USERID 必须是命令行中的第一个参数。
关键字 说明(默认) 关键字 说明(默认)
------------------------------------------------------------------------
USERID 用户名/口令 FULL 导入整个文件 (N)
BUFFER 数据缓冲区大小 FROMUSER 所有人用户名列表
FILE 输入文件 (EXPDAT.DMP) TOUSER 用户名列表
SHOW 只列出文件内容 (N) TABLES 表名列表
IGNORE 忽略创建错误 (N) RECORDLENGTH IO 记录的长度
GRANTS 导入权限 (Y) INCTYPE 增量导入类型
INDEXES 导入索引 (Y) COMMIT 提交数组插入 (N)
ROWS 导入数据行 (Y) PARFILE 参数文件名
LOG 屏幕输出的日志文件 CONSTRAINTS 导入限制 (Y)
DESTROY 覆盖表空间数据文件 (N)
INDEXFILE 将表/索引信息写入指定的文件
SKIP_UNUSABLE_INDEXES 跳过不可用索引的维护 (N)
FEEDBACK 每 x 行显示进度 (0)
TOID_NOVALIDATE 跳过指定类型 ID 的验证
FILESIZE 每个转储文件的最大大小
STATISTICS 始终导入预计算的统计信息
RESUMABLE 在遇到有关空间的错误时挂起 (N)
RESUMABLE_NAME 用来标识可恢复语句的文本字符串
RESUMABLE_TIMEOUT RESUMABLE 的等待时间
COMPILE 编译过程, 程序包和函数 (Y)
STREAMS_CONFIGURATION 导入 Streams 的一般元数据 (Y)
STREAMS_INSTANITATION 导入 Streams 的实例化元数据 (N)
下列关键字仅用于可传输的表空间
TRANSPORT_TABLESPACE 导入可传输的表空间元数据 (N)
TABLESPACES 将要传输到数据库的表空间
DATAFILES 将要传输到数据库的数据文件
TTS_OWNERS 拥有可传输表空间集中数据的用户
相关推荐
官方资料:白皮书[英文]Oracle Database 12c: Full Transportable Export/Import Full Transportable Export/lmport Support for Pluggable Databases ;Internals of Full Transportable Export/lmport;Full ...
Oracle数据库的Export和Import工具是数据迁移和备份的重要手段,它们允许用户在不同的数据库实例间移动数据,或者在同一个数据库的不同表空间之间进行操作。在实际应用中,尤其是在升级数据库版本时,理解Export和...
总之,Oracle的Export和Import工具是数据库管理中的重要工具,它们为企业级的数据迁移和备份提供了一套强大且灵活的解决方案。通过正确使用这两个工具,可以确保在各种业务场景下数据的完整性和一致性。
本文将详细介绍 Oracle Export/Import 工具的使用方法及其应用场景。 #### 二、Oracle Export/Import 工具概述 Oracle Export/Import 是一组用于在不同 Oracle 数据库之间进行数据传输的强大工具。通过这些工具,...
Oracle数据库的备份与恢复工具主要包括Export和Import,它们主要用于逻辑备份和恢复,通过将数据库内容导出为二进制文件,然后在另一个环境中导入,实现数据的移植。 首先,文章指出,利用Export/Import工具可以将...
- **兼容性矩阵**:本文档提供了Oracle不同版本间使用Export与Import工具时的兼容性指导。 - **适用版本**:Oracle7、Oracle8、Oracle8i、Oracle9i及Oracle10g。 - **导出/导入工具**:包括传统的`exp`和`imp`工具,...
无论是Oracle Data Pump还是Export Utility,它们都提供了数据导出的元数据,这些元数据可以在后续使用Import Utility(impdp或imp)将数据导入到另一个Oracle数据库中。导入过程同样可以通过指定各种选项来定制,以...
在使用导入/导出工具时,需要注意两个规则:规则一:从 Oracle 低版本的 Export 数据可以 Import 到 Oracle 高版本中,但限于 Oracle 的相邻版本。规则二:Oracle 的 Export/Import 工具只能连接到拥有更高或者...
Oracle 11g 提供了多种工具来实现这些操作,其中Export/Import工具是最基础的逻辑备份手段之一。 Export/Import工具是Oracle数据库自带的实用程序,用于将数据库对象和数据转化为二进制转储文件,然后在需要时将...
本文重点探讨了几种Oracle数据库的数据迁移方法,其中包括:字符集统一、Oracle自带的Export/Import工具迁移、DataPump、PLSQL Developer迁移以及SQL Loader等。 字符集统一是数据迁移前的必要准备工作。Oracle...
4. Export/Import备份:使用Export/Import工具将数据库的数据和结构备份到其他媒体上。 Oracle数据库备份与恢复的步骤 以下是Oracle数据库备份与恢复的步骤: 1. 备份数据库:将数据库备份到其他媒体上,以防止...
例如,Oracle 8.0.5的Export/Import工具可以连接到Oracle 8.1.6数据库;高版本Export导出的转储文件,低版本的Import无法读取;而低版本Export导出的转储文件,高版本的Import可以进行读取。 在实际操作中,可能会...
1. Export/Import是Oracle提供的逻辑备份工具,可以用于备份和恢复Oracle数据库中的对象或数据。Export工具可以导出数据库中的对象定义和数据到一个二进制转储文件(dmp文件)中。Import工具用于将导出的dmp文件中的...
Oracle提供了export工具来进行逻辑备份,export将数据按照Oracle的特定格式写到操作系统的文件中,恢复时使用import工具将数据导入到数据库中。 2. 逻辑备份的优缺点:逻辑备份常用于Oracle数据库之间移动数据,...
Oracle提供了多种备份策略,其中逻辑备份是通过Oracle的Export/Import工具实现的,这是一对实用程序,用于创建数据库对象的逻辑副本,并将这些副本存储在二进制转储文件中。 逻辑备份的优点在于它的灵活性,能够...
狂龙Oracle数据库辅助工具是一款简单快捷、易于使用的oracle数据库常用命令与操作的辅助工具。使用该软件,用户可自行输入oracle常用命令与Export/Import数据库的还原与备份命令,然后执行命令。
Oracle提供了一种叫做IMPDP(Import Data Pump)的工具,用于将DMP文件中的数据导入到数据库中。IMPDP支持各种参数,如表空间映射、数据过滤、重定向插入等,以满足不同导入需求。高效的导入脚本会考虑如何最大限度...
- **选择升级方法**:Oracle提供多种升级方式,如使用DBUA(Database Upgrade Assistant)进行自动升级,或者通过Export/Import工具进行数据迁移。 - **选择新的Oracle Home目录**:升级后,数据库将安装到新的...
SI Object Browser是集Oracle...还可以在GUI上调用Oracle Export/Import工具。 > >备注: > >和Oracle客户端连接的Oracle服务器的版本必须是Oracle8.0.4~10.2.0。 >Oracle客户端安装完成,并且使用SQL*Plus可以连接。
**Oracle Import (IMP)**:与Oracle Export相对应,Oracle Import用于将通过EXP工具导出的.DMP文件重新导入到Oracle数据库中。IMP工具支持全库导入和特定对象导入,根据导出文件中的元数据自动创建和填充数据库对象...