Недавно мне пришлось увеличить объем сценария извлечения данных, и я обнаружил, что в выводе отсутствуют некоторые данные, присутствующие в исходных таблицах. Может кто-нибудь предложить некоторые идеи для того, что может быть причиной этой проблемы?
Фон
Процедура извлечения - это сценарий sql, который я выполняю из клиента sqlplus (работает в Windows Server 2008) и который помещает результаты запроса в выходные файлы.
Извлекаемые данные включают записи клиентов и их записи транзакций. Каждый клиент может иметь несколько сотен записей транзакций каждый месяц. До увеличения нагрузки мы извлекали около 100 тыс. Клиентов за последние 3 месяца транзакций. Это сейчас увеличилось до 1 миллиона. Я ожидаю, что выходной файл будет около 30 ГБ.
Таблица транзакций разбита на месячные разделы. Сценарий извлечения включает в себя отдельный запрос, спулирующий каждый раздел. Казалось, что были выведены первые из трехмесячных транзакций, а 2-й и 3-й месяцы транзакций отсутствовали (хотя журнал процесса показал, что он все еще тратит время на запросы всех разделов).
Некоторый интересный прогресс
Этот сценарий sql вызывается в сценарии perl. Первоначально сценарий sql был запущен за один раз. Я решил разделить sql и вызывать каждый запрос по очереди, и объем вывода увеличился в три раза (примерно до 30 ГБ). Почему это могло случиться? (Это может помочь с реальной проблемой ниже.)
Текущий выпуск
Существует вторая база данных с 5 раз больше клиентов и 2 типа таблиц транзакций, каждая из которых разделена на ежедневные разделы. Таким образом, чтобы извлечь 3 месяца транзакций, скрипт запрашивает 90 разделов на 2 отдельные таблицы. Опять же, данные за 1-й месяц, похоже, были успешно выведены, но 2-й и 3-й месяцы отсутствуют Приведенное выше решение не работает для этой базы данных.
Что еще необычно, так это то, что два файла, выводимые из двух таблиц транзакций, имеют размер почти точно 4 ГБ (4 294 967 362 байта). Может быть, Oracle или что-то еще ограничивает размер извлечения?