oracle导入与导出 exp/imp,expdp/impdp

由于业务需要最近又接触了dmp文件。两年前曾经做过一些相关的导入导出,但是没有记录,这次把遇到的坑都记录一下。

导入导出方式exp/imp,expdp/impdp

oracle在10g以后的版本中提供了新的迁移工具EXPDP/IMPDP,此工具无需设置客户端字符集,而是由ORACLE自动去识别并完全字符集的转换。在实际操作中,比exp/imp要简便不少。

1)在这边的坑主要是exp导出的dmp文件只能由imp导入,而expdp导出的只能由impdp导入,两者不能混用。

可能遇到的报错如下:

ORA-39001: 参数值无效
ORA-39000: 转储文件说明错误
ORA-39143: 转储文件 “.dmp” 可能是原始的导出转储文件

IMP-00038: Could not convert to environment character set`s handle
IMP-00000: Import terminated unsuccessfully

原因:因为文件导出是用的expdp导出,而导入时用imp导入,所以导出和导入格式不一样。

2)其次要注意的就是两者的参数不同。imp导入的时候参数file需要打全文件路径,而impdp是不能带有路径的。需要提前把文件放到dpdump里以参数dumpfile直接选择文件。

可能遇到的报错如下:

ORA-39001: 参数值无效
ORA-39000: 转储文件说明错误
ORA-39088: 文件名不能包含路径说明

3)导入导出用户不一致。使用expdp/impdp时用户必须要一致,不然会报错。而使用exp/imp时,只是会报警告但不妨碍迁移。解决办法:

emp/imp用法:

formuser=导出用户  touser=导入用户;

empdp/impdp用法:

remap_schema=导出用户:导入用户

可能遇到的报错如下:

ORA-39126: 对象类型xxx创建失败, 出现错误:
ORA-01918: 用户 'xxx' 不存在

警告:这些对象由xxx导出,而不是当前用户

表空间

oracle的数据表需要手动建表空间。导入时需要建原数据表同名的表空间。

可能遇到的报错如下:

ORA-39083: 对象类型 TABLE:"XXX"."XXX" 创建失败, 出现错误:

ORA-00959: 表空间 'xxx' 不存在

解决:在oracle sql developer中创建一下表空间就行了。

Create tablespace 表空间名 datafile '数据文件' size 空间大小 Autoextend On Next 10000m Maxsize Unlimited;

Autoextend On Next 10000m Maxsize Unlimited 是自动扩容且最大不限(注意:虽然是最大不限的,但是实际操作中还是发现单个数据文件最大为32GB,超过这一大小就需要2个文件,超过64GB则需要3个,以此类推。后经查询oracle可管理的最大数据块为2的22次方个,而根据单个数据块大小大小的不同,其最大容量也是不同的。对于OLTP应用,数据块的大小通常为8K,这样,算下来,单个数据文件的大小最大为(2^22)*8K=32G)

增加一个数据文件的语句:
Alter Tablespace 表空间名 Add Datafile '数据文件' Size 空间大小 Autoextend On Next 10000m Maxsize Unlimited;

tips:在此附上一个小贴士,创建数据文件的时候是需要等待的,初始建的越大等待时间越久,既然已经选了让它自己“长大“,在一开始的时候可以定的很小,比如100m。

可能遇到的报错:

ORA-01658: 无法为表空间中的段创建 INITIAL 区

这就是表空间容量不够,加大一下就好。

导入语句

impdp username/password dumpfile=dumpname full=y ignore=y remap_schema=UserA:UserB

ignore=y 表示忽略创建表时的错误。在执行时被替换为 table_exists_action=append

附上一张导入成功的图,大功告成!

如图,107G的文件大概需要1小时零6分钟。数据大小的话,表空间文件花了240G。以上数据仅供参考。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值