oracle imp的那些事

    技术2024-08-06  99

    近日,用imp导入的时候遇到一些问题。先整理一下遇到的问题,并提供解决的方案。

    导入命令如下:

    imp test1/test1@实例  file=xxx IGNORE=Y GRANTS=N INDEXES=N CONSTRAINTS=N  log=/tmp/oracleimp.log  buffer=1000000 fromuser=xxx touser=test1 1.ORA-01659: unable to allocate MINEXTENTS beyond 31 in tablespace xxx

    (1)导入的时候是分区表,当时备份时并没有指定分区导出,所以导出时包含了全部的分区。导入时oracle会检查要导入的表空间大小是否满足 该分区表预分配的空间大小,不满足的话就会抛出ORA-01659的问题了。所以需要加大导入的表空间大小或者删除一些不需要的数据。

    一开始以为导入时表会创建在用户所属的表空间下,实际上是在原来的表空间中。如果要导入的表空间不存在,也会报错的。

    所以可以创建要导入的表空间,也可以更换表空间。

    (2)也可以指定要导入的表空间,在导入dmp文件之前,先将原备份数据的表结构导出。用文本编辑器更换原来的表空间,然后将sql文件导入到新库。之后执行上述命令可以完整导入。由于表已经被创建了所以导入时忽略了创建表的错误,故可以成功导入。

    exp时没有drop表的命令。当表已经被创建时,里面的数据字段和表结构不匹配会产生错误。遇到这种情况需要删除之前创建的表。

    在导出时要加上compress=y 将空间压缩一下,会减少该错误的发生。

    Processed: 0.011, SQL: 9