日期:2014-05-16  浏览次数:20418 次

Oracle中exp/imp 问题(整理)
用 exp 数 据 导 出】:
1 将数据库TEST完全导出
   exp system/manager@TEST file=d:\test.dmp full=y
2 将数据库中system用户与sys用户的表导出
   exp system/manager@TEST file=d:\test.dmp owner=(system,sys)
3 将数据库中的表table1 、table2导出
   exp system/manager@TEST tables=(table1,table2)  file=d:\test.dmp
4 将数据库中的表table1中的字段filed1以”00″打头的数据导出
   exp system/manager@TEST tables=(table1) query=\” where filed1 like '00%'\” file=d:\test.dmp (一般将满足条件的记录生成临时表,再exp)

【用 imp 数 据 导 入】:
1 将D:\test.dmp 中的数据导入 TEST数据库中。
   imp system/manager@TEST file=d:\test.dmp ignore=y
2 将D:\test.dmp中的表table1 导入
   imp system/manager@TEST file=d:\test.dmp tables=(table1)
一般情况,将表彻底删除再导入。大多情况都可以用Oracle数据导入导出完成数据的备份和还原(不会造成数据的丢失)。

导出导入尽量避免使用system,避免使用full。导出时使用owner,导入时使用fromuser  touser

4.导入工具imp可能出现的问题

(1) 数据库对象已经存在
   一般情况, 导入数据前应该彻底删除目标数据下的表, 序列, 函数/过程,触发器等; 

(2) 数据库对象有主外键约束
     不符合主外键约束时, 数据会导入失败 解决办法: 先导入主表, 再导入依存表
     disable目标导入对象的主外键约束, 导入数据后, 再enable它们
(3) 权限不够
      如果要把A用户的数据导入B用户下, A用户需要有imp_full_database权限
(4) 导入大表( 大于80M ) 时, 存储分配失败
      默认的EXP时, compress = Y, 也就是把所有的数据压缩在一个数据块上.导入时, 如果不存在连续一个大数据块, 则会导入失败.导出80M以上的大表时, 记得compress= N, 则不会引起这种错误.

(5) imp和exp使用的字符集不同
     如果字符集不同, 导入会失败, REGEDIT-> HKEY_LOCAL_MACHINE->SOFTWARE->ORACLE 查找NLS_LANG  导 入完成后再改回来.

(6) imp和exp版本不能往上兼容
     错误提示:
     IMP-00069: 无法转换为环境本国字符集句柄
     IMP-00021: 操作系统错误 - 错误代码(十进制2,十六进制0x2)
     imp可以成功导入低版本exp生成的文件, 不能导入高版本exp生成的文件根据情况我们可以用$ imp username/password@connect_string