4 策略

SMC 的两个主要功能是影响 MVS 分配以选择与磁带卷兼容的设备,以及拦截磁带挂载和卸载的 MVS 消息以对磁带库和虚拟磁带机自动执行这些操作。

对于特定的卷,SMC 分配主要根据卷介质和位置。

对于暂存卷,SMC 分配和挂载处理主要根据用户策略。可以使用 StorageTek DFSMS ACS 界面或 SMC TAPEREQ 控制语句来选择控制暂存分配和挂载的策略。

可以使用用户出口来选择策略。有关更多信息,请参阅《ELS Legacy Interfaces Reference》。

通过 DFSMS 指定的策略优先级高于通过 TAPEREQ 指定的策略,后者的优先级又高于在用户出口中指定的策略。

SMC POLicy 命令

使用 SMC POLicy 命令可指定磁带分配和挂载请求的策略。使用此命令可以创建包含与分配或挂载事件关联的所有属性的指定策略,其中包括 MEDiaRECtechMODelSUBPoolESOTeric、VTCS MGMTclasTAPEPlex

POLicy 命令可与 TAPEREQ 语句或 StorageTek DFSMS 接口一起使用,以便将指定策略与分配和挂载请求关联。

此外,POLicy 命令还可用于在 MVS 解释器/动态分配出口 (Interpreter/Dynamic Allocation Exit, IDAX) 处理过程中影响分配变量。StorageTek DFSMS 接口和 TAPEREQ 用户都可使用 POLicy IDAX 参数来更改正常情况下由 JCL 提供的变量。

SMC 策略通常在 SMC 启动时使用 SMC READ 命令装入的单个数据集或 PDS 成员中定义。此外,还可随时发出 POLicy 命令以添加新策略或替换现有策略的内容。

在以下 SMCCMDS 数据集样例中,READ 命令装入了包含 SMC 策略的 CNTL.PDS(POLMEM) 数据集:

示例 4-1 SMCCMDS 数据集样例

ALLOCDEF ZEROSCR(ON,INSIDE)
MSGDEF CASE(MIXED)
TAPEPLEX NAME(HSCPLEX) LOCSUB(HSC0)
READ DSN(’CNTL.PDS(POLMEM)’)
TREQDEF DSN(’CNTL.PDS(TREQMEM)’)

注:

  • 如果有任何 TAPEREQ 语句按名称引用了策略,则必须先处理 POLicy 命令,然后再处理 TREQDEF 命令。

  • 如果有任何 POLicy 命令引用了 TAPEPlex,则必须先使用 TAPEPlex 命令定义该 TapePlex 名称,然后再处理 POLicy 命令。

  • 有关 SMC POLicy 命令、SMSDef 命令和 TAPEREQ 控制语句的更多信息,请参阅《ELS Command, Control Statement, and Utility Reference》。

SMC 策略和专用设备组首选

SMC POLicy 命令可用于在分配过程中首选设备。ESOTeric 参数可指定最多包含八个专用设备组的列表。在磁带机排除过程中,将包括在列出的任何专用设备组中的设备。在磁带机优先级确定过程中,设备按其在专用设备组列表中的位置排序。使用此功能可以执行以下操作:

  • 首选较快或较慢的等效磁带机型号。

  • 在磁带机可用的情况下,选择特定设备类型(例如 9940);如果首选磁带机忙,则选择备选设备类型

默认情况下,SMC 根据以下标准按顺序首选磁带机:

  1. 特定的卷 LSM 位置

  2. 专用设备组列表

  3. LSM 暂存计数。

可以使用 POLicy PREFer 参数更改相对权重。有更多信息,请参阅《ELS Command, Control Statement, and Utility Reference》。

IDAX 上的 SMC 策略

使用 MVS 解释器/动态分配出口 (Interpreter/Dynamic Allocation Exit, IDAX) 可以根据 SMC IDAX 命令设置以及在单个 SMC POLicy 命令中指定的磁带策略来指定额外的用户策略。

通过 SMCIDAX 处理,可以根据在指定 SMC 策略对象中指定的策略,更改专用设备组的 JCL 参数、卷计数、到期日期或保留期或者子系统和程序名称。

这些 IDAX 策略功能通过 SMC IDAX 命令启用,可用于:

  • 指定根据 TAPEREQ 应用 IDAX 策略。指定 SMC IDAX 处理必须先执行,然后再执行 IBM DFSMS 接口处理。IDAX 命令参数 SEQUENCE(FIRST) 指定 SMC IDAX 处理继续 StorageTek DFSMS 处理。

  • 指定将 MOD 数据集视为新的 (MOD(ON))

可使用 SMC POLicy 命令来设置要在 IDAX 过程中应用的策略。仅当指定了 SMC IDAX 命令参数 POLICY(ON) 时,才应用以字母 IDAX 开头的所有策略参数。这些参数包括:

  • IDAXESOTERIC

    此参数指定要替换为 JCL 专用设备组的专用设备组名称。当 JCL 语句不包含任何单元信息时,也可以应用 IDAXESOTERIC。与可以将设备指定为 JCL 专用设备组的一个子集的 POLICY ESOTERIC 参数不同,IDAXESOTERIC 执行“真正的”专用设备组替换。

  • IDAXEXPDTIDAXRETPD

    这两个参数是互斥的,可用于向 DD 语句指定保留期或到期日期,覆盖在 JCL 中可能已指定的任何值。

  • IDAXVOLCNT

    此参数可用于覆盖在 JCL 中指定的卷计数参数。

  • IDAXSUBSYSIDAXPROGRAM

    可以使用这两个参数来指示分配使用 Oracle 的 StorageTek ExHPDM(Extended High-Performance Data Mover,扩展高性能数据移动器)。

IDAX 上的 SMC 专用设备组替换

SMC 可以在 IDAX 上使用 POLicy 命令 IDAXESOTERIC 参数执行专用设备组替换。当 SMC 在 IDAX 上执行专用设备组替换时,原始单元将替换为其他单元(专用设备组)。可以替换任何有效的专用设备组;例如,可以将磁盘专用设备组替换为磁带专用设备组。

注:

  • 如果 SMC IDAX 处理修改了一些单元(可选磁盘),或者将磁带单元更改为磁盘,则建议指定 IDAX 命令参数 SEQUENCE(FIRST) 以允许 SMC DFSMS 处理继续 IBM DFSMS 处理。这可确保按预期方式管理磁带和磁盘数据集。

  • DFSMS 管理的新分配无法用于 SMC IDAX 专用设备组替换。

  • SMC 为所有 DISP=NEW 的数据集执行专用设备组替换。

  • 默认情况下,SMC 将 DISP=MOD 的数据集视为预先存在的数据集,不执行专用设备组替换。仅当指定了 IDAX 命令 MOD(ON) 参数并且对作业的 JCL 中的数据集的第一次引用指定了 DISP=MODDISP=NEW 时,SMC 才会为 DISP=MOD 的数据集执行专用设备组替换。

  • 如果单元关联链的不同成员选择了采用不同 IDAXESOTERIC 参数的 POLICY,则将隔离单元关联链。

  • 作业中的 VOL=REF 链经过验证并在必要时更新为链头专用设备组,以确保遵循卷引用。

  • 必须先指定 SMSDef TEMPdsn(ON) 之后才能为临时数据集执行 IDAX 专用设备组替换。

  • 有关 IDAXSMSDef 命令的更多信息,请参阅《ELS Command, Control Statement, and Utility Reference》。

SMC 策略和 TAPEREQ 控制语句

SMC TAPEREQ 控制语句标识磁带请求属性,其中包括与分配和挂载请求关联的磁带策略。选择的策略基于 TAPEREQ 选择标准,如数据集名称或作业名称。

TAPEREQ POLicy 参数指示 SMC 引用由 SMC POLicy 命令定义的关联 SMC 策略。

TAPEREQ 控制语句位于由 TREQDEF 操作员命令指定的定义数据集中。TAPEREQ 语句必须放在此定义数据集中,不能作为操作员命令发出。

注:

  • 有关 SMC TAPEREQ 控制语句和 POLicy 命令的更多信息,请参阅《ELS Command, Control Statement, and Utility Reference》。

  • 如果有任何 TAPEREQ 语句按名称引用了策略,则必须先处理 POLicy 命令,然后再处理 TREQDEF 命令。有关更多信息,请参见SMCCMDS 数据集样例

  • 如果安装使用了 TAPEREQ 语句但没有 POLICY 或使用了用户出口,请参阅《ELS Legacy Interfaces Reference》以了解有关 POLICY 与其他 TAPEREQ 及用户出口策略指定之间的交互的信息。

按卷序列指定 TAPEREQ 和策略

通过结合使用 TAPEREQ 语句与 POLicy 命令,SMC 可用于根据特定的卷序列号指定分配策略。在有些情况下,此功能可用于将 HSC 非磁带库 VOLATTR 替换为 SMC TAPEREQ 控制语句和 POLicy 命令。

注:

仅当同时指定 POLicy 关键字,并且使用关键字 VOLTYPE(SPECIFIC) 引用以前定义的 SMC 策略的情况下,才允许在 TAPEREQ 语句上使用 VOLSER 关键字。

使用与卷序列关联的策略,可以:

  • 可以为不同客户机的相同卷序列定义不同的卷特征。

    例如,假定在介质为 STK1R 的 HSC 服务器上的 TapePlex 中存在卷序列号 AAAAAA,但在某个特定的客户机上,卷 AAAAAA 是一个非磁带库标准盒式磁带。使用以下 POLicy 命令和 TAPEREQ 语句的组合,SMC 可以绕过对卷 AAAAAA 的卷查找,使用指定的策略信息:

    POLICY NAME(MANVOL) VOLTYPE(SPECIFIC) MEDIA(STANDARD) NOTAPEPLEX
    TAPEREQ VOLSER(AAAAAA) POLICY(MANVOL)
    
  • 根据卷序列将卷查找限制到单个 TapePlex。

    例如,假定某个客户机主机上的 SMC 有两个定义的 TapePlex(PLEX1PLEX2),其中包含重叠的卷序列范围(AAA000-AAA999BBB000-BBB999)。默认情况下,SMC 会按定义顺序查询 TapePlex,并使用来自可识别卷序列的第一个 TapePlex 的信息。使用以下 POLicy 命令与 TAPEREQ 语句的组合,SMC 可以为客户机主机选择正确版本的卷:

    POLICY NAME(PLEX1VOL) VOLTYPE(SPECIFIC) TAPEPLEX(PLEX1)
    POLICY NAME(PLEX2VOL) VOLTYPE(SPECIFIC) TAPEPLEX(PLEX2)
    TAPEREQ VOLSER(AAA000-AAA999) POLICY(PLEX1VOL)
    TAPEREQ VOLSER(BBB000-BBB999) POLICY(PLEX2VOL)
    
  • 直接将磁带库外部的卷分配到特定的 TapePlex 中。

    使用以下 POLicy 命令与 TAPEREQ 语句的组合,SMC 可以绕过磁带库卷查找,并将选择的非磁带库卷分配到与标准磁带兼容的磁带库磁带机:

    POLICY NAME(INLIB) VOLTYPE(SPECIFIC) ESOTERIC(LIB1ESOT) MEDIA(STANDARD) NOTAPEPLEX
    TAPEREQ VOLSER(AAA000-AAA999) POLICY(INLIB)
    

注:

在上面的示例中,POLicy 命令上的 NOTAPEPLEX 参数指示 SMC 系统绕过其 TapePlex 卷查找逻辑。

示例

以下示例展示了推荐的指定 SMC Policy 语句、TREQDEF 命令和 TAPEREQ 控制语句的方法。

  1. 在 SMC Start 过程中包括以下条目:

    //SMCCMDS DD DSN=MY.PARMLIB(MYSMCCMD),DISP=SHR
    
  2. SMCCMDS 成员 MYSMCCMD 中包括以下条目:

    READ DSN(’MY.PARMLIB(SMCPOL)’)
    TREQDEF DSN(’MY.PARMLIB(SMCTREQ)’)
    

    注:

    如果 TAPEREQ 语句包括 POLicy 参数,则必须先处理 POLicy 命令,然后再处理 TREQDEF 命令,因为 TAPEREQ 语句中的策略名称是针对已确定的策略定义验证的。
  3. 将 SMC POLicy 命令添加到成员 SMCPOL 中,例如:

    POLICY NAME(POL1) SUBPOOL(SP1) MEDIA(STK1R) RECTECH(STK1RC) TAPEPLEX(HSC)
    POLICY NAME(POL2) SUBPOOL(SP2) MEDIA(VIRTUAL) MGMTCLAS(ABC)
    
  4. 修改成员 SMCTREQ 中的 TAPEREQ 控制语句以指向指定的策略,例如:

    TAPEREQ DSN(A.B.*) POLICY(POL1)TAPEREQ DSN(A.C.*) POLICY(POL2)
    

    这些 TAPEREQ 语句指向在步骤 3 中定义的 SMC 策略名称。

SMC READ 命令上的 HOST 参数可用于为不同的主机指定不同的策略定义。例如:

READ DSN(MY.PARMLIB(PRODPOLS)) HOST=PRODREAD DSN(MY.PARMLIB(TESTPOLS)) HOST=TEST

如果主机名称为 PROD,则装入成员 PRODPOLS。如果主机名称为 TEST,则装入成员 TESTPOLS

SMC DFSMS 处理

连接到 DFSMS 的 SMC 接口可用于通过从 StorageTek DFSMS ACS 例程返回 MGMTCLAS 名称来选择 SMC POLICY

注:

在《ELS Legacy Interfaces Reference》中介绍了一种使用 SMC DFSMS 接口的备选方法。

启用或禁用 SMC DFSMS 接口

要启用 SMC DFSMS 接口,请按如下方式指定 ALLOCDef 命令的 SMS 参数:

ALLOCDEF SMS=ON

要禁用 SMC DFSMS 接口,请按如下方式指定 ALLOCDef 命令的 SMS 参数:

ALLOCDEF SMS=OFF

定制 SMC DFSMS 接口

使用 SMSDef 命令可以针对您的安装要求定制默认的 SMC DFSMS 支持。此命令可用于包括或绕过特定的 SMC DFSMS 功能。有关 SMSDef 命令的更多信息,请参阅《ELS Command, Control Statement, and Utility Reference》。

定义 StorageTek DFSMS ACS 例程以指定 MGMTCLAS

可通过执行自动类选择 (Automatic Class Selection, ACS) 例程来指定 STORCLASMGMTCLAS

注:

SMC DFSMS 接口不支持 STORCLASMGMTCLAS JCL 参数,因为与 IBM MVS DFSMS 冲突。使用 STORCLAS JCL 参数将导致数据集成为 IBM DFSMS 管理的数据集,而 MGMTCLAS JCL 参数要求 IBM DFSMS 管理的数据集。类似地,不针对 &ACSENVIR=’STKTAP1' 变量测试的 DFSMS 例程会导致数据集成为 IBM DFSMS 管理的数据集,无法供 SMC DFSMS 接口使用。

建议指定 SMSDef MGMTPol (ALL) 以指示 SMC 将所有 DFSMS 返回的管理类名称作为策略名称处理。

使用 SMSDef 命令可以通过包括或绕过特定的 SMC DFSMS 功能来定制默认的 SMC DFSMS 支持。有关此命令的更多信息,请参阅《ELS Command, Control Statement, and Utility Reference》。

调用 ACS 例程

IBM DFSMS 先调用变量 &ACSENVIR 设置为 ALLOC 的 ACS 例程,然后 SMC 再调用变量 &ACSENVIR 设置为 STKTAP1 的 ACS 例程。

SMC 在处理中的以下各点调用 ACS 例程:

JES2

  • SSI55 解释器/动态分配出口 (Interpreter/Dynamic Allocation Exit, IDAX)

  • SSI24 通用分配

  • 挂载消息拦截

JES3

  • SSI55 解释器/动态分配出口 (Interpreter/Dynamic Allocation Exit, IDAX)

  • JES3 转换器/解释器 (Converter/Interpreter, C/I)

  • SSI23 JES3 动态分配

  • JES3 主设备调度程序 (Main Device Scheduler, MDS)

  • 挂载消息拦截

ACS 例程顺序

ACS 例程按以下顺序调用:

  1. 数据类

  2. 存储类

  3. 管理类

  4. 存储组。

仅在分配存储类时调用管理类和存储组 ACS 例程。

SMC 的 DFSMS 自动类选择 (Automatic Class Selection, ACS) 例程环境

在该信息对 SMC 可用时,以下只读变量列表由 SMC 传递到 DFSMS。并非所有变量都可用于对 ACS 例程的每个调用。特别是,在 JES3 地址空间中发生的进程(如 MDS)不提供对包含这些字段值的 MVS 控制块的 SMC 访问。有关例外,请参见每个 DFSMS 接口的介绍。

  • &ACSENVIR(等于 SMC 接口的 STKTAP1

  • &ALLVOL

  • &ANYVOL

  • &DATACLAS

  • &DD

  • &DSORG

  • &DSN

  • &DSTYPE

  • &EXPDT

  • &FILENUM

  • &JOB

  • &LABEL

  • &LIBNAME

  • &NVOL

  • &PGM

  • &RETPD

  • &SYSNAME

  • &SYSPLEX

  • &UNIT

STKTAP1 环境中,&ANYVOL 变量仅用于匹配特定的 VOLSER,不包含用于 VOL=REF 分配的 REF=xx 值。

在 JCL DD 语句指定此参数时设置 &DATACLAS 字段。

如果指定了 SMSDef TEMPdsn(ON),并且当前正在处理的数据集是临时数据集,则将 &LIBNAME 设置为字符 3

如果您的安装使用 IGDACSXT 例程在 DFSMS ACS 例程调用之前修改只读变量,请注意以下变量(即使已初始化)不会在 &ACSENVIR 设置为 STKTAP1 的情况下传递到 DFSMS ACS 例程。

  • &ACCT_JOB

  • &ACCT_STEP

  • &GROUP

  • &MSGVP

  • &USER

  • &XMODE

有关使用只读变量时的约束条件的更多信息,请参阅 IBM 出版物《DFSMSdfp Storage Administration Reference》。

MGMTCLAS 例程注意事项

在编写管理类例程时,请考虑以下事项:

  • 仅在分配了存储类时调用管理类例程。

  • 必须针对 &ACSENVIR=’STKTAP1’ 只读变量值测试管理类例程。不针对 &ACSENVIR=’STKTAP1' 变量测试的 DFSMS 例程会导致数据集成为 IBM DFSMS 管理的数据集,无法供 SMC DFSMS 接口使用。

  • 在卷挂载消息 IEC501A 拦截过程中,&UNIT 只读变量包含通用单元类型(如 3490)。因此,在为使用 &UNIT 只读变量的 ACS 例程编写代码时,必须仔细考虑。

  • DFSMS 发出的 JES3 静态分配的消息会路由到 SMC GTF 跟踪文件。

下图提供了一个管理类例程样例:

示例 4-2 创建管理类例程

PROC STORCLAS

IF &ACSENVIR = ’STKTAP1’ THEN
    SET &STORCLAS = ’STKSTORC’
  END
END
======================================================================
PROC MGMTCLAS

FILTLIST LOCAL INCLUDE(BACKUP*.**.,
                       PROD.BKP*.**)
FILTLIST REMOTE INCLUDE(PROD.OFFSITE.**)

  IF &ACSENVIR = ’STKTAP1’ THEN
    SELECT
    WHEN (&DSN = &LOCAL)
      SET &MGMTCLAS = ’INVTAPE’
    WHEN (&DSN = &REMOTE)
      SET &MGMTCLAS = ’OFFVTAPE’
    END
END

注:

在此示例中,STORCLAS 例程向每个调用分配了一个存储类。这样可确保 MGMTCLAS 例程在挂载时也被驱动。

只读变量的可用性

在 DFSMS ACS 例程处理过程中,SMC 会在信息可用时设置所有只读变量的值。并非所有信息都可用于 SMC 为其调用 ACS 例程的每个进程。

JES2

在分配时以及需要处理消息 IEF233A 的挂载期间,&UNIT 只读变量会被 SMC 设置为通过 DD 语句的 UNIT= 参数指定的值。在需要处理消息 IEC501A 的挂载期间,SMC 会将 &UNIT 只读变量设置为通用单元类型(如 3490)。

在动态分配过程中,可通过编写 DADACL 文本单元代码来指定 &DATACLAS 值。但是,在处理挂载消息 IEF233A 时,SMC 无法使用此值。

JES3

在 JES3 C/I POSTSCAN 处理过程中,以下只读变量对 SMC 不可用:

  • &DATACLAS(如果已在 JCL 中指定)

  • &EXPDT

  • &PGM

  • &RETPD

在 SSI23 动态分配处理过程中,所有只读变量都可用于 ACS 例程。

在 JES3 MDS 处理过程中,以下只读变量对 SMC 不可用:

  • &DATACLAS(如果已在 JCL 中指定)

  • &EXPDT

  • &PGM

  • &RETPD

IAT5210 挂载消息处理过程中,以下只读变量对 SMC 不可用:

  • &DATACLAS(如果已在 JCL 中指定)

  • &EXPDT

  • &PGM

  • &RETPD

  • &UNIT(不包含原始专用设备组,但包含选择的设备编号,如 0A10

在处理动态分配的挂载消息 IEF233A 时,SVC99 文本单元 DADACL 指定的 &DATACLAS 值不可用。

在处理挂载消息 IEC501A 时,SMC 会将 &UNIT 只读变量设置为通用单元类型(如 3490)。

注:

与 DFSMS 的每个 SMC 交互都会调用所有级别的 ACS 例程。上面列出的变量可用性适用于所有 ACS 例程。

验证 DFSMS ACS 例程执行

DFSMS 提供了以下验证正确 ACS 例程执行的方法:

  • ACS 例程中的 DFSMS WRITE 语句

  • DFSMS ISMF 测试功能

在 SMC 调用 DFSMS ACS 例程时,DFSMS WRITE 语句发出的所有消息都会路由 GTF 跟踪文件(如果 SMC 跟踪处于活动状态)。

注:

  • DFSMS WRITE 语句发送到 SSI55 解释器/动态分配出口 (Interpreter/Dynamic Allocation Exit, IDAX) 专用设备组替换阶段的 SYSMSG 数据集。

  • DFSMS WRITE 语句发送到 SSI55 解释器/动态分配出口 (Interpreter/Dynamic Allocation Exit, IDAX) 专用设备组替换阶段的 SYSMSG 数据集。