Почему передача с ПК на AS400, ASCII FTP приводит к очень большому росту файлов на стороне AS400? - PullRequest
3 голосов
/ 15 июля 2011

ПОДАРОК: Я новичок на платформе AS400, в лучшем случае

ПРОБЛЕМА. Нам необходимо передать файлы ASCII с разделителями по конвейеру переменной ширины с сервера Windows 2003 на FTP-сервер, работающий на V6R1. Файлы прибывают и правильно переводятся в EBCDIC, но они огромны. Файл 3,5 Мб становится участником 200+ Мб. Файл 9Gb не работает, потому что мы сталкиваемся с какой-то квотой.

ИНТЕРЕСНЫЙ ФАКТ: Когда это делается в двоичном режиме (без перевода), файл появляется на стороне сервера как FILENAME.FILE с одним членом с именем FILENAME.MBR. Размер передачи правильный, но файл не читается встроенными инструментами из-за кодировки ASCII.

ИНТЕРЕСНЫЙ ФАКТ: Это было опробовано на трех машинах V6R1 с одинаковыми результатами. Так что я вполне уверен, что это нормальное поведение, которое я просто плохо понимаю.

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

Заранее спасибо всем, кто нашел время, чтобы внести свой вклад. Я ценю это.

Ответы [ 2 ]

6 голосов
/ 15 июля 2011

Сервер IBM i FTP может работать с объектами в «классической» файловой системе QSYS.LIB (где у вас есть такие объекты, как файлы, находящиеся в одном слое библиотек) или потоковыми файлами в интегрированной файловой системе (иерархической).файловая система, аналогичная используемой в Windows и Unix).

Похоже, вы отправляете файл в Physical File (PF) в файловой системе QSYS.LIB.PF имеет записи фиксированной длины, поэтому вы, вероятно, видите некоторое свободное место в конце большинства записей.Вы можете увидеть, сколько записей в PF и длину записи, используя команду DSPFD CL.

Если вы хотите отправить файл в PF, FTP-сервер по умолчанию имеет формат имени 0, которыйфайловая система QSYS.LIB.В этом режиме вы отправляете PF, например, так:

SEND myfile.txt DMCLIB/MYFILE.MYMBR

Если вы хотите отправить файл в потоковый файл, вы должны сначала отправить команду на FTP-сервер:

QUOTE SITE NAMEFMT 1

Переключает FTP-сервер в режим именования IFS.В результате при отправке файла вам нужно будет указать, в какой каталог вы хотите его отправить.Например:

SEND myfile.txt /home/dmc/myfile.txt

Если вы отправляете записи переменной длины, этот файл потока IFS не будет иметь провисания, как вы видите в физическом файле.

Если канал-delimited файл содержит один макет, вы можете использовать команду CPYFRMIMPF CL, чтобы отобразить его в PF с реальным форматом записи, что, вероятно, является более «родным» способом сделать это.Однако, если это более сложный формат файла, вам может потребоваться написать программу ILE RPG, чтобы преобразовать потоковый файл в ту форму, в которой он должен быть. Вот несколько полезных руководств по доступу к потоковым файлам из ILE.RPG.

Также обратите внимание, что вы можете увидеть некоторую интересную справочную информацию с FTP-сервера IBM i с помощью команды QUOTE HELP при подключении из FTP-клиента из командной строки.

3 голосов
/ 15 июля 2011

В AS / 400 доступно множество файловых систем . Стандартная файловая система действительно DB / 2. Библиотека - это база данных / схема, физический файл - это таблица, член - это раздел таблицы , а логический файл - это индекс / представление. IFS - это обычная потоковая файловая система.

В режиме Ascii текст, заканчивающийся символом EOL (CR / LF), сопоставляется с одной записью физического файла. Двоичный режим игнорирует символы EOL и передает столько необработанных данных, сколько поместится в каждой записи. Для получения дополнительной информации см. Справочник по протоколу передачи файлов .

Используйте команду DSPFD для просмотра определения файла. Максимальная длина записи будет указывать размер записи фиксированной длины. Умножьте это на количество загружаемых записей, чтобы рассчитать, сколько места потребуется после загрузки. Скорее всего, «люди среднего звена» создали для вас файл с нелепо длинной записью. Для них должно быть тривиально воссоздать файл с более подходящей длиной записи, чтобы не тратить слишком много места.

При создании файла задано максимальное количество записей, чтобы предотвратить заполнение диска. Вы можете найти эти значения в команде DSPFD как Начальное количество записей , Увеличение количества записей и Максимальное количество приращений . Эти значения можно изменить при необходимости, используя команду CHGPF с параметром SIZE .

Другой вариант - загрузить файл в файловую систему IFS, и «средние люди» обработают файл непосредственно из IFS. Вот учебник Скотта Клемента для Работа с IFS в RPGIV .

...