SET DSNAME
更改与外部数据集相关的信息,包括适用于访问该数据集的所有 UOW 的操作。
条件: DSNNOTFOUND , INVREQ , IOERR , NOTAUTH 和 SUPPORTED
有关使用 CVDA 的更多信息,请参阅 CICS-value 数据区 (CVDA)。
描述
- 告知 CICS® 本地系统上不再需要数据集。
- 通过更新 ICF 目录,将数据集的
打开时备份
(BWO) 属性设置为正向恢复
状态。 这指示已进行正向恢复。 - 将 VSAM 数据集标记为在整个综合系统中已停顿或未停顿。
- 使 VSAM 数据集对 CICS 区域可用或不可用,或者限制对 REPLICATOR 程序的数据集的完全访问权。 (可用性函数不会跨综合系统运行。 SET DSNAME (...) AVAILABILITY (...) 命令仅在发出该命令的 CICS 区域中有效。)
- 重试由于此数据集失败 (不确定失败除外) 而搁置的所有 UOW 日志记录。
- 强制完成由于不确定故障而搁置且已更新此数据集的任何 UOW。
- 清除对数据集中的任何记录持有保留锁定 (由于不确定失败而持有的锁定除外) 的搁置的 UOW 日志记录,并释放保留锁定,
- 使用 UOWACTION 和 ACTION (RESETLOCKS) 选项,取消对数据集恢复丢失的 RLS 锁定的任何尝试。
有关搁置的 UOW 日志记录的信息,请参阅 工作单元。
- 如果指定了 REMOVE ,那么不允许使用其他属性。
- 选项按以下顺序处理:
- 已恢复
- 取消停顿
- AVAILABLE
- RETRY
- UOWACTION
- RESETLOCKS
- UNAVAILABLE
- RREPL
- QUIESCED。
如果指定 RETRY ,那么不应同时指定 UNAVAILABLE 或 QUIESCED ,因为这可能会导致回退重试失败。
如果将 UNQUIESCED 与任何其他属性组合在一起,那么还请指定 BUSY (WAIT) ,以便以后的选项不会由于数据集未取消停顿而导致命令失败。
在打开引用数据集的第一个文件之前,不能指定数据集的某些选项。 如果在打开文件之前属性无效,那么将返回 INVREQ 条件。 QUIESC一下是一个属性,可以在针对指定的数据集打开任何文件之前使用该属性。
选项
- ACTION (cvda)
- 指定要对数据集执行的操作。 CVDA 值包括:
- 已恢复
- 此数据集已从备份版本复原,正向恢复已运行并成功完成。 CICS 尝试使用 DFSMS 可调用服务更新 ICF 目录中数据集的 BWO 属性。 如果正向恢复日志应用实用程序未更新 ICF 目录中的 BWO 属性,或者如果数据库管理员发现自生成备份副本以来未进行更新,那么数据库管理员将使用此命令来更新 ICF 目录中的 BWO 属性。 这将意味着不需要正向恢复。 如果在复原备份副本后未更新数据集的 BWO 属性,那么后续文件打开将失败,因为数据集仍在 ICF 目录中标记为低级别。
有关 DFSMS 可调用服务的信息,请参阅 z/OS Security Server RACF Security Administrator 's Guide。
- 移除
- 本地系统上不再需要数据集。 在可以发出 SET DSNAME REMOVE 命令之前,数据集的 FILECOUNT 必须为零。 如果指定 REMOVE ,那么不得指定任何其他选项。
除去临时数据集: 如果您有一个创建临时数据集的应用程序,那么当不再需要这些数据集时,最重要的是除去关联的数据集名称块。 在关闭数据集或关闭 CICS 时,不会除去数据集名称块 (仅在冷启动或初始启动期间自动除去这些数据集名称块)。 如果未除去,那么不需要的数据集名称块可能会占用过多的动态存储器,从而导致存储空间不足的情况。 请参阅 示例 ,以获取有关如何识别和除去不需要的数据集名称块的说明。
- RESETLOCKS (仅限 VSAM)
- 清除在此数据集上持有锁定的回退失败和落实失败的 UOW 的搁置的 UOW 日志记录,并释放保留的锁定。
- 回退失败的 UOW 是在回退处理期间失败的 UOW。
- 落实失败的 UOW 是那些已更新 RLS 数据集并且在 2 阶段落实同步点处理的第二阶段中未能释放锁定的 UOW。
如果指定此选项,那么将接受回退故障和某些数据完整性丢失,而不是保留锁定和延迟事务,因此仅应将其用作最后手段。
对于对数据集持有锁定的回退失败和落实失败的 UOW ,将从系统日志中除去与此数据集相关的所有记录,并释放此 CICS 对数据集持有的所有保留记录锁定。 对于由于 RESETLOCKS 操作而除去的每个回退失败日志记录,诊断消息将写入 CSFL 瞬时数据队列。
如果回退失败或落实失败的日志记录正在挂起数据集的丢失锁定恢复,并且没有其他解决方法,那么您可以选择使用 RESETLOCKS。备注信息:- 此选项不适用于搁置的 indoubt UOW。 在发出 RESETLOCKS 之前,应该尝试解析以其他方式对数据集挂起锁定的搁置的不确定 UOW; 例如,使用 COMMIT , BACKOUT 或 FORCE (请参阅 UOWACTION 选项)。
- RESETLOCKS 可能会在落实阶段失败 (例如,如果 CICS 尝试释放 RLS 锁定时发生错误) ,在这种情况下, UOW 将还原为作为落实失败的 UOW 进行搁置。
- RETRY
- 应该重试因此数据集的回退和落实处理失败而搁置的 UOW 日志记录。 这在概念上类似于 SET CONNECTION RESYNC 命令,但仅适用于回退失败和落实失败的 UOW ,而不适用于不确定的 UOW。
当数据集已搁置与之关联的回退失败或落实失败的 UOW ,并且您认为部分或全部数据集问题是瞬态问题或已解决时,应使用 RETRY。 如果数据集以某种方式损坏,那么它必须已修复 (重新创建) 并且可供 RETRY 成功工作。
在发生数据集故障时发出的消息 (这些消息会导致 UOW 被搁置) 建议从故障中恢复所需的操作。
RETRY 不会损害数据完整性,可以随时安全使用,使一些失败的恢复工作能够完成。
- AVAILABILITY (cvda) (仅限 VSAM)
- 指定是将此 CICS 区域中的数据集标记为可用还是不可用,还是将数据集的完全访问权限制为 REPLICATOR 程序。 此命令设置或取消设置可用性指示符,这是 CICS 区域在每个数据集的数据集名称块 (DSNB) 中维护的本地标志。 CVDA 值包括:
- AVAILABLE
- 数据集可用。 CICS 可以对此数据集发出 RLS 和非 RLS 打开请求。
- RREPL
- 对数据集的完全访问权仅限于定义为 REPLICATION (REPLICATOR) 的程序。 其他程序仅具有读访问权。
- UNAVAILABLE
- 数据集不可用。 无法以 RLS 或非 RLS 方式打开数据集。
- BUSY (cvda) (仅限 RLS)
- 指定在请求停顿或非停顿数据集时,如果还指定了 QUIESCESTATE,CICS 是否应该等待。 如果没有指定 QUIESCESTATE,那么忽略这个参数。 CVDA 值包括:
- 无等待
- CICS 在异步启动停顿或取消停顿操作后,将控制权立即返回给应用程序。 您可以使用 INQUIRE DSNAME QUIESC屋来检查停顿或取消停顿是否已完成。
- WAIT
- 仅当数据集在整个综合系统中已停顿或未停顿时,或者当数据集未能执行此操作时, CICS 才会将控制权返回给应用程序。 如果在 QUIESTIM 系统初始化参数指定的时间内没有完成停顿,那么停顿超时。 请参阅 QUIESTIM 系统初始化参数。 如果指定 WAIT,或者允许采用缺省值,那么应该确保您的程序可以处理 AEXY 异常终止,以免因 DTIMOUT 值不够大而使任务无法等到完成。
- DSNAME (data-value)
- 指定数据集的名称。 最多可以有 44 个字符长,并在 CEDA DEFINE FILE 命令的 DSNAME 操作数中定义到 CICS 。
- QUIESC产业 (cvda) (仅限 RLS)
- 指定数据集的 RLS 停顿状态。 当操作完成时,将在数据集的 ICF 目录条目中设置状态。 CVDA 值包括:
- 已完成
- 在整个综合系统中以 RLS 方式打开的所有现有 CICS 文件都将关闭,并且数据集将在 ICF 目录中标记为已停顿。 综合系统中的每个 CICS 都会在关闭文件之前异常终止所有正在访问数据集的正在进行中的 UOW ,从而导致正在进行中的 UOW 回退。 任何失败回退的 UOW 都将被搁置。 无法针对此数据集以 RLS 方式打开任何文件,但允许非 RLS 打开请求 (尽管如果数据集保留了 RLS 锁定,那么无法以非 RLS 方式打开更新)。
除了关闭打开的文件外, IMMQUIESCED 还将文件状态设置为 UNENABLED (如果是 ENABLED)。 后续 SET DSNAME UNQUIESCED 命令将文件状态恢复为 ENABLED ,前提是通过 QUIESCED 或 IMMQUIESED 操作将其设置为 unenabled ,但如果 UNENABLE 状态是由于某个其他事件而导致的,那么 不是 。 此状态更改记录在 CICS 全局目录中。
注: 使用 IMMQUIESCED 选项会导致当前使用数据集的任何任务立即终止,使用 CICS 任务 FORCEPURGE 机制。 在某些极端情况下, CICS 可能会异常终止。 因此,使用 IMMQUIESTED 选项将数据集设置为停顿应限制为例外情况。- QUIESCED
- 在整个综合系统中以 RLS 方式打开的所有现有 CICS 文件都将关闭,并且数据集将在 ICF 目录中标记为已停顿。 综合系统中的每个 CICS 都将等待,直到正在访问数据集的所有正在进行中的 UOW 都已到达同步点,然后再关闭文件; 即,这些 UOW 为:
- 已成功落实
- 或 已成功回退
- 或 由于不确定故障而被 shunted
- 或 由于回退失败而被 shunted
- 或 由于落实失败而被舍入。
注: 如果使用 WAIT (缺省值) 指定 QUIESCED ,那么在关闭文件之前,综合系统中所有 CICS 区域中的所有任务都必须已达到同步点,从而允许您的命令完成。 必须确保发出 QUIESCED 命令的事务的 DTIMOUT 值足以允许这样做,否则事务将异常终止,并产生 AEXY 异常终止。 允许 QUIESCE 操作运行,直到完成或达到 QUIESTIM 系统初始化参数设置的超时值 (缺省值为 4 分钟) 为止。无法针对此数据集以 RLS 方式打开任何文件,但允许非 RLS 打开请求 (尽管如果数据集保留了 RLS 锁定,那么无法以非 RLS 方式打开更新)。
除了关闭打开的文件外, QUIESCED 还会将文件状态设置为 UNENABLED (如果它是 ENABLED)。 后续 SET DSNAME UNQUIESCED 命令将文件状态恢复为 ENABLED ,前提是 QUIESCED 或 IMMQUIESED 操作设置了 unenabled ,但如果 UNENABLE 状态是由于某个其他事件而导致的,那么 不 。 此状态更改记录在 CICS 全局目录中。
- 取消停顿
- 数据集在 ICF 目录中标记为未停顿。 可以对此数据集发出 RLS 或非 RLS 打开,即首次打开所建立的访问方式 (RLS 或非 RLS)。 在第一次成功打开请求之后,将允许后续以与第一次打开相同的方式打开请求。
如果先前的 SET DSNAME IMMQUIESED 或 QUIESCED 命令设置了文件 UNENABLED ,那么 UNQUIESCED 会将文件状态恢复为 ENABLED。 此状态更改记录在 CICS 全局目录中。
- UOWACTION (cvda)
- 指定要对搁置的不确定 UOW 执行的操作。 CVDA 值包括:
- 回退
- 应回退所有在此数据集上持有锁定的搁置不确定 UOW。
- 落实
- 应落实所有对此数据集持有锁定的搁置的不确定 UOW。
- FORCE
- 所有对此数据集持有锁定的搁置的不确定 UOW 都应该强制回退或落实,如在事务资源定义上定义的 ACTION 属性所指定。
条件
- DSNNOTFOUND
- RESP2 值:
- 1
- 找不到指定的数据集。
- 15
- 指定了 FOUND ,但找不到数据集。
- INVREQ
- RESP2 值:
- 3
- ACTION 具有无效的 CVDA 值。
- 10
- 指定了 REMOVE ,但数据集与文件定义相关联。
- 12
- 已使用另一个选项指定 REMOVE。 如果指定 REMOVE ,那么它必须是命令中唯一存在的选项。
- 13
- 指定了 REMOVE ,但另一个 INQUIRE 或 SET DSNAME 命令或 CICS 文件控制处理对数据集挂起了锁定。
- 14
- 指定了恢复,但 CICS 未配置为支持
打开时备份
(BWO)。 检查您是否具有支持 BWO 的 MVS™/DFP , DFHSM 和 DFDSS 版本。 - 16
- 指定了恢复,但在此 CICS 会话期间尚未打开数据集,因此无法设置 ICF 目录中的 BWO 属性。
- 17 日
- 为 BDAM 数据集或 VSAM 路径指定了恢复。 这不受支持。
- 18
- 对已打开 FCT 的 VSAM 基本数据集指定了恢复。 这是不允许的。
- 19
- 为未知数据集指定了恢复,或者该数据集未处于
正向恢复
状态。 - 29 日
- 指定了QUIESC一下,但不支持该操作,因为 RLS=NO 指定为系统初始化参数,或者因为未安装 DFSMS 1.3 或更高版本。
- 30
- QUIESC一下有一个无效的 CVDA 值。
- 31 日
- BUSY 具有无效的 CVDA 值。
- 33
- AVAILABILITY 具有无效的 CVDA 值。
- 34
- 指定了QUIESC屋值 QUIESCED 或 IMMQUIESED ,但由于已进行停顿或取消停顿,或者由于 DFSMSdss 当前正在获取数据集的备份副本, SMSVSAM 将拒绝该值。
- 36
- 指定了QUIESC一下属性值 UNQUIESCED ,但由于已发生取消停顿,或者由于 DFSMSDSS 当前正在获取数据集的备份副本,因此 SMSVSAM 拒绝了该值。
- 39
- 为作为 BDAM 数据集的数据集指定了 AVAILABILITY ,QUIESC一下, RESETLOCKS 或 RETRY。
- 40
- 描述数据集的 CICS 控制块 (DSNB) 已被另一个任务 (通过 REMOVE 选项) 删除,然后 CICS 才能处理此 SET 命令。
- 41
- 为 DFSMS 未知的数据集 (作为 VSAM 数据集) 指定了QUIESC一下。
- 42
- 为 UOWACTION 指定了无效的 CVDA。
- 43
- 在没有 NOWAIT 的情况下指定了QUIESC屋值 QUIESCED 或 IMMQUIESED ,并且发出任务已在同一工作单元中更新数据集或正在浏览数据集。 这是不允许的,因为:
- 对于 QUIESCED ,这将导致死锁。
- 对于 IMMQUIESCED ,这将导致清除发出任务。
- 44
- 另一个任务已发出 SET DSNAME REMOVE 命令。 在发出此 SET DSNAME 命令之后,但在处理 AVAILABILITY 选项之前,已检测到此值。
- 46
- BKOUTSTATUS 与 NORMALBKOUT 以外的值一起指定 (BKOUTSTATUS 已过时)。
- 47
- 自上次冷启动此 CICS 区域以来,或者自为该数据集安装第一个文件定义以来,未针对该数据集打开任何文件。
- IOERR
- RESP2 值:
- 20
- 指定了恢复,但在访问 ICF 目录时发生了错误。 确保指定的数据集在 SMS 管理的 DASD 上并且对于 SMS 子系统是已知的。
- 21
- 指定了恢复,但 CICS 表管理器程序发生了错误。
- 35
- 指定了QUIESC一下,但 SMSVSAM 服务器不可用。
- 40
- 指定了QUIESC一下,并且在 DFSMS中发生了意外错误。
- 48
- 无法完成指定的操作,因为已迁移数据集。 重新调用数据集,然后重新发出命令。
- 49
- 读取 ICF 目录以建立基本数据集名称时, DFSMS 发生错误。
- NOTAUTH
- RESP2 值:
- 100
- 未授权与发出任务关联的用户使用此命令。
- SUPPRESSED
- RESP2 值:
- 37
- 指定了QUIESC屋值 QUIESCED 或 IMMQUIESED ,但另一个参与的 CICS 区域取消了数据集的停顿。 这可能是由于以下原因之一:
- 用户发出了 SET DSNAME UNQUIESCED 命令。
- XFCVSDS 全局用户出口程序禁止停顿。
- XFCSREQ 全局用户出口程序禁止关闭针对数据集打开的文件。
- 38
- 指定了QUIESC屋值 QUIESCED 或 IMMQUIESED ,但此 CICS 区域取消了数据集的停顿,因为停顿操作已超时。 这可能是因为另一个参与的 CICS 区域上长时间运行的事务阻止关闭针对数据集打开的文件。
超时的另一个原因可能是一个或多个区域非常繁忙。 如果发生频率过高,那么可以通过使用 QUIESTIM 系统初始化参数指定较长的时间段来修改超时时间段 (缺省值为 240 秒)。
示例
在 CICS 中,可以在线创建 VSAM 数据集以供临时使用,这些数据集由 CICS 文件控制动态分配。 通常,这涉及复用同一文件控制条目,并在每次需要使用新数据集时设置新的临时数据集名称。 这种做法可能会导致大量数据集名称块占用 CICS 动态存储器。 这些只能由 SET DSNAME (...) 除去 REMOVE 命令,或者通过 CICS的冷启动或初始启动。
- 通过发出 EXEC CICS SET FILE (...) 来中断 CICS 文件与数据集之间的关联 CLOSED DISABLED 命令,后跟 EXEC CICS SET FILE 命令以将 DSNAME 操作数设置为空值。
- 通过发出 EXEC CICS SET DSNAME (..) REMOVE 命令来除去数据集名称块。
要将 DSNAME 设置为空,必须对 CICS 命令进行编码,如以下示例中所示,以确保它们正确转换和编译。
* Remove DSN block from CICS storage
*
*ASM XOPTS(SP)
DFHEISTG DSECT
TEMPDSN DS CL44
REMOVE CSECT
PRINT GEN
* Find name of temporary data set if not known
EXEC CICS INQUIRE FILE('TEMPFILE') DSNAME(TEMPDSN)
* Close file temporary file and set DSN to null
EXEC CICS SET FILE('TEMPFILE') CLOSED DISABLED
EXEC CICS SET FILE('TEMPFILE') DSNAME(=X'00')
* Remove DSN block from storage
EXEC CICS SET DSNAME(TEMPDSN) REMOVE
*
* Return and end
*
RETURN DS 0H
EXEC CICS RETURN
END*PROCESS XOPTS(SP);
REMOVE:PROC OPTIONS(MAIN);
DCL PLIXOPT STATIC EXTERNAL CHAR(10) VAR INIT('NOSTAE');
DCL TEMPDSN CHAR(44);
/* */
/* Find name of temporary data set if not known */
EXEC CICS INQUIRE FILE('TEMPFILE') DSNAME(TEMPDSN);
*/ Close file temporary file and set DSN to null */
EXEC CICS SET FILE('TEMPFILE') CLOSED DISABLED;
EXEC CICS SET FILE('TEMPFILE') DSNAME('00'X);
/* Remove DSN block from storage */
EXEC CICS SET DSNAME(TEMPDSN) REMOVE
/*
/* Return and end */
/*
EXEC CICS RETURN;
END; CBL XOPTS(SP)
IDENTIFICATION DIVISION.
PROGRAM-ID. REMOVE.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 TEMPDSN PIC X(44).
PROCEDURE DIVISION.
* Find name of temporary data set if not known
EXEC CICS INQUIRE FILE('TEMPFILE') DSNAME(TEMPDSN)
END-EXEC.
* Close file temporary file and set DSN to null
EXEC CICS SET FILE('TEMPFILE') CLOSED DISABLED
END-EXEC.
EXEC CICS SET FILE('TEMPFILE') DSNAME(LOW-VALUES)
END-EXEC.
* Remove DSN block from storage
EXEC CICS SET DSNAME(TEMPDSN) REMOVE END-EXEC.
*
* Return and end
EXEC CICS RETURN END-EXEC.
GOBACK.