Как я могу увеличить длину записи переменной длины за пределы 32760?
Максимальная длина записи для записей QSAM переменной длины составляет 32 760 байт.
Текущая длина записи нашего файла в порядке, но для получения дополнительной информации нам нужно расширить этот файл, длина которого превышает 32 КБ (LRECL
> 32760).
Разделение записи не является хорошим вариантом для нас, поскольку это повлияет на нашу существующую систему.
Я не уверен, что с помощью SPANNED
записи с VSAM вот решат эту проблему.
//DEFINE EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=A
//SYSIN DD *
DEFINE CLUSTER (NAME(dsname.K1719) INDEXED VOLUMES(xxxxxx) -
TRACKS(1) KEYS(17 19) RECORDSIZE(40 110) SPANNED) -
DATA (NAME(dsname.K1719.DATA)) INDEX (NAME(dsname.K1719.INDEX))
/*
//
Это решит нашу проблему?
2 ответа
Если вы используете файлы системных служб Unix, на вас не распространяется ограничение 32K на LRECL. Есть последующие эффекты.
- Если вы используете COBOL для обработки файла, вы можете использовать LINE SEQUENTIAL в предложении ORGANIZATION, но тогда вы ограничены 1M LRECL.
- Если вы используете COBOL для обработки файла, вы можете отказаться от ввода-вывода COBOL
и использовать Cfopen()
и так далее, чтобы обойти ограничение 1M LRECL, упомянутое выше, но затем вы добавляете что-то немного постороннее к предположительно гипотетическому приложению COBOL. C не будет проблем с такими файлами, я не могу говорить с PL / I. - Не все DFSMS и сторонние утилиты полностью осознают файлы системных служб Unix.
- Конструкции JCL для файлов системных служб Unix имеют сравнительно короткую кривую обучения, но требуется немного обучения.
- Файлы безопасности для системных служб Unix могут быть неудобны для вашего администратора безопасности. Вы можете столкнуться с необходимостью настроить списки контроля доступа через
setfacl
и другие новые концепции.
@cschneid ответ интересный.
Не зная больше о файле / приложении, трудно дать конкретные ответы. Ниже приведены идеи, которые могут быть полезны.
Вы могли бы:
- разбить тетрадь на несколько подзаписей
- добавить дополнительный байт к ключу
так вместо того, чтобы
<key><a record>
вам придется
<key><sub-key-1><part-1-of-record>
<key><sub-key-2><part-2-of-record>
<key><sub-key-3><part-3-of-record>
...
Если у вас есть одна программа File-Driver, которая взаимодействует с файлом, вы можете скрыть детали того, как данные хранятся в вашем приложении. Таким образом, вы можете иметь несколько физических записей для каждой логической записи, и ваше приложение не должно знать об этом. Вы также можете иметь несколько файлов, если вам нужно
Помните, что в конце новой тетради вы можете добавить место, которое не нужно хранить в файле. Это удобно, когда вам нужно добавить поля в файл - можно сохранить перекомпиляцию множества программ
Содержит ли файл логически разные данные (например, продажи, заказы и т. Д.), Каждая программа, которая обращается к файлу, использует всю запись???
Если это так, вы можете добавить тип запроса к вызову File-Driver-Program:
Call "FilePgm" using GET-ORDER Order-Copybook
or
Call "FilePgm" using GET-SALES Sales-Copybook
or
Call "FilePgm" using GET-EVERYTHING Everything-Copybook
Преимущество наличия нескольких типов вызовов / копировальных книг состоит в том, что если изменяется Order-Copybook, программы, использующие только Sales-Copybook , не нужно перекомпилировать, и наоборот. Это облегчит изменение файла в будущем.
Наконец есть вариант базы данных!!! либо
- полное переписывание
или использование двоичных объектов. Они имеют ограничение 2 ГБ для двоичных двоичных объектов
С DB2 вы можете использовать сжатие, которое может быть полезным. Большие записи часто имеют высокую степень сжатия. Преимущество сжатия заключается не в экономии места, а в уменьшении ввода-вывода.