Я использую сценарий оболочки для извлечения данных из таблицы «extr». Таблица extr - очень большая таблица, имеющая 410 столбцов. В таблице содержится 61047 строк данных. Размер одной записи составляет около 5 КБ.Смещение в столбцах файла спула
I сценарий выглядит следующим образом:
#!/usr/bin/ksh
sqlplus -s \/ << rbb
set pages 0
set head on
set feed off
set num 20
set linesize 32767
set colsep |
set trimspool on
spool extr.csv
select * from extr;
/
spool off
rbb
#-------- END ---------
В один прекрасный день файл extr.csv имел 2 записей с некорректной числом столбцов (то есть одна запись с большим количеством столбцов и других менее). После расследования я узнал, что две повторяющиеся записи были повторены в файле. Первичный ключ записей в идеале должен быть уникальным в файле, но в этом случае повторялись 2 записи. Кроме того, сдвиг в столбцах был резким. Небольшой пример выходного файла:
5001|A1A|AAB|190.00|105|A
5002|A2A|ABB|180.00|200|F
5003|A3A|AAB|153.33|205|R
5004|A4A|ABB|261.50|269|F
5005|A5A|AAB|243.00|258|G
5006|A6A|ABB|147.89|154|H
5003|A7A|AAB|249.67|AAB|153.33|205|R
5004|A8A|269|F
5009|A9A|AAB|368.00|358|S
5010|AAA|ABB|245.71|215|F
Здесь первичный ключ записи для 5003 и 5004 вновь появились на месте 5007 и 5008. Кроме того, дублированные reciords сместились рекорды 5007 и 5008 путем добавления/вырубке их колонны.
Нужна ваша помощь в анализе, почему это произошло? Почему два ряда были извлечены несколько раз? Почему другие 2 строки отсутствовали в файле? Почему записи были сдвинуты? Примечание: этот скрипт работает отлично с последних двух лет и никогда не прерывался, за исключением одного раза (упомянутый выше). Он успешно работал во время следующего прогона. Недавно мы добавили еще одну программу, которая обращается к таблице extr с помощью курсора (только для выбора).
Кто-нибудь запустил сценарий во время первого запуска с использованием того же выходного файла? Был ли раздел с extr.csv полным? Что-то перезапустилось? Что-нибудь странное произошло в окружающей среде? –
В этом случае 5 скриптов запускаются параллельно скриптом-оболочкой. Все сценарии запускаются в фоновом режиме, и оболочка ждет, пока все не будет завершено.3 из 5 - это сценарии оболочки, которые извлекают данные, используя запрос «select», а остальные 2 - программы COBOL. Одна программа COBOL считывает данные из «extr», объявляя курсор на нем. Сценарий оболочки запланирован с использованием планировщика TWS. Никакой другой скрипт не запускался параллельно оболочке. В файловой системе было достаточно места. Ничего не было перезапущено. Окружающая среда была нормальной, и ничего странного не сообщалось в день происшествия. – Sandy
Hi @WalterA Не могли бы вы предоставить некоторые материалы, основанные на моем ответе? – Sandy