Проблема

Сделки не отправляются во внешние системы.

Решение

В данном разделе обсуждается ситуация с не отправленными сделками из системы Адаптер Навигатора. Необходимо проверить следующие данные:

  1. Заполнено поле IDPOCKET в таблице TBL_FORD32 по сделке. Запросом ниже можно это проверить.

    SELECT * FROM tbl_ford32 WHERE ticket='<<номер_сделки>>';
  2. Если поле IDPOCKET заполнено, необходимо искать причину в FAQ, раздел "Не приходят сделки" принимающего адаптера, предварительно записав номер пакета, в котором ушла сделка.

  3. Поле IDPOCKET пустое, необходимо проверить:

    • Адаптер Навигатора работает корректно.
    • Сервис адаптера RN5NewDSrvc.exe работает корректно (он же установлен как служба RN5OutDocSrvc).
    • Сделка не является частью сделки (SWOP,REPO, межпортфельная сделка).
    • Существует ли подписка у адаптера внешней системы на данный объект.
    • Корректно ли создаются алерты на базе.
    • Проходит фильтры данная сделка;
    • Диспетчер BUS запущен, при необходимости попробуйте перезапустить Диспетчер BUS;
    • Проверить наличие лицензии на публикацию объектов:

      SELECT decode (nvl(ACTION,0),3,'Both',2,'Send out',1,'Incoming', 0, 'License N/A or Not correct Alias object or/and alias system') 
      			as "License status", decode (sign(to_number(m.END_LIC_DATE-sysdate)),1,'Active','Not Active') as "Date License status"
      FROM LIC_BUS_MATRIX m,
        LIC_BUS_SYS_ALIAS a,
        LIC_BUS_OBJ_ALIAS o
      WHERE m.SYSTEM_ID  = a.SYSTEM_ID
      AND m.OBJ_NAME     = o.OBJ_NAME
      AND o.OBJ_ALIAS    = :ObjectName
      AND a.SYSTEM_ALIAS = :SystemName; 
  4. Выполнить скрипт для активации отправки объекта с которым возникли проблемы (в примере используется vw_FX):

    BEGIN
    	prc_alert_over_job('TBLFORD32UPDATED','vw_FX');
    	commit;
    end;

    Если алерты на базе работают корректно и нет проблем с работой сервиса отправки RN5NewDSrvc.exe (служба RN5OutDocSrvc), то в лог файле адаптера должны появится следующие записи:

    RN5OutDocSrvc: Обнаружены изменения в Базе Данных(Было получено оповещение TBLFORD32UPDATED)
    RN5OutDocSrvc: PrepareDocuments: SubscribleObjList.Count > 0
  5. После выполнения проверить отправились сделки, или нет.

  6. Возможно расхождение времени БД с временем сервера приложений. Удостоверьтесь, что время сервера приложений идентично времени БД.

  7. Собрав данные, попробуйте их проанализировать, может быть, ответ лежит на поверхности. Ну если нет, берем всё, что удалось собрать и заводим задачу. Вам помогут. К задаче, прикрепите результаты следующих запросов:

    select * from DBA_JOBS_RUNNING;
    select * from DBA_JOBS;
    select * from USER_JOBS;
  8. Если выполненные действия не привели к выгрузке сделок необходимо провести глубокий анализ формирования пакетов для отправки.

    Адаптер Навигатора для наполнения xml файла вызывает пакет PKG_GET_OUTDOCUMENT, процедура SP_GET_DOCUMENT_DS, которая вызывает функцию, возвращающую табличный тип в курсор - источник для заполнения XML-файла. В зависимости от типа объекта выполняются следующие команды:

    Для объекта 'vw_FX':

      SELECT /*+ CHOOSE */ * from table(cast(F_GET_FX_OUT_BY_POCKET(aIDPOCKET, aSENDERSYSTEM) as TBL_GET_FX_OUT))  order by eventid;

    Для объекта 'vw_DP':

      SELECT /*+ CHOOSE */ * from table(cast(F_GET_DP_OUT_BY_POCKET(aIDPOCKET, aSENDERSYSTEM) as TBL_GET_DP_OUT)) order by eventid;

    Для объекта 'vw_T_TRANSACTIONS':

      SELECT /*+ CHOOSE */ * from table(cast(F_GET_TRNS_OUT_BY_POCKET(aIDPOCKET, aSENDERSYSTEM) as TBL_GET_TRNS_OUT)) order by eventid;

    Для объекта 'vw_MRG_FX':

      SELECT /*+ CHOOSE */ * from table(cast(F_GET_FXMRG_OUT_BY_POCKET(aIDPOCKET, aSENDERSYSTEM) as TBL_GET_FXMRG_OUT)) order by eventid;

    Для объекта 'vw_MRG_DP':

      SELECT /*+ CHOOSE */ * from table(cast(F_GET_DPMRG_OUT_BY_POCKET(aIDPOCKET, aSENDERSYSTEM) as TBL_GET_DPMRG_OUT)) order by eventid;

    Для объекта 'vw_MRG_ORDERS':

      SELECT /*+ CHOOSE */ * from table(cast(F_GET_ORDERMRG_OUT_BY_POCKET(aIDPOCKET, aSENDERSYSTEM) as TBL_GET_ORDERMRG_OUT)) order by eventid;

    Для объекта 'vw_MRG_CUSTOMER':

      SELECT /*+ CHOOSE */ * from table(cast(F_GET_CUSTMRG_OUT_BY_POCKET(aIDPOCKET, aSENDERSYSTEM) as TBL_GET_CUSTOMERMRG_OUT)) order by eventid;

    Для объекта 'vw_SEC_DEAL':

      SELECT /*+ CHOOSE */ * from table(cast(F_GET_SEC_OUT_BY_POCKET(aIDPOCKET, aSENDERSYSTEM) as TBL_GET_SEC_OUT)) order by eventid;

    Для объекта 'vw_INET_CLIENTS':

      SELECT /*+ CHOOSE */ v.*, t.EVENTID, t.ACTTYPE from vw_INET_CLIENTS_2 v, TBL_FORD32 t where t.TICKET = v.PEOPLE_ID
                                 and t.IDPOCKET = aIDPOCKET;

    Для объекта 'vw_SEC_MARKET':

      SELECT /*+ CHOOSE */ * from table(cast(F_GET_SEC_MARKET_OUT_BY_POCKET(aIDPOCKET, aSENDERSYSTEM) as TBL_GET_SEC_MARKET_OUT)) order by eventid;

    Для объекта 'vw_PAYMENTS':

      SELECT /*+ CHOOSE */ * from table(cast(F_GET_PAYMENTS_OUT_BY_POCKET(aIDPOCKET, aSENDERSYSTEM) as TBL_GET_PAYMENTS_OUT)) order by eventid;

    Для объекта 'vw_SEC_COUPON':

      SELECT /*+ CHOOSE */ * from table(cast(F_GET_SEC_COUPON_OUT_BY_POCKET(aIDPOCKET, aSENDERSYSTEM) as TBL_GET_COUPON_OUT)) order by eventid;

    Для объекта 'vw_INSTRUMENT':

      SELECT /*+ CHOOSE */ * from table(cast(F_GET_INSTRUMENT_OUT_BY_POCKET(aIDPOCKET, aSENDERSYSTEM) as TBL_GET_INSTRUMENT_OUT)) order by eventid;

    Для объекта 'vw_CONTRACT':

      SELECT /*+ CHOOSE */ * from table(cast(F_GET_CONTRACT_OUT_BY_POCKET(aIDPOCKET, aSENDERSYSTEM) as TBL_GET_CONTRACT_OUT)) order by eventid;

    Для объекта 'vw_CUSTOMER':

      SELECT /*+ CHOOSE */ * from table(cast(F_GET_CUSTOMER_OUT_BY_POCKET(aIDPOCKET, aSENDERSYSTEM) as TBL_GET_CUSTOMER_OUT)) order by eventid;

    Для объекта 'vw_USER':

      SELECT /*+ CHOOSE */ * from table(cast(F_GET_USER_OUT_BY_POCKET(aIDPOCKET, aSENDERSYSTEM) as TBL_GET_USER_OUT)) order by eventid;

    Для проверки формирования курсора требуется:

    1. Произвести изменения записи в транспортной таблице, заполнить IDPOCKET и SENDERSYSRTEM. Например IDPOCKET = 888, SENDERSYSTEM = 'NavXLv5'

    2. Выполнить SELECT формирующий курсор с требуемым типом объекта, указав в качестве параметров значения из пункта 1.Например:

    SELECT /*+ CHOOSE */ * from table(cast(F_GET_FX_OUT_BY_POCKET(888, 'NavXLv5') as TBL_GET_FX_OUT)) order by eventid;

    Если этот запрос возвращает данные, то необходимо понять сколько времени уходит на его работу. Для формирования курсора с одной сделкой в пакете, удовлетворительное время работы от 0,0001 сек до 0,001 сек. Время работы запроса превышающие указанные значения является не удовлетворительным. Необходимо выяснить причину неудовлетворительной работы курсора. Если запрос возвращает ошибки, то прикладывайте результаты анализа в задачу, мы вам обязательно поможем. Заводите задачу, прикрепляйте результаты исследований.



  9. Также необходимо проверить текущие настройки временных зон на клиенте и в Базе Данных, например, с помощью следующего запроса:

    BEGIN
       DBMS_OUTPUT.PUT_LINE('Sysdate LOCAL_TZ    ='||TO_CHAR(SYSDATE,'DD.MM.YYYY HH24:MI:SS.SSSSSSSSS'));
       DBMS_OUTPUT.PUT_LINE('Session Timezone    ='||SESSIONTIMEZONE                                              || ' / ' || TZ_OFFSET(SESSIONTIMEZONE));   
       DBMS_OUTPUT.PUT_LINE('Session Timestamp   ='||TO_CHAR(CURRENT_TIMESTAMP,'DD.MM.YYYY HH24:MI:SS.SSSSSSSSS') || ' / ' || CURRENT_TIMESTAMP);
       DBMS_OUTPUT.PUT_LINE('DB Server Timestamp ='||TO_CHAR(SYSTIMESTAMP,'DD.MM.YYYY HH24:MI:SS.SSSSSSSSS')      || ' / ' || SYSTIMESTAMP);
       DBMS_OUTPUT.PUT_LINE('DB Timezone         ='||DBTIMEZONE                                                   || ' / ' || TZ_OFFSET(DBTIMEZONE));
       EXECUTE IMMEDIATE 'ALTER SESSION SET TIME_ZONE=DBTIMEZONE'; 
       DBMS_OUTPUT.PUT_LINE('Sysdate DBTIMEZONE  ='||TO_CHAR(SYSDATE,'DD.MM.YYYY HH24:MI:SS.SSSSSSSSS'));
       DBMS_OUTPUT.PUT_LINE('DB Timestamp        ='||TO_CHAR(CURRENT_TIMESTAMP,'DD.MM.YYYY HH24:MI:SS.SSSSSSSSS') || ' / ' || CURRENT_TIMESTAMP);
       -- Revert session time zone to local setting
       EXECUTE IMMEDIATE 'ALTER SESSION SET TIME_ZONE=LOCAL';
    END;
    /
  10. Прикрепите всю информацию в задачу.

Похожие статьи



Related issues