Как я могу увеличить длину записи переменной длины за пределы 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
    и использовать C fopen() и так далее, чтобы обойти ограничение 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 вы можете использовать сжатие, которое может быть полезным. Большие записи часто имеют высокую степень сжатия. Преимущество сжатия заключается не в экономии места, а в уменьшении ввода-вывода.

Другие вопросы по тегам