ODI 12c Smart Import в Exec Repository с SDK ведет себя как импорт в Dev Repository

Я пытаюсь интеллектуально импортировать XML-файл, созданный из репозитория Exec через клиент ODI, в другой репозиторий Exec с SDK. Я использую ODI 12.2.1.4. У меня уже была программа java, которая нормально работала в 11g (11.1.1.9), но, поскольку я обновился до 12, у меня есть ошибки (я внес некоторые изменения в код из-за новой версии). Умный импорт xml-файла в репозиторий Exec с помощью ODI studio работает нормально, поэтому файл выглядит нормально.

Программа выдает ошибку: oracle.odi.impexp.smartie.OdiSmartImportException: com.sunopsis.dwg.SQLWorkReposException: ORA-00942: Table ou vue excistante

Причина: ошибка: 942, позиция: 14, Sql = SELECT 1 FROM SNP_VAR, ГДЕ I_PROJECT IS NULL И VAR_NAME = 'CONN_DEC_USER', OriginalSql = SELECT 1 FROM SNP_VAR, WHERE I_PROJECT IS NULL AND VAR_NAME = 'CONN_DEC Error MUSER', = ORA-00942: Table ou vue excistante

Согласно поддержке Oracle, совершенно нормально, что в моем репозитории Exec нет таблицы SNP_VAR, она есть только в репозитории Dev. Что странно, так это то, что этот запрос делает умный импорт. Мне кажется, что smartImport действует как работа с репозиторием Dev (просто догадываюсь)

Мой код:

    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());
    }
smartImport.importObjectsFromXml(ExportFile, "MyPassword".toCharArray(), false);

Главный репозиторий, над которым я работаю, имеет только один рабочий репозиторий (называемый «WORK1»), который является репозиторием выполнения. Есть какие-нибудь подсказки о том, что не так?

Спасибо PEB


person P-E B    schedule 28.11.2019    source источник
comment
Вы пробовали использовать importFromXml вместо importObjectsFromXml? Для меня термин «объекты» относится к базовым объектам только как к противопоставлению сценариям / планам нагрузки. Хотя еще не пробовал. Кроме того, вы смотрели архивы развертывания. Я использую это с ODI 12.2.1 для продвижения кода из среды в другую. Если нужно, могу поделиться отличным сценарием.   -  person JeromeFr    schedule 29.11.2019
comment
Здравствуйте, JeromeFr, спасибо за ваш ответ. Я попробовал importFromXml с тем же результатом. Я не пробовал использовать архивы развертывания, но мне просто нужно развернуть сценарии в моем случае, это сработает? Я не знаком с groovy, но да, пожалуйста, было бы здорово прочитать ваш сценарий.   -  person P-E B    schedule 29.11.2019


Ответы (1)


Благодаря предложению JeromeFR я нашел способ решения моей проблемы с использованием архивов развертывания вместо интеллектуального экспорта / импорта. Он отлично работает, экспортируя мой архив из моего репозитория dev (через клиент ODI) и импортируя в мои репозитории Exec через java skd (у меня есть несколько сред exec). Код для импорта архива вместо smartImport:

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

Спасибо PEB

person P-E B    schedule 03.12.2019