对imp中的fromuser参数的偏差理解

这是杂货铺的第434篇文章

 

这两天执行导入dump文件时总碰到一个问题。

 

问题现象
1. 执行:

imp xyz/xxx file=test.dmp log=imp_test.log fromuser=test1 touser=test2 ignore=y commit=y buffer=300000000 feedback=10000
注:这个文件dump>200G容量。

2. 执行了许久,但最后结果和log中记录:
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning and Data Mining options
Export file created by EXPORT:V10.02.01 via conventional path
Warning: the objects were exported by TEST1, not by you
import done in ZHS16GBK character set and AL16UTF16 NCHAR character set
. importing TEST1's objects into TEST2
Import terminated successfully without warnings.

3. 但没有任何dump中的数据导入到test2用户中。

原因分析
首先,其实是对imp命令中的fromuser参数偏差的理解。
[root@vm-vmw4131-t ~]# imp -help
FROMUSER     list of owner usernames
imp指令帮助中说明FROMUSER的含义是“属主用户名列表”。

 

相应的,从exp指令帮助中可以看到OWNER参数表示的是相同的含义:
[root@vm-vmw4131-t ~]# exp -help
OWNER        list of owner usernames
即该用户指的是对象所属用户。

其次,上述问题中用到的fromuser=test1这个test1用户是执行exp的系统账户,并不是数据库对象所属账户,这就能解释上面问题的原因了:由于dump文件所属的数据对象账户是另外一个账户,不是test1,因此使用imp ... fromuser=test1时,会检索这个文件dump,查找属于test1用户的对象,全文件扫描后,根本没有属于该用户的对象,因此提示“Import terminated successfully without warnings”正常结束。

因此,针对这个问题,imp的fromuser指的是对象所属用户,不是执行exp导出的用户。

 

导入导出相关的文章,

《imp/exp导入导出的一些错误》

《imp错误IMP-00098: INTERNAL ERROR: impgst2Segmentation fault》

《Oracle导入导出的常见错误》

《解决导入过程中出现的ORA-02289错误》

《生产数据导入测试环境碰见的一些问题》

《使用exp导出报错EXP-00091》

《数据迁移中碰见的一些问题》

《如何验证dump文件的有效性》

你可能感兴趣的:(对imp中的fromuser参数的偏差理解)