PSQL 8.6 (8.7) и ODBC по iApplicationKind+ApplicationKey (+)

5 (3)
  • Развернуть PSQL 8.6 (8.7) и ODBC по iApplicationKind+ApplicationKey (+) ( григ  14.10.2005 13:04 )
    3(2)
    Перешли на PSQL 8.6 - в принципе RS-Bank работает нормально. Но вот IBank, юзающий запросы типа select * from "arhdoc_dbt" where iApplicationKind=2 and ApplicationKey='200509010919450001500104' тормозит капитально. И не только он - в контрол-центре Первазива аналогично происходит. Самое смешное - на тестовой базе убрали флаг "N" из ключа, пересоздали arhdoc.dbt, без изменения ddf. Залетало.
    Кто, что может сказать по этому поводу?

    >> Ответить
    • Развернуть Ну это наверное все-же вопросы к БИФИТу, чего он так тормозит (+) ( Шарак Андрей  14.10.2005 15:11 )
      5(1)
      InterBank летает и на всех билдах восьмерки, хотя тут конечно все проще, транзакционное ядро работает.
      Но и новые продукты типа "Экспресс-Кредитование", использующие реляционный доступ к Pervasive (кстати, тоже по JDBC), в том числе и восьмой версии, не тормозит не смотря на все существенные изменения реалиционной части ядра СУБД.
      Может они там чего у себя в коде "накрутили"?
      >> Ответить
      • Развернуть Вряд ли, я же говорю, что обычный запрос в Pervasive Control Center (+) ( григ  17.10.2005 07:36 )
        5(1)
        тоже тормозит - такое впечатление что сам первазив не понимает, что ключ надо брать по указанным в запросе полям, видимо из-за того что ключ с флагом NULL, поэтому перебирает все подряд. Если же пересоздать arhdoc.dbt без флага NULL - все летает.
        Затык видимо в самом первазиве, а не в I-Bank-e и RS-Bank-е.
        Вопрос: как в запросе принудительно заставить 8.6 (8.7) использовать ключ по iApplicationKind + ApplicationKey?
        >> Ответить
    • Развернуть Все верно - не пашет ( Lav  26.10.2005 18:07 )
      5(1)
      Мы несколько месяцев с поддержкой бодались, а те, в свою очередь - с Pervasive'овцами. Pervasive не хочет понимать 6 ключ на arhdoc.dbt по непонятным причинам. Индекс действительно не используется. И у программистов в Bifit (они отчаялись решить проблему), и у поддержки RS (они тоже не нашли общий язык с Pervasive, которые затребовали денег для консультации такого уровня! :)))). Так что могу в некоторой степени официально заявить, что рекламируемый на всех углах SQL-доступ к базе RS в общем случае не работает. Тем более, малину портит неиспользование центрового индекса на самой большой таблице.

      Алилуйя.
      >> Ответить
    • Развернуть PSQL sp3 ( Lav  27.10.2005 17:28 )
      5(1)
      Немного не по теме.. А вы на 8.7 перешли? Если да, то каковы успехи?
      >> Ответить
    • Развернуть Не было проблем с РС-Банком после такого хака? ( sokols  15.01.2013 10:13 )
      5(1)
      Not specified
      >> Ответить
    • Развернуть Проблема не решается без организационных мер со стороны R-Style ( Lav  30.01.2013 13:34 )
      5(2)
      Сразу оговорюсь: приведенные ниже решения найдены на просторах интернета, и я не несу никакой ответственности за последствия их применения.
      Суть проблемы: поля в рассматриваемом индексе (iApplicationKind, ApplicationKey) помечены как Nullable. В теории реляционных СУБД null-значения указывают на отсутствие чего бы то ни было, поэтому Brtieve'овские null-ключи не проецируются на PSQL-движок. Таким образом, если бы Pervasive SQL использовал такой индекс при построении плана выполнения запроса, то строки с null в этих полях никогда не попали бы в выборку.
      Предлагаемое разработчиками PervasiveSQL решение не документировано, и его поддержка не декларирована для будущих версий СУБД. Чтобы задействовать "Btrieve null key" SQL-движком, нужно сделать настройку в реестре:
      [HKEY_LOCAL_MACHINE\SOFTWARE\Pervasive Software\SQL Relational Engine]
      "UseBtrieveExcludeNullKey"="YES"
      Но нужно помнить, что настройка влияет на весь PSQL-движок и может привести к описанной выше проблеме (исчезнувшим из выборки строкам).
      Чит проверен на версии 9.5 - индекс используется.
      И раз уж пошла речь о читах горячо любимого PervasiveSQL, вброшу еще один:
      "HKLM\Software\Pervasive Software\Utilities Interface\Settings\Restricted Access on WTS Client
      Change the value from 1 (Restricted) to 0 (unrestricted), and ANYONE accessing the server via RP will be able to administer the database."
      (кому нужно, тот поймет)
      Теперь про организационные меры. На мой взгляд, R-Style должен был догадаться о необходимости первичного ключа на таблицах много лет назад. Особенно это касается arhdoc%. Нужно планово простимулировать клиентов, у которых в этих таблицах бардак, разгрести завалы и сделать нормальный PK на столбце ApplicationKey. iApplicationKind убрать из этого индекса, поскольку селективность этого поля настолько мала, что участие его в индексе, а тем более впереди ApplicationKey, не имеет смысла, плюс очень прилично портит многим людям жизнь.
      А по-хорошему - сделать все индексы подлежащими использованию в PSQL и исправить все значения полей, которые не способны оказаться в выборке с помощью PSQL (некорректные даты и т.п.).
      >> Ответить
      • Развернуть Насколько я понимаю, включение данной настройки конкретно для работы РС-Банка ничем не чревато? ( Волшебник  18.02.2013 10:39 )
        5(1)
        Вроде бы он не использует реляционное ядро? Или я ошибаюсь?
        >> Ответить
        • Развернуть к RS-Bank'у эта ветка имеет косвенное отношение ( Lav  18.02.2013 11:02 )
          5(1)
          Если используется только RS-Bank, то эта ветка неактуальна.
          А если в базу пишут "со стороны" через ODBC/JDBC и т.п., то эффект зависит от содержимого таблиц.
          >> Ответить
          • Развернуть ну кроме бифита больше никто через odbc/jdbc в базу не лезет точно ( Волшебник  18.02.2013 11:05 )
            5(1)
            Значит можно поставить.
            Кстати на 10.10.125.000 не проверяли работоспособность?
            >> Ответить
            • Развернуть лезет ( Lav  18.02.2013 11:17 )
              5(1)
              Кроме бифита многие лезут точно. Правда, из-за суровой корявости psql ждать от него больше, чем простую выборку, не приходится,
              но MS SQL + linked server к PervasiveSQL позволяют в течение нескольких минут производить довольно сложный анализ и получать всевозможные отчеты,
              на реализацию которых с помощью RSL ушло бы многократно больше времени (а многие подобные задачи вообще одноразовые).

              ЗЫ 10.10 не тестировали
              >> Ответить
            • Развернуть нас БИФИТ тоже сюда перенаправил ( p2p  07.02.2014 15:29 )
              5(1)
              типа отзыв в БИФИТ у нас убивает мощный сервак потому что у нас рсбанк не правильный.

              только вот вопрос - нахрена отзыву платежки клиента лезть в архдок?
              БИФИТу озвучиваю - а им что в лоб что по лбу.


              ну ладно - если их не переубедить - попробую по этой инструкции сделать.

              значит что нужно сделать?
              1) включить в первасиве "UseBtrieveExcludeNullKey"="YES", ладно включим. раньше у меня без бифита вообще "Pervasive.SQL (relational)" как сервис был выключен.
              2) (кому нужно, тот поймет) - не понял, ну да ладно
              3) про организационные вопросы рсбанка, не понял как нужно организоваться клиентам?
              п. 2 и 3 - обязательны?
              >> Ответить
              • Развернуть Бифит не за отзывом лезет, а за синхронизацией. ( Ltybc  07.02.2014 17:10 )
                5(1)
                Для каждого поручения у себя в базе - залазит в RS и смотрим, что там с ним.
                А раз у вас глубина синхронизации дней десять, то и лезть в архивные приходится.
                >> Ответить
                • Развернуть смысл лезть в архив??+ ( p2p  04.04.2014 12:33 )
                  5(1)
                  все равно отложить и удалить не сможет.
                  достаточно если в postdoc нету - выдать сообщение что не могу отозвать так как уже платеж проведен.

                  >> Ответить
                  • Развернуть ура, мы сделали это - рс поддержка все таки лучшие ( p2p  07.04.2014 17:55 )
                    5(1)
                    всем спасибо. с помощью этой ветки и поддержки рс.

                    бифиту - позор, с его поддержкой по емайлу.

                    и так не получили внятного ответа - зачем бифиту для отзыва лезть в архив!!
                    >> Ответить
                    • Развернуть Хочу уточнить ( Vado  08.04.2014 11:01 )
                      5(1)
                      Вы победили только отзыв документа или вставку УИН в ofkntinf.dbt при выгрузки платежки тоже?
                      Если и УИН выгружается то как победили?
                      >> Ответить
                      • Развернуть да, УИН тоже ( p2p  08.04.2014 11:32 )
                        5(1)
                        бифит от балды генерит поле Identifier, но в таблицу ofkntinf.dbt запись вставляет.

                        я потом зашел в рс, на тестовой платежке, которую сделал через бифит - руками завел тот же УИН и сравнил две записи - по полю Identifier - сделал чтоб бифит генерил по шаблону рс - добавил еще один нуль.
                        теперь УИНы выгружаются. правда у нас все с нулями пока идут.
                        >> Ответить
                        • Развернуть Правильно понимаю ( Vado  08.04.2014 11:37 )
                          5(1)
                          что пересоздание arhdoc.dbt без ключа N помогло и в выгрузке УИН или для этого еще что-то докручивали в RS-е?
                          И еще приведите плиз ваш кусок payment.bsh по заполнению ApplicationKey.
                          >> Ответить
                          • Развернуть не знаю как помогло пересоздание архдока выгрузке УИНов - связи не вижу ( p2p  08.04.2014 12:56 )
                            5(1)
                            хотя она есть видимо - потому как включал когда выгрузку УИН на дистрибутивном архдоке - рс вешался.
                            пересоздали архдок - заработал отзыв и заработали УИНы.

                            ничо сверестесвенного в моих bsh нету:
                                //Заполнение ApplicationKey и iApplicationKind
                                SimpleDateFormat sdfk = new SimpleDateFormat("yyyyMMddHHmmss");
                                String s = sdfk.format (new Date());
                                String zero="00000000000000000000";
                                Long absDocID=lib.getABSDocId();
                                int ind = zero.length()-(s+absDocID).length();
                                String key=s + zero.substring(0, ind) + absDocID;
                                payment.setField("ApplicationKey",key);
                                payment.setField("iApplicationKind","8");
                                String PayerAcc = content.getValueByName("PAYER_ACCOUNT");
                            	if (PayerAcc.substring(9, 12) == "036") { 
                            	payment.setField("Number_Pack", "884");
                            	} else {
                            	payment.setField("Number_Pack", "883");
                            	}             
                            

                            и вот от ok...dbt

                            RSDocumentContent transform() {
                            
                                RSDocumentContent payment = new RSDocumentContent();
                            
                                DocumentContent content = document.getContent();
                            
                                payment.setField("UIN", content.getValueByName("CODE"));
                            
                                String idPrefix = "000000000010000000";
                            
                                String id = idPrefix + bshAppContainer.getiApplicationKind() + bshAppContainer.getApplicationKey();
                            
                                payment.setField("Identifier", id);
                            
                                return payment;
                            }
                            
                            

                            >> Ответить
                            • Развернуть Эх, чуда не случилось (( ( Vado  08.04.2014 18:58 )
                              5(1)
                              Убрал N из ключа в arhdoc, пересоздал его, пересоздал ddf-ы.
                              Попробовал выгрузить тестовую платежку с УИН-ом из Ibank и первасив умер, а в лог-е unload.log
                               
                              2014-04-08 18:51:32,368 [main] DEBUG - Запрос сформирован
                              2014-04-08 18:51:32,378 [main] DEBUG - Начало сбора мета информации о таблице ofkntinf
                              2014-04-08 18:51:32,417 [main] INFO  - Тело запроса пусто
                              2014-04-08 18:51:34,276 [main] ERROR - Ошибка при выгрузке документов
                              java.sql.SQLException: java.io.IOException: LNA session closed
                              	at com.pervasive.jdbc.lna.LNAConnection.setConnOpt(Unknown Source)
                              	at com.pervasive.jdbc.lna.ConnectionOptions.setAutoCommit(Unknown Source)
                              	at com.pervasive.jdbc.v2.Connection.setAutoCommit(Unknown Source)
                              	at org.apache.commons.dbcp.DelegatingConnection.setAutoCommit(DelegatingConnection.java:331)
                              	at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.setAutoCommit(PoolingDataSource.java:317)
                              	at com.bifit.converter.rsbank.core.NRSLibrary.closeTransaction(NRSLibrary.java:244)
                              	at com.bifit.converter.rsbank.NUnloader.saveDocumentToRsBank(NUnloader.java:443)
                              	at com.bifit.converter.rsbank.NUnloader.unloadDocs(NUnloader.java:248)
                              	at com.bifit.converter.rsbank.NUnloader.doWork(NUnloader.java:147)
                              	at com.bifit.converter.rsbank.NUnloader.main(NUnloader.java:619)
                              


                              >> Ответить
                              • Развернуть Такая же х...ня... ( Волшебник  09.04.2014 01:42 )
                                5(1)
                                правда еще не ковырялись с пересозданием архдока
                                >> Ответить
                              • Развернуть Эх, чуда не случилось (( ( nlws  09.04.2014 09:31 )
                                5(1)
                                Вот еще что сказал бифит сделать.
                                В tables.xml

                                Добавить или заменить.
                                             <document type="payment" rstable="postdoc_dbt">
                                                 <tables>
                                                     <table columns="UIN:12, Identifier:12">ofkntinf_dbt</table>
                                                 </tables>
                                             </document>
                                
                                Попросили еще переименовать файл для уинов(bsh) в payment_ofkntinf_dbt.bsh
                                И сделать его таким. Маску бифит сказал сделать вот такой "00000000001000000";, но p2p определил, что надо больше нулей(после "1") и правильнее так "000000000010000000";

                                DocumentContent transform() {
                                
                                    RSDocumentContent payment = new RSDocumentContent();
                                
                                    DocumentContent content = document.getContent();
                                
                                    payment.setField("UIN", content.getValueByName("CODE"));
                                
                                    String idPrefix = "000000000010000000";
                                
                                    String id = idPrefix + bshAppContainer.getiApplicationKind() + bshAppContainer.getApplicationKey();
                                
                                    payment.setField("Identifier", id);
                                
                                    return payment;
                                }
                                

                                >> Ответить
                        • Развернуть Нас тоже интересует, так как у нас шлюз тупо вешается при попытке что-то записать в базу УИН-ов ( Волшебник  08.04.2014 11:40 )
                          5(1)
                          Причем вешается вместе с первазивом.
                          >> Ответить