oracle imp / exp 导入导出命令详解
一 Exp 命令 输入命令 exp help = y 可得到下面的提示: 例程: EXP SCOTT/TIGER 或者,您也可以通过输入跟有各种参数的 EXP 命令来控制“导出”按照不同参数。 要指定参数,您可以使用关键字: 格式: EXP KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN) USERID 必须是命令行中的第一个参数。 关键字 说明(默认) 关键字 说明(默认) FEEDBACK 每 x 行显示进度 (0) 二 Imp 命令 imp help =y 例程: IMP SCOTT/TIGER 或者,可以通过输入 IMP 命令和各种参数来控制“导入”按照不同参数。 要指定参数,您可以使用关键字: USERID 必须是命令行中的第一个参数。 关键字 说明(默认) 关键字 说明(默认) 下列关键字仅用于可传输的表空间 三、EXP常用选项 1、FULL,这个用于导出整个数据库,在ROWS=N一起使用时,可以导出整个数据库的结构。例如: exp sys file = . / db.dmp log = ./ db. log full = y rows = n compress = y direct = y2、BUFFER和FEEDBACK,在导出比较多的数据时,我会考虑设置这两个参数。例如: exp new file = db.dmp log = yw97_2003_3. log feedback = 10000 buffer = 100000000 tables = WO4,OK_YT 3、FILL和LOG,这两个参数分别指定备份的DMP名称和LOG名称,包括文件名和目录。 需要说明的是,EXP可以直接备份到磁带中,即使用FILE=/dev/rmt0(磁带设备名),但是一般我们都不这么做,原因有二:一、这样做的速度会慢很多,二、现在一般都是使用磁带库的,不建议直接对磁带进行操作。至于没有使用磁带库的朋友可以考虑和UNIX的TAR结合使用。 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: 6、QUERY参数后面跟的是where条件,值得注意的是,整个where子句需要使用""括起来,where子句的写法和SELECT中相同,如果是UNIX平台所有"和"都需要使用u26469屏蔽它们的特殊含义: exp gototop / gototop file = 1 .dmp log = 1 . log tables = cyx.t如果是windows平台,则使用下面的格式: exp c / c @ncn file = c.dmp log = c. log tables = t query = """ where id = 1 and name = " gototop " """ 四 IMP常用选项 1、FROMUSER和TOUSER,使用它们实现将数据从一个SCHEMA中导入到另外一个SCHEMA中。 2、IGNORE、GRANTS和INDEXES,其中IGNORE参数将忽略表的存在,继续导入,这个对于需要调整表的存储参数时很有用,我们可以先根据实际情况用合理的存储参数建好表,然后直接导入数据。而GRANTS和INDEXES则表示是否导入授权和索引,如果想使用新的存储参数重建索引,或者为了加快到入速度,我们可以考虑将INDEXES设为N,而GRANTS一般都是Y。 另外一个EXP/IMP都有的参数是PARFILE,它是用来定义EXP/IMP的参数文件,也就是说,上面的参数都可以写在一个参数文件中,但我们一般很少使用。 五 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更加灵活。 六 不同版本的EXP/IMP问题? 一般来说,从低版本导入到高版本问题不大,麻烦的是将高版本的数据导入到低版本中,在Oracle9i之前,不同版本Oracle之间的EXP/IMP可以通过下面的方法来解决: 1、在高版本数据库上运行底版本的catexp.sql; 2、使用低版本的EXP来导出高版本的数据; 3、使用低版本的IMP将数据库导入到底版本数据库中; 4、在高版本数据库上重新运行高版本的catexp.sql脚本。 但在9i中,上面的方法并不能解决问题。如果直接使用底版本EXP/IMP会出现如下错误: EXP-00008: ORACLE error %lu encountered ORA-00904: invalid column name 这已经是一个公布的BUG,需要等到Oracle10.0才能解决,BUG号为2261722,你可以到METALINK上去查看有关此BUG的详细信息。 BUG归BUG,我们的工作还是要做,在没有Oracle的支持之前,我们就自己解决。在Oracle9i中执行下面的SQL重建exu81rls视图即可。 七 其他问题 本文只讨论了Oracle8i和9i中的EXP/IMP的一些情况,对于之前的版本,在8.0.X中,除了QUERY参数不能用外,其它差别不大。针对没有QUERY的情况,我们可以先在数据库中使用查询条件建立临时中间表,然后使用EXP导出这个中间表即可。关于EXP/IMP的详细参数信息你可以通过EXP/IMP HELP=Y来获得。 另外关于传输表空间的更多信息可以参考下面的Metelink文档,本文不再详述。 .在进行并行EXP/IMP的时候,如果IMP过程建索引的话不建议同时运行5个以上的IMP,如果你想加快速度,可以在IMP的时候不建索引,这样只要内存允许,可以多跑几个,然后是SQL脚本创建需要的索引。 基本语法和实例: 1、EXP: 有三种主要的方式(完全、用户、表) (1)完全: EXP SYSTEM/MANAGER BUFFER=64000 FILE=C:/FULL.DMP FULL=Y 如果要执行完全导出,必须具有特殊的权限 (2)用户模式: EXP SONIC/SONIC BUFFER=64000 FILE=C:/SONIC.DMP OWNER=SONIC 这样用户SONIC的所有对象被输出到文件中。 (3)表模式: EXP SONIC/SONIC BUFFER=64000 FILE=C:/SONIC.DMP OWNER=SONIC TABLES=(SONIC) 这样用户SONIC的表SONIC就被导出 2、IMP: 具有三种模式(完全、用户、表) (1)完全: IMP SYSTEM/MANAGER BUFFER=64000 FILE=C:/FULL.DMP FULL=Y (2)用户模式: IMP SONIC/SONIC BUFFER=64000 FILE=C:/SONIC.DMP FROMUSER=SONIC TOUSER=SONIC 这样用户SONIC的所有对象被导入到文件中。必须指定FROMUSER、TOUSER参数,这样才能导入数据。 (3)表模式: EXP SONIC/SONIC BUFFER=64000 FILE=C:/SONIC.DMP OWNER=SONIC TABLES=(SONIC) 这样用户SONIC的表SONIC就被导入。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |