VSAM - Краткое руководство
Метод доступа к виртуальному хранилищу (VSAM) - это высокопроизводительный метод доступа и организация набора данных, который организует и поддерживает данные через структуру каталога. Он использует концепцию виртуального хранилища и может защищать наборы данных на различных уровнях с помощью паролей. VSAM можно использовать в программах на языке COBOL как физические последовательные файлы. VSAM - это логические наборы данных для хранения записей. Файлы можно читать в VSAM последовательно и произвольно. Это улучшенный способ хранения данных, который преодолевает некоторые ограничения традиционных файловых систем, таких как последовательные файлы.
Характеристики VSAM
Ниже приведены характеристики VSAM -
VSAM защищает данные от несанкционированного доступа с помощью паролей.
VSAM обеспечивает быстрый доступ к наборам данных.
VSAM имеет параметры для оптимизации производительности.
VSAM позволяет обмениваться набором данных как в пакетной, так и в интерактивной среде.
VSAM более структурирован и организован в хранении данных.
Свободное пространство автоматически повторно используется в файлах VSAM.
Ограничения VSAM
Единственное ограничение VSAM заключается в том, что его нельзя хранить на томе TAPE. Он всегда хранится в пространстве DASD. Для хранения данных требуется несколько цилиндров, что нерентабельно.
VSAM состоит из следующих компонентов -
- Кластер VSAM
- Зона управления
- Контрольный интервал
Кластер VSAM
VSAM - это логические наборы данных для хранения записей, известные как кластеры. Кластер - это ассоциация индекса, набора последовательностей и частей набора данных. Пространство, занимаемое кластером VSAM, разделено на смежные области, называемые контрольными интервалами. Мы обсудим контрольные интервалы позже в этом модуле.
В кластере VSAM есть два основных компонента:
Index Componentсодержит индексную часть. Записи индекса присутствуют в компоненте индекса. Используя компонент индекса, VSAM может извлекать записи из компонента данных.
Data Componentсодержит часть данных. Фактические записи данных присутствуют в компоненте «Данные».
Контрольный интервал
Интервалы управления (CI) в VSAM эквивалентны блокам для наборов данных, отличных от VSAM. В методах, отличных от VSAM, единица данных определяется блоком. VSAM работает с логической областью данных, известной как контрольные интервалы.
Интервалы управления - это наименьшая единица передачи данных между диском и операционной системой. Всякий раз, когда запись извлекается непосредственно из хранилища, весь CI, содержащий запись, считывается в буфер ввода-вывода VSAM. Затем нужная запись переносится в рабочую область из буфера VSAM.
Интервал управления состоит из -
- Логические записи
- Поля контрольной информации
- Свободное место
Когда загружается набор данных VSAM, создаются контрольные интервалы. Размер контрольного интервала по умолчанию составляет 4 Кбайт и может увеличиваться до 32 Кбайт.
Анализ контрольного интервала
Ниже приводится описание терминов, используемых в вышеуказанной программе.
R1..R5 - Записи, хранящиеся в Control Interval.
FS - ФС - это свободное пространство, которое можно использовать для дальнейшего расширения набора данных.
RDF- RDF известен как поля определения записи. RDF имеет длину 3 байта. Он описывает длину записей и сообщает, сколько смежных записей имеют одинаковую длину.
CIDF- CIDF известен как поля определения контрольных интервалов. CIDF имеют длину 4 байта и содержат информацию об интервале управления.
Зона управления
Контрольная зона (CA) формируется путем объединения двух или более контрольных интервалов. Набор данных VSAM состоит из одной или нескольких контрольных областей. Размер VSAM всегда кратен его контрольной области. Файлы VSAM расширяются в единицах контрольных областей.
Ниже приведен пример области управления -
Кластер VSAM определяется в JCL. JCL используетIDCAMSутилита для создания кластера. IDCAMS - это утилита, разработанная IBM для служб методов доступа. Он используется в первую очередь для определения наборов данных VSAM.
Определение кластера
В следующем синтаксисе показаны основные параметры, сгруппированные в Define Cluster, Data и Index.
.DEFINE CLUSTER (NAME(vsam-file-name) -
BLOCKS(number) -
VOLUMES(volume-serial) -
[INDEXED / NONINDEXED / NUMBERED / LINEAR] -
RECSZ(average maximum) -
[FREESPACE(CI-Percentage,CA-Percentage)] -
CISZ(number) -
[KEYS(length offset)] -
[READPW(password)] -
[FOR(days)|TO(date)] -
[UPDATEPW(password)] -
[REUSE / NOREUSE] ) -
DATA -
(NAME(vsam-file-name.data)) -
INDEX -
(NAME(vsam-file-name.index)) -
CATALOG(catalog-name[/password]))
Параметры на уровне КЛАСТЕРА применяются ко всему кластеру. Параметры на уровне DATA или INDEX применяются только к компоненту данных или индекса.
Мы подробно обсудим каждый параметр в следующей таблице -
Старший Нет | Параметры с описанием |
---|---|
1 | DEFINE CLUSTER Команда Define Cluster используется для определения кластера и указания атрибутов параметров для кластера и его компонентов. |
2 | NAME NAME указывает имя файла VSAM, для которого мы определяем кластер. |
3 | BLOCKS Blocks указывает количество блоков, назначенных для кластера. |
4 | VOLUMES Тома указывает один или несколько томов, которые будут содержать кластер или компонент. |
5 | INDEXED / NONINDEXED / NUMBERED / LINEAR Этот параметр может принимать три значения INDEXED, NONINDEXED или NUMBERED в зависимости от типа создаваемого набора данных. Для файлов с последовательностью ключей (KSDS) используется опция INDEXED. Для файлов с последовательной записью (ESDS) используется опция NONINDEXED. Для файлов с относительной записью (RRDS) требуется НОМЕРНЫЙ параметр. Для линейных (LDS) файлов требуется опция LINEAR. По умолчанию этот параметр имеет значение INDEXED. Мы обсудим больше о KSDS, ESDS, RRDS и LDS в следующих модулях. |
6 | RECSZ Параметр «Размер записи» имеет два значения: средний и максимальный размер записи. Среднее значение определяет среднюю длину логических записей в файле, а максимальное - длину записей. |
7 | FREESPACE Freespace указывает процент свободного пространства, резервируемого для интервалов управления (CI) и областей управления (CA) компонента данных. Значение по умолчанию для этого параметра - ноль процентов. |
8 | CISZ CISZ известен как размер контрольного интервала. Он определяет размер контрольных интервалов. |
9 | KEYS Параметр ключей определяется только в файлах с последовательностью ключей (KSDS). Он определяет длину и смещение первичного ключа от первого столбца. Диапазон значений этого параметра от 1 до 255 байт. |
10 | READPW Значение параметра READPW указывает пароль уровня чтения. |
11 | FOR/TO Значение этого параметра указывает количество времени с точки зрения даты и дней для хранения файла. Значение по умолчанию для этого параметра - ноль дней. |
12 | UPDATEPW Значение в параметре UPDATEPW указывает пароль уровня обновления. |
13 | REUSE / NOREUSE Параметр REUSE позволяет определять кластеры, которые могут быть сброшены в пустой статус без их удаления и повторного определения. |
14 | DATA - NAME Часть кластера DATA содержит имя набора данных, который содержит фактические данные файла. |
15 | INDEX-NAME Часть кластера INDEX содержит первичный ключ и указатель памяти для соответствующей записи в части данных. Он определяется, когда используется кластер с последовательностью ключей. |
16 | CATALOG Параметр каталога обозначает каталог, в котором будет определен файл. О каталоге мы поговорим отдельно в следующих модулях. |
пример
Ниже приведен базовый пример, показывающий, как определить кластер в JCL.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
DEFINE CLUSTER (NAME(MY.VSAM.KSDSFILE) -
INDEXED -
RECSZ(80 80) -
TRACKS(1,1) -
KEYS(5 0) -
CISZ(4096) -
FREESPACE(3 3) ) -
DATA (NAME(MY.VSAM.KSDSFILE.DATA)) -
INDEX (NAME(MY.VSAM.KSDSFILE.INDEX))
/*
Если вы выполните указанный выше JCL на сервере мэйнфреймов. Он должен выполняться с MAXCC = 0, и он создаст файл VSAM MY.VSAM.KSDSFILE.
Удаление кластера
Чтобы удалить файл VSAM, необходимо удалить кластер VSAM с помощью утилиты IDCAMS. Команда DELETE удаляет запись о кластере VSAM из каталога и, при необходимости, удаляет файл, освобождая тем самым пространство, занимаемое объектом. Если срок действия набора данных VSAM не истек, он не будет удален. Чтобы удалить такие типы наборов данных, используйте опцию ОЧИСТКА.
DELETE data-set-name CLUSTER
[ERASE / NOERASE]
[FORCE / NOFORCE]
[PURGE / NOPURGE]
[SCRATCH / NOSCRATCH]
Синтаксис выше показывает параметры, которые мы можем использовать с оператором Delete. Мы подробно обсудим каждый из них в следующей таблице -
Старший Нет | Параметры с описанием |
---|---|
1 | ERASE / NOERASE Параметр ERASE указан для переопределения атрибута ERASE, указанного для объекта в каталоге. По умолчанию выбрана опция NOERASE. |
2 | FORCE / NOFORCE Опция FORCE указана для удаления ПРОБЕЛ и USERCATALOG, даже если они не пусты. По умолчанию выбрана опция NOFORCE. |
3 | PURGE / NOPURGE Параметр PURGE используется для удаления набора данных VSAM, если срок действия набора данных не истек. По умолчанию выбрана опция NOPURGE. |
4 | SCRATCH / NOSCRATCH Параметр SCRATCH используется для удаления связанной записи для объекта из таблицы содержания тома. Он в основном используется для наборов данных, отличных от vsam, таких как GDG. По умолчанию выбрана опция NOSCRATCH. |
пример
Ниже приведен базовый пример, показывающий, как удалить кластер в JCL.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEPNAME EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
DELETE MY.VSAM.KSDSFILE CLUSTER
PURGE
/*
Если вы выполните указанный выше JCL на сервере мэйнфреймов. Он должен выполняться с MAXCC = 0, и он удалит файл VSAM MY.VSAM.KSDSFILE.
ESDS известен как набор данных с последовательным вводом. Набор данных с последовательным входом ведет себя как последовательная файловая организация с некоторыми дополнительными функциями. Мы можем получить доступ к записям напрямую, а также в целях безопасности можем использовать пароли. Мы должны кодироватьNONINDEXEDвнутри команды DEFINE CLUSTER для наборов данных ESDS. Ниже приведены ключевые особенности ESDS:
Записи в кластере ESDS хранятся в том порядке, в котором они были вставлены в набор данных.
На записи ссылаются по физическому адресу, который известен как Relative Byte Address (RBA). Предположим, что если в наборе данных ESDS у нас есть 80-байтовые записи, RBA первой записи будет 0, RBA для второй записи будет 80, для третьей записи будет 160 и так далее.
Доступ к записям можно получить последовательно с помощью RBA, известного как addressed access.
Записи хранятся в том порядке, в котором они были вставлены. Новые записи вставляются в конце.
Удаление записей в наборе данных ESDS невозможно. Но их можно пометить как неактивные.
Записи в наборе данных ESDS могут быть фиксированной или переменной длины.
ESDS не индексируется. Ключи отсутствуют в наборе данных ESDS, поэтому он может содержать повторяющиеся записи.
ESDS можно использовать в программах на языке COBOL, как и любой другой файл. Мы укажем имя файла в JCL, и мы сможем использовать файл ESDS для обработки внутри программы. В программе COBOL укажите файловую организацию какSequential и режим доступа как Sequential с набором данных ESDS.
Определение кластера ESDS
Следующий синтаксис показывает, какие параметры мы можем использовать при создании кластера ESDS. Описание параметра остается таким же, как указано в модуле VSAM - Cluster.
DEFINE CLUSTER (NAME(esds-file-name) -
BLOCKS(number) -
VOLUMES(volume-serial) -
NONINDEXED -
RECSZ(average maximum) -
[FREESPACE(CI-Percentage,CA-Percentage)] -
CISZ(number) -
[READPW(password)] -
[FOR(days)|TO(date)] -
[UPDATEPW(password)] -
[REUSE / NOREUSE]) -
DATA -
(NAME(esds-file-name.data))
пример
В следующем примере показано, как создать кластер ESDS в JCL с помощью утилиты IDCAMS.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
DEFINE CLUSTER (NAME(MY.VSAM.ESDSFILE) -
NONINDEXED -
RECSZ(80 80) -
TRACKS(1,1) -
CISZ(4096) -
FREESPACE(3 3) ) -
DATA (NAME(MY.VSAM.ESDSFILE.DATA))
/*
Если вы выполните указанный выше JCL на сервере мэйнфреймов. Он должен выполняться с MAXCC = 0, и он создаст файл VSAM MY.VSAM.ESDSFILE.
Удаление кластера ESDS
Кластер ESDS удаляется с помощью утилиты IDCAMS. Команда DELETE удаляет запись о кластере VSAM из каталога и, при необходимости, удаляет файл, освобождая тем самым пространство, занимаемое объектом.
DELETE data-set-name CLUSTER
[ERASE / NOERASE]
[FORCE / NOFORCE]
[PURGE / NOPURGE]
[SCRATCH / NOSCRATCH]
Синтаксис выше показывает, какие параметры мы можем использовать при удалении кластера ESDS. Описание параметра остается таким же, как указано в модуле VSAM - Cluster.
пример
В следующем примере показано, как удалить кластер ESDS в JCL с помощью утилиты IDCAMS.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEPNAME EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
DELETE MY.VSAM.ESDSFILE CLUSTER
/*
Если вы выполните указанный выше JCL на сервере мэйнфреймов. Он должен выполняться с MAXCC = 0, и он удалит кластер VSAM MY.VSAM.ESDSFILE.
KSDS известен как набор данных с последовательностью ключей. Набор данных с последовательностью ключей (KSDS) сложнее ESDS и RRDS, но более полезен и универсален. Мы должны кодироватьINDEXEDвнутри команды DEFINE CLUSTER для наборов данных KSDS. Кластер KSDS состоит из следующих двух компонентов -
Index- Компонент индекса кластера KSDS содержит список значений ключей для записей в кластере с указателями на соответствующие записи в компоненте данных. Компонент индекса относится к физическому адресу записи KSDS. Это связывает ключ каждой записи с относительным положением записи в наборе данных. Когда запись добавляется или удаляется, этот индекс соответственно обновляется.
Data- Компонент данных кластера KSDS содержит актуальные данные. Каждая запись в компоненте данных кластера KSDS содержит ключевое поле с одинаковым количеством символов и занимает одинаковую относительную позицию в каждой записи.
Ниже приведены ключевые особенности KSDS -
Записи в наборе данных KSDS всегда отсортированы по ключевому полю. Записи хранятся в возрастающей последовательности с сортировкой по ключам.
Доступ к записям можно получить последовательно, а также возможен прямой доступ.
Записи идентифицируются с помощью ключа. Ключ каждой записи - это поле в заранее определенной позиции внутри записи. Каждый ключ должен быть уникальным в наборе данных KSDS. Так что дублирование записей невозможно.
Когда вставляются новые записи, логический порядок записей зависит от последовательности сортировки ключевого поля.
Записи в наборе данных KSDS могут быть фиксированной или переменной длины.
KSDS можно использовать в COBOLпрограммы, как и любой другой файл. Мы укажем имя файла в JCL, и мы можем использовать файл KSDS для обработки внутри программы. В программе COBOL укажите файловую организацию какIndexed и вы можете использовать любой режим доступа (Sequential, Random or Dynamic) с набором данных KSDS.
Файловая структура KSDS
Чтобы найти конкретную запись, мы даем уникальное значение ключа. Значение ключа ищется в компоненте индекса. Как только ключ найден, извлекается соответствующий адрес памяти, который относится к компоненту данных. Из адреса памяти мы можем извлечь фактические данные, которые хранятся в компоненте данных. В следующем примере показана базовая структура индекса и файла данных -
Определение кластера KSDS
Следующий синтаксис показывает, какие параметры мы можем использовать при создании кластера KSDS.
Описание параметра остается таким же, как указано в модуле VSAM - Cluster.
DEFINE CLUSTER (NAME(ksds-file-name) -
BLOCKS(number) -
VOLUMES(volume-serial) -
INDEXED -
KEYS(length offset) -
RECSZ(average maximum) -
[FREESPACE(CI-Percentage,CA-Percentage)] -
CISZ(number) -
[READPW(password)] -
[FOR(days)|TO(date)] -
[UPDATEPW(password)] -
[REUSE / NOREUSE]) -
DATA -
(NAME(ksds-file-name.data)) -
INDEX -
(NAME(ksds-file-name.index))
пример
В следующем примере показано, как создать кластер KSDS в JCL с помощью утилиты IDCAMS.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
DEFINE CLUSTER (NAME(MY.VSAM.KSDSFILE) -
INDEXED -
KEYS(6 1) -
RECSZ(80 80) -
TRACKS(1,1) -
CISZ(4096) -
FREESPACE(3 3) ) -
DATA (NAME(MY.VSAM.KSDSFILE.DATA)) -
INDEX (NAME(MY.VSAM.KSDSFILE.INDEX)) -
/*
Если вы выполните указанный выше JCL на сервере мэйнфреймов. Он должен выполняться с MAXCC = 0, и он создаст файл VSAM MY.VSAM.KSDSFILE.
Удаление кластера KSDS
Кластер KSDS удаляется с помощью утилиты IDCAMS. Команда DELETE удаляет запись о кластере VSAM из каталога и, при необходимости, удаляет файл, освобождая тем самым пространство, занимаемое объектом.
DELETE data-set-name CLUSTER
[ERASE / NOERASE]
[FORCE / NOFORCE]
[PURGE / NOPURGE]
[SCRATCH / NOSCRATCH]
Синтаксис выше показывает, какие параметры мы можем использовать при удалении кластера KSDS. Описание параметра остается таким же, как указано в модуле VSAM - Cluster.
пример
В следующем примере показано, как удалить кластер KSDS в JCL с помощью утилиты IDCAMS.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEPNAME EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
DELETE MY.VSAM.KSDSFILE CLUSTER
/*
Если вы выполните указанный выше JCL на сервере мэйнфреймов. Он должен выполняться с MAXCC = 0, и он удалит кластер VSAM MY.VSAM.KSDSFILE.
RRDS известен как набор данных относительной записи. Кластер RRDS похож на кластер ESDS. Единственное отличие состоит в том, что к записям RRDS обращаютсяRelative Record Number (RRN), мы должны закодировать NUMBEREDвнутри команды DEFINE CLUSTER. Ниже приведены ключевые особенности RRDS:
Набор данных относительной записи содержит записи, которые идентифицируются Relative Record Number (RRN), который является порядковым номером относительно первой записи.
RRDS разрешает доступ к записям по номеру, например, запись 1, запись 2 и так далее. Это обеспечивает произвольный доступ и предполагает, что у прикладной программы есть способ получить желаемые номера записей.
К записям в наборе данных RRDS можно получить доступ последовательно, в относительном порядке номеров записей или напрямую, указав относительный номер записи для желаемой записи.
Записи в наборе данных RRDS хранятся в слотах фиксированной длины. На каждую запись ссылается номер ее слота, номер может варьироваться от 1 до максимального количества записей в наборе данных.
Записи в RRDS можно записывать, вставляя новую запись в пустой слот.
Записи могут быть удалены из кластера RRDS, тем самым оставив пустой слот.
Приложения, которые используют записи фиксированной длины или номер записи с контекстным значением, которые могут использовать наборы данных RRDS.
RRDS можно использовать в COBOLпрограммы, как и любой другой файл. Мы укажем имя файла в JCL, и мы можем использовать файл KSDS для обработки внутри программы. В программе COBOL укажите файловую организацию какRELATIVE и вы можете использовать любой режим доступа (Sequential, Random or Dynamic) с набором данных RRDS.
Файловая структура RRDS
В файловой структуре RRDS пространство разделено на слоты фиксированной длины. Слот может быть полностью пустым или полностью заполненным. Таким образом, новые записи могут быть добавлены в пустые слоты, а существующие записи могут быть удалены из заполненных слотов. Мы можем получить доступ к любой записи напрямую, указав относительный номер записи. В следующем примере показана основная структура файла данных -
Компонент данных
Относительный номер записи | Поле записи 1 | Поле записи 2 |
---|---|---|
1 | Руководство | Точка |
2 | Мохташим | М. |
3 | Нишант | Малик |
Определение кластера RRDS
Следующий синтаксис показывает, какие параметры мы можем использовать при создании кластера RRDS.
Описание параметра остается таким же, как указано в модуле VSAM - Cluster.
DEFINE CLUSTER (NAME(rrds-file-name) -
BLOCKS(number) -
VOLUMES(volume-serial) -
NUMBERED -
RECSZ(average maximum) -
[FREESPACE(CI-Percentage,CA-Percentage)] -
CISZ(number) -
[READPW(password)] -
[FOR(days)|TO(date)] -
[UPDATEPW(password)] -
[REUSE / NOREUSE]) -
DATA -
(NAME(rrds-file-name.data))
пример
В следующем примере показано, как создать кластер RRDS в JCL с помощью утилиты IDCAMS.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
DEFINE CLUSTER (NAME(MY.VSAM.RRDSFILE) -
NUMBERED -
RECSZ(80 80) -
TRACKS(1,1) -
REUSE -
FREESPACE(3 3) ) -
DATA (NAME(MY.VSAM.RRDSFILE.DATA))
/*
Если вы выполните указанный выше JCL на сервере мэйнфреймов. Он должен выполняться с MAXCC = 0, и он создаст файл VSAM MY.VSAM.RRDSFILE.
Удаление кластера RRDS
Кластер RRDS удаляется с помощью утилиты IDCAMS. Команда DELETE удаляет запись о кластере VSAM из каталога и, при необходимости, удаляет файл, освобождая тем самым пространство, занимаемое объектом.
DELETE data-set-name CLUSTER
[ERASE / NOERASE]
[FORCE / NOFORCE]
[PURGE / NOPURGE]
[SCRATCH / NOSCRATCH]
Синтаксис выше показывает, какие параметры мы можем использовать при удалении кластера RRDS. Описание параметра остается таким же, как указано в модуле VSAM - Cluster.
пример
В следующем примере показано, как удалить кластер RRDS в JCL с помощью утилиты IDCAMS.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEPNAME EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
DELETE MY.VSAM.RRDSFILE CLUSTER
/*
Если вы выполните указанный выше JCL на сервере мэйнфреймов. Он должен выполняться с MAXCC = 0, и он удалит MY.VSAM.RRDSFILE VSAM Cluster.
LDS известен как линейный набор данных. Линейный набор данных - это единственная форма набора данных с потоком байтов, которая используется в традиционных файлах операционной системы. Линейные наборы данных используются редко. Ниже приведены ключевые особенности LDS:
Наборы линейных данных не содержат RDF и CIDF, так как не содержат никакой управляющей информации, встроенной в его CI.
Данные, к которым можно получить доступ в виде строк с байтовой адресацией в виртуальной памяти в линейных наборах данных.
Линейные наборы данных имеют размер контрольного интервала 4 КБ.
LDS - это своего рода не-vsam-файл с некоторыми функциями VSAM, такими как использование IDCAMS и специальной информации VSAM в каталоге.
В настоящее время DB2 является крупнейшим пользователем наборов линейных данных.
IDCAMS используется для определения LDS, но доступ к нему осуществляется с помощью макроса Data-In-Virtual (DIV).
Линейный набор данных не имеет понятий записей. Все байты LDS - это байты данных.
Определение кластера LDS
Следующий синтаксис показывает, какие параметры мы можем использовать при создании кластера LDS. Описание параметра остается таким же, как указано в модуле VSAM - Cluster.
DEFINE CLUSTER (NAME(lds-file-name) -
BLOCKS(number) -
VOLUMES(volume-serial) -
LINEAR -
CISZ(number) -
[READPW(password)] -
[FOR(days)|TO(date)] -
[UPDATEPW(password)] -
[REUSE / NOREUSE]) -
DATA -
(NAME(lds-file-name.data))
пример
В следующем примере показано, как создать кластер LDS в JCL с помощью утилиты IDCAMS.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
DEFINE CLUSTER (NAME(MY.VSAM.LDSFILE) -
LINEAR -
TRACKS(1,1) -
CISZ(4096) ) -
DATA (NAME(MY.VSAM.LDSFILE.DATA))
/*
Если вы выполните указанный выше JCL на сервере мэйнфреймов. Он должен выполняться с MAXCC = 0, и он создаст файл VSAM MY.VSAM.LDSFILE.
Удаление кластера LDS
Кластер LDS удаляется с помощью утилиты IDCAMS. Команда DELETE удаляет запись о кластере VSAM из каталога и, при необходимости, удаляет файл, освобождая тем самым пространство, занимаемое объектом.
DELETE data-set-name CLUSTER
[ERASE / NOERASE]
[FORCE / NOFORCE]
[PURGE / NOPURGE]
[SCRATCH / NOSCRATCH]
Синтаксис выше показывает, какие параметры мы можем использовать при удалении кластера LDS. Описание параметра остается таким же, как указано в модуле VSAM - Cluster.
пример
В следующем примере показано, как удалить кластер LDS в JCL с помощью утилиты IDCAMS.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEPNAME EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
DELETE MY.VSAM.LDSFILE CLUSTER
/*
Если вы выполните указанный выше JCL на сервере мэйнфреймов. Он должен выполняться с MAXCC = 0, и он удалит кластер VSAM MY.VSAM.LDSFILE.
Команды VSAM используются для выполнения определенных операций с наборами данных VSAM. Ниже приведены наиболее полезные команды VSAM.
- Alter
- Repro
- Listcat
- Examine
- Verify
Изменить
Команда ALTER используется для изменения атрибутов файла VSAM. Мы можем изменить атрибуты файла VSAM, упомянутые в определении кластера VSAM. Ниже приведен синтаксис для изменения атрибутов -
ALTER file-cluster-name [password]
[ADDVOLUMES(volume-serial)]
[BUFFERSPACE(size)]
[EMPTY / NOEMPTY]
[ERASE / NOERASE]
[FREESPACE(CI-percentage CA-percentage)]
[KEYS(length offset)]
[NEWNAME(new-name)]
[RECORDSIZE(average maximum)]
[REMOVEVOLUMES(volume-serial)]
[SCRATCH / NOSCRATCH]
[TO(date) / FOR(days)]
[UPGRADE / NOUPGRADE]
[CATALOG(catalog-name [password]]
Синтаксис выше показывает, какие параметры мы можем изменить в существующем кластере VSAM. Описание параметра остается таким же, как указано в модуле VSAM - Cluster.
пример
В следующем примере показано, как использовать команду ALTER для увеличения Freespace, для добавления дополнительных томов и для Alter Keys -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
ALTER MY.VSAM.KSDSFILE
[ADDVOLUMES(2)]
[FREESPACE(6 6)]
[KEYS(10 2)]
/*
Если вы выполните указанный выше JCL на сервере мэйнфреймов. Он должен выполняться с MAXCC = 0 и изменит свободное пространство, объемы и ключи.
Репро
Команда REPRO используется для загрузки данных в набор данных VSAM. Он также используется для копирования данных из одного набора данных VSAM в другой. Мы можем использовать эту команду для копирования данных из последовательного файла в файл VSAM. Утилита IDCAMS использует команду REPRO для загрузки наборов данных.
REPRO INFILE(in-ddname)
OUTFILE(out-ddname)
В приведенном выше синтаксисе in-ddname - это DD-имя для входного набора данных, который имеет записи. Out-ddname - это имя DD для выходного набора данных, куда будут скопированы записи входных наборов данных.
пример
В следующем примере показано, как копировать записи из одного набора данных в другой набор данных VSAM.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = IDCAMS
//IN DD DSN = MY.VSAM.KSDSFILE,DISP = SHR
//OUT DD DSN = MY.VSAM1.KSDSFILE,DISP = SHR
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
REPRO INFILE(IN)
OUTFILE(OUT)
/*
Если вы выполните указанный выше JCL на сервере мэйнфреймов. Он должен выполняться с MAXCC = 0, и он скопирует все записи из MY.VSAM.KSDSFILE в файл VSAM MY.VSAM1.KSDSFILE.
Listcat
Команда LISTCAT используется для получения сведений о каталоге набора данных VSAM. Команда Listcat предоставляет следующую информацию о наборах данных VSAM:
- СМС информация
- Информация о RLS
- Информация о томе
- Информация о сфере
- Информация о размещении
- Атрибуты набора данных
LISTCAT ENTRY(vsam-file-name) ALL
В приведенном выше синтаксисе vsam-file-name - это имя набора данных VSAM, для которого нам нужна вся информация. Ключевое слово ALL указано для получения всех деталей каталога.
пример
В следующем примере показано, как получить все детали с помощью команды Listcat для набора данных VSAM.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
LISTCAT ENTRY(MY.VSAM.KSDSFILE)
ALL
/*
Если вы выполните указанный выше JCL на сервере мэйнфреймов. Он должен выполняться с MAXCC = 0, и он покажет все детали каталога о наборе данных MY.VSAM.KSDSFILE.
Изучить
Команда Examine используется для проверки структурной целостности кластера наборов данных с последовательностью ключей. Он проверяет компоненты индекса и данных, и, если обнаруживается какая-либо проблема, сообщения об ошибках отправляются в очередь. Вы можете проверить любое из сообщений IDCxxxxx.
EXAMINE NAME(vsam-ksds-name) -
INDEXTEST DATATEST -
ERRORLIMIT(50)
В приведенном выше синтаксисе vsam-ksds-name - это имя набора данных VSAM, для которого нам нужно проверить индекс и часть данных кластера VSAM.
пример
В следующем примере показано, как проверить, синхронизированы ли части набора данных KSDS Index и Data или нет.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
EXAMINE NAME(MY.VSAM.KSDSFILE) -
INDEXTEST DATATEST -
ERRORLIMIT(50)
/*
Если вы выполните указанный выше JCL на сервере мэйнфреймов. Он должен выполняться с MAXCC = 0, и он покажет все проблемы с набором данных VSAM в одном из сообщений IDCxxxxx в спуле.
Проверить
Команда Verify используется для проверки и исправления файлов VSAM, которые не были должным образом закрыты после ошибки. Команда добавляет в файл правильные записи о конце данных.
VERIFY DS(vsam-file-name)
В приведенном выше синтаксисе vsam-file-name - это имя набора данных VSAM, для которого нам нужно проверить ошибки.
пример
В следующем примере показано, как проверить и исправить ошибки в наборе данных VSAM.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
VERIFY DS(MY.VSAM.KSDSFILE)
/*
Если вы выполните указанный выше JCL на сервере мэйнфреймов. Он должен выполняться с MAXCC = 0, и он исправит ошибки в наборе данных VSAM.
Альтернативный индекс - это дополнительный индекс, который создается для наборов данных KSDS / ESDS в дополнение к их первичному индексу. Альтернативный индекс обеспечивает доступ к записям с использованием более чем одного ключа. Ключ альтернативного индекса может быть неуникальным или иметь дубликаты.
Создание альтернативного индекса
Следующие шаги используются для создания альтернативного индекса -
- Определить альтернативный индекс
- Определить путь
- Индекс строительства
Определить альтернативный индекс
Альтернативный индекс определяется с помощью DEFINE AIX команда.
DEFINE AIX -
(NAME(alternate-index-name) -
RELATE(vsam-file-name) -
CISZ(number) -
FREESPACE(CI-Percentage,CA-Percentage) -
KEYS(length offset) -
NONUNIQUEKEY / UNIQUEKEY -
UPGRADE / NOUPGRADE -
RECORDSIZE(average maximum)) -
DATA -
(NAME(vsam-file-name.data)) -
INDEX -
(NAME(vsam-file-name.index))
Синтаксис выше показывает параметры, которые используются при определении альтернативного индекса. Мы уже обсудили некоторые параметры в модуле определения кластера, и некоторые из новых параметров используются при определении альтернативного индекса, который мы обсудим здесь -
Старший Нет | Параметры с описанием |
---|---|
1 | DEFINE AIX Команда Define AIX используется для определения альтернативного индекса и указания атрибутов параметров для его компонентов. |
2 | NAME NAME определяет имя альтернативного индекса. |
3 | RELATE RELATE указывает имя кластера VSAM, для которого создается альтернативный индекс. |
4 | NONUNIQUEKEY / UNIQUEKEY UNIQUEKEY указывает, что альтернативный индекс уникален, а NONUNIQUEKEY указывает, что могут существовать дубликаты. |
5 | UPGRADE / NOUPGRADE UPGRADE указывает, что альтернативный индекс должен быть изменен, если базовый кластер изменен, а NOUPGRADE указывает, что альтернативные индексы должны быть оставлены в покое, если базовый кластер изменен. |
пример
Ниже приведен базовый пример, показывающий, как определить альтернативный индекс в JCL.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
DEFINE AIX (NAME(MY.VSAM.KSDSAIX) -
RELATE(MY.VSAM.KSDSFILE) -
CISZ(4096) -
FREESPACE(20,20) -
KEYS(20,7) -
NONUNIQUEKEY -
UPGRADE -
RECORDSIZE(80,80)) -
DATA(NAME(MY.VSAM.KSDSAIX.DATA)) -
INDEX(NAME(MY.VSAM.KSDSAIX.INDEX))
/*
Если вы выполните указанный выше JCL на сервере мэйнфреймов. Он должен выполняться с MAXCC = 0, и он создаст альтернативный индекс MY.VSAM.KSDSAIX.
Определить путь
Определить путь используется для связи альтернативного индекса с базовым кластером. При определении пути мы указываем имя пути и альтернативный индекс, с которым этот путь связан.
DEFINE PATH -
NAME(alternate-index-path-name) -
PATHENTRY(alternate-index-name))
Вышеупомянутый синтаксис имеет два параметра. NAME используется для указания имени альтернативного пути индекса, а PATHENTRY используется для указания альтернативного имени индекса.
пример
Ниже приведен базовый пример определения пути в JCL.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
DEFINE PATH -
NAME(MY.VSAM.KSDSAIX.PATH) -
PATHENTRY(MY.VSAM.KSDSAIX))
/*
Если вы выполните указанный выше JCL на сервере мэйнфреймов. Он должен выполняться с MAXCC = 0, и он создаст путь между альтернативным индексом к базовому кластеру.
Индекс строительства
Команда BLDINDEX используется для построения альтернативного индекса. BLDINDEX считывает все записи в индексированном наборе данных VSAM (или базовом кластере) и извлекает данные, необходимые для построения альтернативного индекса.
BLDINDEX -
INDATASET(vsam-cluster-name) -
OUTDATASET(alternate-index-name))
Вышеупомянутый синтаксис имеет два параметра. INDATASET используется для указания имени кластера VSAM, а OUTDATASET используется для указания альтернативного имени индекса.
пример
Ниже приведен базовый пример построения индекса в JCL.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
BLDINDEX -
INDATASET(MY.VSAM.KSDSFILE) -
OUTDATASET(MY.VSAM.KSDSAIX))
/*
Если вы выполните указанный выше JCL на сервере мэйнфреймов. Он должен выполняться с MAXCC = 0, и он построит индекс.
Каталог поддерживает единицу измерения и объем, в котором находится набор данных. Каталог используется для поиска наборов данных. Наборы данных, отличные от VSAM, создают запись каталога с помощью параметра размещения в JCL. Наборы данных VSAM поддерживают собственный каталог в форме кластера KSDS. На следующем изображении вы можете увидеть тип каталогов VSAM -
Главный каталог
Главный каталог сам по себе является файлом, который отслеживает и управляет работой VSAM. Это только один главный каталог в любой системе, который содержит записи о системных наборах данных и наборах данных VSAM. Наборы данных VSAM и не-VSAM могут иметь запись в главном каталоге, но это не рекомендуется. Главный каталог создается в процессе создания системы и находится на системном томе. Главный каталог владеет всеми ресурсами VSAM в операционной системе. Все файлы, используемые в VSAM, контролируются главным каталогом. Главный каталог отвечает за следующие операции -
- Пароль авторизации для файлов
- Повышение безопасности
- Доступ VSAM для файлов
- Управление пространством файла
- Расположение файла
- Свободное место в файле
При изменении любого из вышеуказанных атрибутов файла они автоматически обновляются в главном каталоге. Главный каталог определяется с помощью программ IDCAMS.
Каталог пользователей
Каталог пользователей имеет ту же структуру и концепции, что и главный каталог. Он присутствует на следующем уровне иерархии после главного каталога. Каталог пользователей не является обязательным в системе, но используется для повышения безопасности системы VSAM. Главный каталог указывает на файлы VSAM, но если каталог пользователей присутствует, то главный каталог указывает на каталог пользователей. Пользовательских каталогов может быть много в соответствии с требованиями системы. В структуре VSAM удаление главного каталога не повлияет на пользовательский каталог. Каталог пользователей содержит записи о наборах данных для конкретных приложений. Информация пользовательского каталога хранится в главном каталоге.
Пространство данных
Пространство данных - это область устройства хранения с прямым доступом, выделенная исключительно для использования VSAM. Перед созданием кластеров VSAM необходимо создать пространство данных. Область, занимаемая пространством данных, записывается в Таблице содержания тома (VTOC), так что пространство не будет доступно для распределения для любого другого использования, ни VSAM, ни не-VSAM. VTOC имеет вход в площадь, занимаемую пространством. VSAM создает пространство данных для хранения записей каталога пользователей. VSAM берет на себя управление этим пространством, а также контролирует и поддерживает это пространство по мере необходимости для файлов VSAM.
Уникальные кластеры
Уникальные кластеры состоят из отдельного пространства данных, которое полностью используется кластером, созданным в нем. Уникальные кластеры создаются из нераспределенного пространства в хранилище с прямым доступом.
Подраспределенные кластеры
Суб-выделенный файл VSAM разделяет пространство VSAM с другими суб-выделенными файлами. Он указывает, что файл должен быть распределен в рамках существующего пространства VSAM. Дополнительное распределение используется для упрощения управления пространствами VSAM и управления ими.
Наборы данных без VSAM
Наборы данных без VSAM находятся как на ленте, так и в хранилище с прямым доступом. Наборы данных, отличные от VSAM, могут иметь записи как в главном каталоге, так и в каталогах пользователей. Основная функция каталогизации наборов данных, отличных от VSAM, заключается в сохранении серийной информации об единицах и томах.
При работе с наборами данных VSAM вы можете столкнуться с аварийными остановками. Ниже приведены общие коды состояния файлов с их описанием, которые помогут вам решить проблемы.
Код | Описание |
---|---|
00 | Операция успешно завершена |
02 | Обнаружен повторяющийся ключ неуникального альтернативного индекса |
04 | Неверная запись фиксированной длины |
05 | При выполнении OPEN File, а файл отсутствует |
10 | Обнаружен конец файла |
14 | Попытка ПРОЧИТАТЬ относительную запись за пределами файла |
20 | Неверный ключ для VSAM KSDS или RRDS |
21 год | Ошибка последовательности при выполнении WRITE или изменении ключа при REWRITE |
22 | Обнаружен первичный повторяющийся ключ |
23 | Запись не найдена или Файл не найден |
24 | Ключ вне границы файла |
30 | Постоянная ошибка ввода-вывода |
34 | Запись за пределами файла |
35 год | При выполнении OPEN File, а файл отсутствует |
37 | ОТКРЫТЬ файл в неправильном режиме |
38 | Пытался ОТКРЫТЬ заблокированный файл |
39 | OPEN не удалось из-за конфликтующих атрибутов файла |
41 год | Пытался ОТКРЫТЬ уже открытый файл |
42 | Пытался ЗАКРЫТЬ файл, который НЕ ОТКРЫТ |
43 год | Пытался ПЕРЕЗАПИСАТЬ без предварительного чтения записи |
44 | Пытался ПЕРЕПИСАТЬ запись другой длины |
46 | Пытался ПРОЧИТАТЬ за пределами конца файла |
47 | Пытался ПРОЧИТАТЬ из файла, который не был открыт IO или INPUT |
48 | Пытался ЗАПИСАТЬ в файл, который не был открыт IO или OUTPUT |
49 | Пытался УДАЛИТЬ или ПЕРЕПИСАТЬ в файл, который не был открыт IO |
91 | Ошибка пароля или авторизации |
92 | Логическая ошибка |
93 | Ресурсы недоступны |
94 | Последовательная запись недоступна или одновременная ошибка OPEN |
95 | Информация о файле недействительна или неполна |
96 | Нет инструкции DD для файла |
97 | ОТКРЫТЬ успешно, целостность файла подтверждена |
98 | Файл заблокирован - не удалось открыть |
99 | Запись заблокирована - сбой доступа к записи |