如何正确使用ORACLE的exp和imp

我刚接触ORACLE,有几个问题还不太懂:

1、EXP和IMP工具是否可以跨平台使用?比如我在WINDOWS上用EXP导出数据之后到LINUX或者UNIX上用IMP导入数据?

2、EXP和IMP工具是否可以跨版本使用?比如我用9i的EXP工具导出数据之后到10g上用IMP导入数据这样是否可以?

3、EXP导出的时候,TABLE参数填写的是多个表名,那么在IMP的时候是否可以只导入其中的某一个表,该如何操作?

4、EXP导出的数据,在IMP的时候如果机器上没有对应的表,IMP工具是否会自动创建表结构?是否必须我手动先创建好表结构才能IMP成功?

5、EXP导出的数据,在IMP的时候目标机器上的数据库表空间分配是否必须和原来的机器上的一致(空间大小肯定够,就是空间的其他配置是否必须一致)?如果不一致是否可以?

1、EXP和IMP工具是否可以跨平台使用?比如我在WINDOWS上用EXP导出数据之后到LINUX或者UNIX上用IMP导入数据?
可以,但一般都是用同样的工具做导出和导入,WINDOWS上和UNIX上的ENDIANNESS不同,混用的话,这个工具有BUG。

2、EXP和IMP工具是否可以跨版本使用?比如我用9i的EXP工具导出数据之后到10g上用IMP导入数据这样是否可以?
这个工具有挺严格的版本限制,不能跨版本使用,你举例的这种会不识别的。

3、EXP导出的时候,TABLE参数填写的是多个表名,那么在IMP的时候是否可以只导入其中的某一个表,该如何操作?
EXP tables=(tab1,tab2)
IMP tables=(tab2)
没有什么特别的,这个自己试一下就知道了

4、EXP导出的数据,在IMP的时候如果机器上没有对应的表,IMP工具是否会自动创建表结构?是否必须我手动先创建好表结构才能IMP成功?
IMP时候会自动执行CREATE语句,然后才是INSERT,所以你的问题恰好说反了,
是如果你已经建好表结构的话,IMP会报警告,说这个表已经存在了,需要在导入时IGNORE=Y

5、EXP导出的数据,在IMP的时候目标机器上的数据库表空间分配是否必须和原来的机器上的一致(空间大小肯定够,就是空间的其他配置是否必须一致)?如果不一致是否可以?
这个工具有个限制,导出时候的表空间名必须就是导入到这个同样名称的表空间里面,如果没有这个表空间的话,导入失败,
不知道你说的其他配置是什么配置,我只能说只要名称相同的话,问题不大,具体问题具体分析了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-11-28
1、
----当然可以跨平台使用,最好的方法是在你需要导入的那一端执行exp命令,然后直接imp。

2、
---是可以的,但是有一定的原则:低版本导出,高版本导入。也就是说,你exp的客户端如果是9i的话,导入到10g是OK的,但是你如果用10g的客户端导出,再想导入到9i就不行了。

3、
---可以啊,IMP的时候指定tables=...就OK了

4、
---你不建表还好,建表不加ignore的话,还给你个警告信息,

5、
---空间名字一样,大小足够就OK乐,至于tablespace里面的datafile之类的,名字,大小不一样都是没有影响的。
第2个回答  2010-11-27
回答1:可以跨平台,最重要的数据库版本一致,字符集一致,操作系统不一致没关系

回答2:一般的说,最好是同版本的,相邻版本的高版本可以兼容低版本的,但是反过来不行,因为数据库的字典不一样。

回答3:很少这么用,你。。。有才!

回答4:会自动创建表结构的,不需要你手动创建的,IMP的状态最好是向一个空的SCHEMA里导入。

回答5:不需要一致,但是空间必须够(包括自动可扩展空间)本回答被网友采纳
第3个回答  推荐于2018-03-31
使用方法及说明如下:
imp:
1. 获取帮助 imp help=y
2. 导入一个完整数据库
imp system/manager file=bible_db log=dible_db full=y ignore=y
3. 导入一个或一组指定用户所属的全部表、索引和其他对象
imp system/manager file=seapark log=seapark fromuser=seapark
imp system/manager file=seapark log=seapark fromuser=(seapark,amy,amyc,harold)
4. 将一个用户所属的数据导入另一个用户
imp system/manager file=tank log=tank fromuser=seapark touser=seapark_copy
imp system/manager file=tank log=tank fromuser=(seapark,amy)
touser=(seapark1, amy1)
5. 导入一个表
imp system/manager file=tank log=tank fromuser=seapark TABLES=(a,b)
6. 从多个文件导入
imp system/manager file=(paycheck_1,paycheck_2,paycheck_3,paycheck_4)
log=paycheck, filesize=1G full=y
7. 使用参数文件
imp system/manager parfile=bible_tables.par
bible_tables.par参数文件:
#Import the sample tables used for the Oracle8i Database Administrator's
Bible. fromuser=seapark touser=seapark_copy file=seapark log=seapark_import
8. 增量导入
imp system./manager inctype= RECTORE FULL=Y FILE=A

exp:
1. 获取帮助
exp help=y
2. 导出一个完整数据库
exp system/manager file=bible_db log=dible_db full=y
3. 导出数据库定义而不导出数据
exp system/manager file=bible_db log=dible_db full=y rows=n
4. 导出一个或一组指定用户所属的全部表、索引和其他对象
exp system/manager file=seapark log=seapark owner=seapark
exp system/manager file=seapark log=seapark owner=(seapark,amy,amyc,harold)
注意:在导出用户时,尽管已经得到了这个用户的所有对象,但是还是不能得到这些对象引用的任何同义词。解决方法是用以下的SQL*Plus命令创建一个脚本文件,运行这个脚本文件可以获得一个重建seapark所属对象的全部公共同义词的可执行脚本,然后在目标数据库上运行该脚本就可重建同义词了。
SET LINESIZE 132
SET PAGESIZE 0
SET TRIMSPOOL ON
SPOOL c:\seapark.syn
SELECT 'Create public synonym '||synonym_name
||' for '||table_owner||'.'||table_name||';'
FROM dba_synonyms
WHERE table_owner = 'SEAPARK' AND owner = 'PUBLIC';
SPOOL OFF
5. 导出一个或多个指定表
exp seapark/seapark file=tank log=tank tables=tank
exp system/manager file=tank log=tank tables=seapark.tank
exp system/manager file=tank log=tank tables=(seapark.tank,amy.artist)
6. 估计导出文件的大小
全部表总字节数:
SELECT sum(bytes)
FROM dba_segments
WHERE segment_type = 'TABLE';

seapark用户所属表的总字节数:
SELECT sum(bytes)
FROM dba_segments
WHERE owner = 'SEAPARK'
AND segment_type = 'TABLE';

seapark用户下的aquatic_animal表的字节数:
SELECT sum(bytes)
FROM dba_segments
WHERE owner = 'SEAPARK'
AND segment_type = 'TABLE'
AND segment_name = 'AQUATIC_ANIMAL';

7. 导出表数据的子集(oracle8i以上)
NT系统:
exp system/manager query='Where salad_type='FRUIT'' tables=amy.salad_type
file=fruit log=fruit
UNIX系统:
exp system/manager query=\"Where salad_type=\'FRUIT\'\" tables=amy.salad_type
file=fruit log=fruit

8. 用多个文件分割一个导出文件
exp system/manager
file=(paycheck_1,paycheck_2,paycheck_3,paycheck_4)
log=paycheck, filesize=1G tables=hr.paycheck

9. 使用参数文件
exp system/manager parfile=bible_tables.par
bible_tables.par参数文件:
#Export the sample tables used for the Oracle8i Database Administrator's Bible.
file=bible_tables
log=bible_tables
tables=(
amy.artist
amy.books
seapark.checkup
seapark.items
)

10. 增量导出
“完全”增量导出(complete),即备份整个数据库
exp system/manager inctype=complete file=990702.dmp
“增量型”增量导出(incremental),即备份上一次备份后改变的数据
exp system/manager inctype=incremental file=990702.dmp
“累计型”增量导出(cumulative),即备份上一次“完全”导出之后改变的数据
exp system/manager inctype=cumulative file=990702.dmp
相似回答