这是我的用例:
我有两个不同的转储文件,来自两个不同的外部源,都使用exp(经典转储)导出:export1.dmp
和export2.dmp
(据我所知,它们是两者都以exp版本V11.02.00导出。但我对它们的了解不多。)
对于每一个,我使用indexfile
选项运行imp实用程序(在Oracle 12c上),以生成包含表和索引创建命令的sql文件,如下所示:
(a)imp mytargetuser/password file=export1.dmp full=y indexfile=create1.sql
(b)imp mytargetuser/password file=export2.dmp full=y indexfile=create2.sql
在create1.sql
中,每个create语句都使用前缀为mytargetuser
的表/索引名称生成(这就是我想要的),如:
create table mytargetuser.table1 ...;
create index mytargetuser.index1 ...;
但是,在create2.sql
中,每个create语句都是以{/ 1}}为前缀的表/索引名称生成的(可能是原始数据库中的用户,从转储的位置开始):
someuser
知道为什么indexfile选项输出的这种差异?如果有任何方法我可以强迫imp始终像上面第一种情况(a)那样:使用我运行imp的用户作为生成脚本中的模式前缀(或者不在所有表/索引处加上前缀)具有模式名称的名称,这对我也有好处)? (再一次,我不能以任何方式影响转发在另一端的生成方式。)
答案 0 :(得分:0)
确实解释了这种行为in the manual:
如果您未指定TOUSER,则Import将执行以下操作:
如果导出文件是完整转储或多模式,用户模式导出转储文件,则将对象导入FROMUSER模式
如果导出,则在导入程序架构中创建对象(无论导入时是否存在FROMUSER架构) file是由。创建的单模式,用户模式导出转储文件 无特权的用户
基于上述情况,可能会推测export2.dmp
"是完整转储或多审程,用户模式导出转储文件",而export1.dmp
"是由非特权用户创建的单模式,用户模式导出转储文件"。