Вот хочу, чтобы разные мои программы не работали с одинаковыми томами. Какие способы можете предложить? Например: 1. Выделить область CSA и писать туда используемые ССUU. Программы будут по ENQ/DEQ проверять область и редактировать. Минусы: права на правку CSA да и она не резиновая, томов может быть много. 2. USS shared memory+семафоры. Прав не надо, но POSIX(ON) вносит путаницу. Таже Си system() по другому работает и тд. 3. Сделать отдельный TCP сервер и все его будут спрашивать по TCP. Надо всегда запущенная прога и чтоб кто-то ее перестартовывал.
ваши идеи ? Какие еще способы общения? Подошел бы MQ идеально, но его нету.
Абстрактно. Есть прога 1 - она пишет файл 1. Есть прога 2 - она пишет файл 2. Нечто их рандомно запускает и дает диск параметром, чтобы они туда написали файл. Я не хочу, чтобы у меня на каком то диске появилось 2 файла сразу. Проверять наличие файла нельзя - они по разному называются в разное время. Проверять идет ли работа с диском - невозможно. Прога может закрыть файл, подумать и еще что то дописать. Могут лежать файлы вообще от 3х лиц. (тоесть не проверишь, диск просто пустой или нет)
Значит нужен механизм, чтобы проги могли говорить друг другу, которые диски уже используются. Тогда другие не будут ничего делать на тех же дисках.
Проги мои - имею право дописать любые функции и тд. Вопрос - через что это красивее сделать.
а если у меня задание JCL? Тогда первый шаг возмет ENQ, а ко второму автоматом выдастся DEQ. И тогда другой JCL сможет ухватиться, когда первый еще не закончился.
Добавлено (20.08.2009, 19:47) --------------------------------------------- вопрос: я кстати прав, что ENQ делается только на шаг, а не на весь джоб ?
вопрос: я кстати прав, что ENQ делается только на шаг, а не на весь джоб ?
Если имеется в виду ENQ, выдаваемое системой (точнее инициатором) для набора данных в DD то нет. Если имеется в виду ENQ выдаваемое программой, выполняемой в шаге задания то да.
Возможно, наиболее простой способ сделать то, что вы хотите есть вклбчение в задание //RESERVE DD DSN=FORMAT4.DSCB,DISP=OLD,VOL=SER=volume,UNIT=unit причем здесь имя набора данных значения не имеет и этот набор может не существовать (существование набора проверяется при открытии). Или я что-то неправильно понимаю? Следующая ситуация должна допускаться или нет? //JOB1 //STEP1 создает и записывает набор на томе 111111 //STEP2 дополняет набор на томе 222222
//JOB2 //STEP1 создает и записывает набор на томе 222222 //STEP2 дополняет набор на томе 111111
Вы вообще идеологически что хотите: 1) предложить пользователям схему корректной работы или 2) принудить пользователей работать корректно?
Совместное использование наборов данных в z/OS сделано в стиле 1) за исключением VSAM, где это больше похоже на 2). Для таблицы СУБД это еще больше похоже на 2), но и для VSAM, и для таблицы принуждение все же имеет некоторые послабления (ISOLATION LEVEL UR aka Dirty Read например)
Сообщение отредактировал Gregory - Вторник, 25.08.2009, 01:44
Конечно, имя тома нужно включать в DSN, да и вообще, я неудачно выбрал имя в примере. Лучше использовать что-то вроде application_id.volume_serial. А VOL=SER=volume_serial в этом DD нужен для совершенно другого - чтобы не выполнялся поиск набора данных в каталоге, так как в результате получим jcl error - data set not found. Врочем, можно использовать и реально существующий набор, от этого ничего не меняется. ENQ без сомнения будет действовать для всего задания, см. тему JCL где обсуждается этот факт.
Сообщение отредактировал Gregory - Суббота, 29.08.2009, 01:08