310 likes | 668 Views
Разработка ABL приложений с использованием OpenEdge ORACLE DataServer. Сергей Климов SKlimov@bis.ru ЗАО « Банковские информационные системы » ( « БИС » ). Программа. Причины использования OpenEdge DataServer for ORACLE Обзор конфигураций OpenEdge DataServer for ORACLE
E N D
Разработка ABL приложений с использованием OpenEdge ORACLE DataServer Сергей Климов SKlimov@bis.ru ЗАО «Банковские информационные системы» («БИС») Разработка ABL приложений с использованием OpenEdgeORACLE DataServer
Программа • Причины использования OpenEdgeDataServerforORACLE • Обзор конфигураций OpenEdgeDataServerforORACLE • Проблемы миграции и накладываемые ограничения • Секреты и хитрости Разработка ABL приложений с использованием OpenEdgeORACLE DataServer
Причины использования OpenEdgeDataServerforORACLE • ORACLE de facto стандарт промышленной СУБД • ORACLE обладает большим потенциалом для масштабирования приложений: RAC, горизонтальное масштабирование и т.п. Разработка ABL приложений с использованием OpenEdgeORACLE DataServer
Обзор конфигураций OpenEdge • DataServerforORACLE Разработка ABL приложений с использованием OpenEdgeORACLE DataServer
PROGRESS Networking OpenEdge Client PROGRESS Networking OpenEdge DataServer Broker ORACLE DB OpenEdge Client OpenEdge Client OpenEdge Client Разработка ABL приложений с использованием OpenEdgeORACLE DataServer
Преимущества PROGRESS Networking • Универсальность • Простота настройки на некоторых платформах Разработка ABL приложений с использованием OpenEdgeORACLE DataServer
ORACLE Networking OpenEdge Client PROGRESS Networking ORACLE DB OpenEdge Client OpenEdge Client OpenEdge Client Разработка ABL приложений с использованием OpenEdgeORACLE DataServer
Преимущества ORACLE Networking • Производительность • Проста администрирования Разработка ABL приложений с использованием OpenEdgeORACLE DataServer
Проблемы миграции и накладываемые ограничения Разработка ABL приложений с использованием OpenEdgeORACLE DataServer
Проблемы миграции. Данные • Длина символьного поля в PROGRESS 32K в ORACLE 4K (varchar2) • Потенциальный размер записи не может превышать 32К • Отсутствие word-index • Отсутствие массивов • Имя поля в таблице ORACLE 30 байт, в PROGRESS 32 байта • Начальные значения последовательностей положительные Разработка ABL приложений с использованием OpenEdgeORACLE DataServer
Длина символьного поля в PROGRESS 32K в ORACLE 4K • Заменять VARCHAR2 на LONG. Но может быть только один LONG в таблице! • Миграция на CLOB • Менять логику приложения, т.о. чтобы несоздавать строки, превышающие 4K Разработка ABL приложений с использованием OpenEdgeORACLE DataServer
Потенциальный размер записи не может превышать 32К • Уменьшать SQL Width • Замена varchar2 на LONG Разработка ABL приложений с использованием OpenEdgeORACLE DataServer
Отсутствие word-index • Замена CONTAINS на MATCHES. Падение производительности! • Перенос поля с WI в отдельную OpenEdgeтаблицу • Отказ от использования WI Разработка ABL приложений с использованием OpenEdgeORACLE DataServer
Отсутствие массивов • Может приводить к ограничению на размер записи или поля • Может приводить к ограничению на имя поля в таблице ORACLE до 30 байт Разработка ABL приложений с использованием OpenEdgeORACLE DataServer
Проблемы миграции. Данные • Уменьшать наименования полей до 30 байт • Сделать начальные значения последовательностей положительными Разработка ABL приложений с использованием OpenEdgeORACLE DataServer
Проблемы миграции. Код • Отсутствие SHARE-LOCK • Видимость записи при CREATE • Плавающий ROWID • Работа с 2-мя БД: SETUSERID, USERID и т.п. • Отсутствие оператора CURRENT-VALUE Разработка ABL приложений с использованием OpenEdgeORACLE DataServer
Отсутствие SHARE-LOCK • Переработать приложение без SHARE-LOCK • Разработать механизм аналогичный SHARE-LOCK Разработка ABL приложений с использованием OpenEdgeORACLE DataServer
Видимость записи при CREATE • Добавление после CREATE – VALIDATE, RELEASE, ROWID или RECID DO TRANSACTION: CREATE Customer. Customer.Cust-id = 10. ... FIND FIRST Customer WHERE Cust-Id = 10 NO-LOCK NO-ERROR. END. VALIDATE Customer. Разработка ABL приложений с использованием OpenEdgeORACLE DataServer
Плавающий ROWID • Перечитайте ROWID после изменения уникального ключа • Перечитайте ROWID послеотката удаления • Замените ROWID на RECID Разработка ABL приложений с использованием OpenEdgeORACLE DataServer
Проблемы миграции. Код • Функции типа SETUSERID, USERID и CAN-DO должны всегда содержать ссылку на логическую БД • Функция CURRENT-VALUE должна использоваться только после NEXT-VALUE • Оператор CURRENT-VALUE не доступен • Не доступны функции DBTASKID, COUNT-OF Разработка ABL приложений с использованием OpenEdgeORACLE DataServer
Проблемы миграции. Производительность Разработка ABL приложений с использованием OpenEdgeORACLE DataServer
Проблемы миграции. Производительность • Тюнинг клиентских параметров • Тюнинг параметров запроса • Использование «родного» SQL через SEND-SQL-STATEMENT • Использование VIEW • Использование хранимых процедур Разработка ABL приложений с использованием OpenEdgeORACLE DataServer
Секреты и хитрости Разработка ABL приложений с использованием OpenEdgeORACLE DataServer
Клиентские параметры – Dsrvqt_cache_size Записей/ Сек Разработка ABL приложений с использованием OpenEdgeORACLE DataServer
Параметры запроса Записей/ Сек Разработка ABL приложений с использованием OpenEdgeORACLE DataServer
Использование возможностей ORACLE FOREACHacct WHERE acct.acct-cat = "b" AND CAN-DO("40*1", acct.acct) NO-LOCK, LAST acct-pos OF acct NO-LOCK Разработка ABL приложений с использованием OpenEdgeORACLE DataServer
Использование возможностей ORACLE Разработка ABL приложений с использованием OpenEdgeORACLE DataServer
SEND-SQL-STATEMENT САМЫЙ БЫСТРЫЙ ВАРИАНТ RUN STORED-PROC send-sql-statement h1 = PROC-HANDLE NO-ERROR ("select ... "). FOR EACH proc-text-buffer WHERE PROC-HANDLE = h1: ... END. CLOSE STORED-PROC send-sql-statement WHERE PROC-HANDLE = h1. Разработка ABL приложений с использованием OpenEdgeORACLE DataServer
ORACLE VIEW CREATEORREPLACEVIEWlast_acct_posAS SELECT …. Импорт VIEW в схема-холдер FOR EACH last_acct_pos: … END. Разработка ABL приложений с использованием OpenEdgeORACLE DataServer
Хранимые процедуры RUN STORED-PROC newProcAcctPos LOAD-RESULT-INTO tt1 (INPUT "40", INPUT "1", OUTPUT ?). bh = tt1:DEFAULT-BUFFER-HANDLE. CREATE QUERY q. q:SET-BUFFERS (bh). q:QUERY-PREPARE("for each " + tt1:name). q:QUERY-OPEN. Разработка ABL приложений с использованием OpenEdgeORACLE DataServer
СПАСИБО! ВОПРОСЫ? http://www.bis.ru e-mail:info@bis.ru МОСКОВСКИЙ ОФИС: +7 (495) 780 3773 СЕВЕРО-ЗАПАДНЫЙ ОФИС: +7 (812) 320 4908 ПЕНЗЕНСКИЙ ОФИС: +7 (841) 252 0491 Концепция построения ЦАБС QBIS