oracle imp:indexfile选项生成的文件中使用的模式前缀

时间:2018-02-12 19:28:00

标签: database oracle import

这是我的用例:

  1. 我有两个不同的转储文件,来自两个不同的外部源,都使用exp(经典转储)导出:export1.dmpexport2.dmp(据我所知,它们是两者都以exp版本V11.02.00导出。但我对它们的了解不多。)

  2. 对于每一个,我使用indexfile选项运行imp实用程序(在Oracle 12c上),以生成包含表和索引创建命令的sql文件,如下所示:

  3. (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的用户作为生成脚本中的模式前缀(或者不在所有表/索引处加上前缀)具有模式名称的名称,这对我也有好处)? (再一次,我不能以任何方式影响转发在另一端的生成方式。)

1 个答案:

答案 0 :(得分:0)

确实解释了这种行为in the manual

  

如果您未指定TOUSER,则Import将执行以下操作:

     
      
  • 如果导出文件是完整转储或多模式,用户模式导出转储文件,则将对象导入FROMUSER模式

  •   
  • 如果导出,则在导入程序架构中创建对象(无论导入时是否存在FROMUSER架构)   file是由。创建的单模式,用户模式导出转储文件   无特权的用户

  •   

基于上述情况,可能会推测export2.dmp"是完整转储或多审程,用户模式导出转储文件",而export1.dmp"是由非特权用户创建的单模式,用户模式导出转储文件"。