有没有办法删除z / OS USS中的PDS成员而不在整个PDS上获取ENQ?我试过删除",但它抱怨数据集争用。
答案 0 :(得分:7)
一种方法是使用ISPF删除服务...它通常将数据集分配为共享数据集,使用它自己的内部ENQ来序列化删除。见here。在UNIX服务中,您可以创建USS shell可以运行的REXX脚本,并且可以像在链接中看到的那样调用ISPEXEC之类的东西。
您也可以使用IDCAMS。首先分配PDS数据集 - 类似于alloc fi(pds) dataset(dsn) shr
。然后,DELETE 'pds(member)' FILE(pds)
的IDCAMS也可以做你想要的。
还有很多其他方法 - 关键是通常使用DISP = SHR分配PDS,打开PDS输出,然后使用DELETE选项调用STOW以删除所需的成员。
序列化很重要 - 请记住,在共享分配下打开输出PDS可能会导致损坏,具体取决于您正在执行的操作。 ISPF服务使用ENQ(SPFEDIT)进行序列化,使用比使用DISP = OLD分配更细粒度的序列化...只要数据集被分配,DISP = OLD就会持续存在,而SPFEDIT ENQ仅用于分数第二,执行DELETE。