Oracle data integrator ODI 12c使用SDK智能导入Exec存储库的行为类似于导入到开发人员存储库
我尝试通过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就像是在使用开发人员存储库(只是猜测) 我的代码: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:
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);