Памяти не хватает, потому что параметры системы, например roll_area у вас выставлены соответствующим образом. В данном конкретном случае вам не хватило ~3Мб.
Что можно сделать, если никак не изменить параметры? Потреблять меньше памяти. В частности, под внутренние таблицы.
К сожалению, очень мало информации. Стоило бы обратить внимание на lt_dso. Возможно, стоит проанализировать ее структуру и оставить там только реально необходимые поля, select * заменить на список полей.
Посмотрите where-условие. В DSO, из активной таблицы которого идет чтение данных, ключ специфицирован полностью? Положительный ответ гарантирует, что записей в результате запроса будет не больше, чем в source_package.
Также проверьте перед этим оператором select никакие внутренние таблицы больше не заполняются и не определяются ли с тысячами записей в подпрограмме запуска?
Попробуйте ради эксперимента удалить перед селектом записи в source_package, оставив 100, например. Потом постепенно увеличивая количество записей. Так опытным путем найдете количество записей при которых система не падает.
И еще select single вам в помощь. Скорость загрузки потеряете, но зато с памятью будет все ok.
