解决impdp导入错误一例

| No Comments

今天有同事问我:

我在使用oracleexpdpimpdp命令的时候遇到了一点问题,想请教你一下。

我需要从HKPROD库中导出数据库的元数据,导入另一个测试库wide中。             

我从HKPROD库中导出了两个dmp文件,使用的语句如下:

expdp hkhk/uniface@hkprod dumpfile=hkprod_hkhk.dmp schemas=hkhk exclude=index content=metadata_only logfile=hkprod_hk_exp_metadata.log

expdp hkhk/uniface@hkprod dumpfile=hkprod_hkhk_index.dmp schemas=hkhk include=index content=metadata_only logfile=hkprod_hk_exp_index.log

日志文件在附件里面。

再将这两个dmp文件导入我们的测试库WIDE时,出现了问题。

不包含index的那个dmphkprod_hkhk.dmp )正常的导入了,包含index的那个hkprod_hkhk_index.dmp,出现了问题。

 

Import: Release 10.2.0.3.0 - 64bit Production on Tuesday, 04 August, 2009 9:50:58

Copyright (c) 2003, 2005, Oracle.  All rights reserved.

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production

With the Partitioning, OLAP and Data Mining options

ORA-39001: invalid argument value

ORA-39000: bad dump file specification

ORA-31619: invalid dump file "/bspu01/app/ssv2/hkprod_hkhk_index.dmp"

 

使用的imp命令如下:

1impdp yutao/uniface@wide DIRECTORY=dir_yutao DUMPFILE=hkprod_hkhk.dmp remap_schema=hkhk:yutao  EXCLUDE=statistics  TABLE_EXISTS_ACTION=skip content=metadata_only logfile=hkprod_hkhk REMAP_TABLESPACE=HKHK:AUAU REMAP_TABLESPACE=HKHKIDX:AUAU REMAP_TABLESPACE=HKHKARC:AUAU

 

2

impdp yutao/uniface@wide directory=dir_yutao dumpfile=hkprod_hkhk_index.dmp  remap_schema=hkhk:yutao  EXCLUDE=statistics include=index TABLE_EXISTS_ACTION=truncate content=metadata_only logfile=hkprod_hkhk_index REMAP_TABLESPACE=HKHK:AUAU REMAP_TABLESPACE=HKHKIDX:AUAU REMAP_TABLESPACE=HKHKARC:AUAU

 

我自己分析:

1、文件夹的路径没错。dir_yutao 是我新建的,路径指向的确实是/bspu01/app/ssv2

2dmp文件是从AIX机器上ftp下来的,然后我用u盘拷回了自己的电脑,然后再拷贝到我们的测试机wide上面操作的。 ftp下载的时候传输格式是binary

3yutao这个schema也是新建的,然后赋权限了

-- Grant/Revoke role privileges

grant connect to YUTAO;

grant dba to YUTAO with admin option;

grant exp_full_database to YUTAO;

grant imp_full_database to YUTAO;

-- Grant/Revoke system privileges

grant create any table to YUTAO;

grant execute any procedure to YUTAO;

grant select any table to YUTAO;

grant unlimited tablespace to YUTAO with admin option;

4、数据库的版本不同,导出数据的库是10.2.0.2.0 ,我们的测试库是10.2.0.3.0

这两个dmp文件,第一个成功了。但是第二个不成功,很奇怪。

这个当我一看完他信的内容,我就知道原因了,因为我曾经看过549750.1,个人感觉metalink是最好的老师了,里面的资源几乎是无限的,只要你肯下功夫去看,去积累,这样当你碰到问题的时候你就能保持一定的敏感度。

 

上述问题是expdp/impdp里很普遍的问题,高版本的目标数据库在读低版本的源数据库的由expdp产生的文件的时候很可能会产生上述错误,解决方法就是本着一个"就低不就高"的原则,比如对于上述问题而言,只需要在源数据库执行expdp的时候加上version=10.2.0.2,然后在目标数据库执行impdp的时候也加上version=10.2.0.2的就OK了。

 

其实不光expdp/impdp有这样的问题,exp/imp一样也会有。比如:

9iR2exp/imp可以导出/导入数据到10gR2中,但反过来不行。用9iR2imp执行导入数据到10gR2中的时候在最后一步总是会一直等待(屏幕上显示为About to enable constraints...),就像是被hang住了一样,实际上这时候所有的工作都已经做完了(验证方式就是去v$session中看imp所在的那个session的等待事件是否是SQL*Net more data from client,如果是,则可以放心的ctrl + C退出)。

Leave a comment