Вывод запроса Oracle не завершен при буферизации в файл - PullRequest
3 голосов
/ 14 июля 2011

Недавно мне пришлось увеличить объем сценария извлечения данных, и я обнаружил, что в выводе отсутствуют некоторые данные, присутствующие в исходных таблицах. Может кто-нибудь предложить некоторые идеи для того, что может быть причиной этой проблемы?

Фон

Процедура извлечения - это сценарий 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 или что-то еще ограничивает размер извлечения?

1 Ответ

2 голосов
/ 14 июля 2011

Какая версия Windows и какая файловая система на вашем диске?Из памяти файловая система FAT32 имеет ограничение на размер файла.Думаю, вам нужно NTFS для более 2G (или, может быть, это 4G).Я подозреваю, что вы достигаете этого предела, либо в Windows, либо в самом sqlplus.

Вы можете попробовать сузить его, попробовав

sqlplus > file.txt

, а не команду spool.Если это работает, это похоже на проблему sqlplus.Если это не так, скорее всего, проблема с файловой системой.

...