Задача. Центр начисляет плату за ЖКУ по нескольким районам города, месячные сводки ждут управляющие компании и ресурсники. База на собственной установке Oracle 11g без поддержки производителя. Отчёты считались всю ночь и иногда не успевали к утру, расчёт перезапускали. Экраны операторов в Oracle Forms обросли лишними полями. Ускорить нужно было, не изменив ни одной цифры.
Решение. По планам выполнения нашёл полные просмотры больших таблиц, места без индексов и построчные циклы по тысячам лицевых счетов. Отчёты переписал в пакетах на PL/SQL с массовой обработкой BULK COLLECT и FORALL, общие агрегаты по лицевым счетам считаются один раз, недостающие индексы добавил. Каждый новый отчёт сверял со старым за прошлые месяцы построчно, расхождения из-за округления разобрали с сотрудниками центра. В Oracle Forms упростил поиск счёта, перерасчёт и печать квитанции и добавил проверки ввода. Ночная выгрузка платежей от банков ведёт журнал ошибок с причинами. Все изменения сначала проверял на копии базы, перед выпуском делал резервную копию.
Результат. Сводки готовы к утру с запасом, цифры совпали во всех проверенных месяцах, операторы работают быстрее. Oracle 11g остаётся без поддержки, план перехода подготовлен, решение за заказчиком.
Евгений Росляков, сайты с 2016 года. Работаю как самозанятый по договору, закрывающие документы для юрлиц.