Oracle data integrator ODI 12c使用SDK智能导入Exec存储库的行为类似于导入到开发人员存储库

Oracle data integrator ODI 12c使用SDK智能导入Exec存储库的行为类似于导入到开发人员存储库,oracle-data-integrator,Oracle Data Integrator,我尝试通过ODI客户端将Exec存储库生成的XML文件智能导入到另一个带有SDK的Exec存储库。我正在使用ODI 12.2.1.4。 我已经有了一个java程序,它在11g(11.1.1.9)中运行良好,但是自从我升级到12之后,我出现了一些错误(由于新版本,我对代码做了一些更改)。 使用ODI studio将xml文件智能导入Exec存储库工作正常,因此该文件看起来还可以 程序给出的错误为: oracle.odi.impexp.smartie.OdiSmartImportException:

我尝试通过ODI客户端将Exec存储库生成的XML文件智能导入到另一个带有SDK的Exec存储库。我正在使用ODI 12.2.1.4。 我已经有了一个java程序,它在11g(11.1.1.9)中运行良好,但是自从我升级到12之后,我出现了一些错误(由于新版本,我对代码做了一些更改)。 使用ODI studio将xml文件智能导入Exec存储库工作正常,因此该文件看起来还可以

程序给出的错误为: oracle.odi.impexp.smartie.OdiSmartImportException:com.sunopsis.dwg.sqlworkreposeception:ORA-00942:Table ou vue inrestante

原因:错误:942,位置:14,Sql=从SNP_变量中选择1,其中I_项目为NULL,VAR_名称为'CONN_DEC_USER',OriginalSql=从SNP_变量中选择1,其中I_项目为NULL,VAR_名称为'CONN_DEC_USER',错误消息=ORA-00942:表ou vue inrestante

根据Oracle的支持,我的Exec存储库没有SNP_VAR表是完全正常的,它只在Dev存储库中。 奇怪的是,智能导入会对其发出此请求。在我看来,smartImport就像是在使用开发人员存储库(只是猜测)

我的代码:

    private String TargetUrl = "jdbc:oracle:thin:@";
    private String TargetDriver="oracle.jdbc.OracleDriver";
    private String TargetMaster_User;
    private String TargetMaster_Pass;
    private String WorkRep_Execution="WORK1";
    private String TargetOdi_User="USER";
    private String TargetOdi_Pass="PASS";
    private String ExportFile;
    private MasterRepositoryDbInfo targetmasterInfo;
    private WorkRepositoryDbInfo workInfo_exec;
    private OdiInstance odiInstance_exec;
    private Authentication auth_exec;
    private SmartImportServiceImpl smartImport;
    private ITransactionManager Tm;
    ITransactionStatus TStatus;

SmartImport(String Url, String File, String targetMasterUser, String targetMasterPwd) throws IOException{
    TargetUrl = TargetUrl+Url;
    ExportFile = File;
    TargetMaster_User = targetMasterUser;
    TargetMaster_Pass = targetMasterPwd;
    targetmasterInfo = new MasterRepositoryDbInfo(TargetUrl, TargetDriver, TargetMaster_User,TargetMaster_Pass.toCharArray(), new PoolingAttributes());
    workInfo_exec = new WorkRepositoryDbInfo(WorkRep_Execution, new PoolingAttributes());
    odiInstance_exec=OdiInstance.createInstance(new OdiInstanceConfig(targetmasterInfo,workInfo_exec));
    auth_exec = odiInstance_exec.getSecurityManager().createAuthentication(TargetOdi_User,TargetOdi_Pass.toCharArray());
    odiInstance_exec.getSecurityManager().setCurrentThreadAuthentication(auth_exec);
    smartImport = new SmartImportServiceImpl(odiInstance_exec);
    Tm = odiInstance_exec.getTransactionManager();
    TStatus = odiInstance_exec.getTransactionManager().getTransaction( new DefaultTransactionDefinition());
    }
我正在处理的主存储库只有一个工作存储库(称为“WORK1”),它是一个执行存储库。 有什么不对劲的线索吗

谢谢
PEB

多亏了JeromeFR的建议,我找到了一个解决问题的方法,使用部署归档而不是智能导出/导入。 它可以很好地从我的dev存储库导出我的归档文件(通过ODI客户端),并通过javaskd导入到我的Exec存储库(我有几个Exec环境) 用于导入存档以替代smartImport的代码:

DeploymentService.applyFullDeploymentArchive(odiInstance_exec, "EXEC_Init.zip", true, "Password".toCharArray(), true);
Thx
PEB

您是否尝试过使用
importFromXml
而不是
importObjectsFromXml
?对我来说,术语对象仅指与场景/负载计划相对的基本对象。但我还没试过。另外,您是否查看了部署档案。从ODI 12.2.1开始,我就使用它来将代码从一个环境提升到另一个环境。如果需要的话,我可以分享一个groovy脚本。你好,JeromeFr,谢谢你的回复。我尝试了importFromXml,结果也一样。我没有尝试使用部署档案,但我只需要在我的案例中部署场景,这样行吗?我对groovy不熟悉,但是是的,请阅读您的脚本。
DeploymentService.applyFullDeploymentArchive(odiInstance_exec, "EXEC_Init.zip", true, "Password".toCharArray(), true);