

AWS 大型机现代化服务（托管运行时环境体验）不再向新客户开放。有关类似于 AWS 大型机现代化服务（托管运行时环境体验）的功能，请浏览 AWS 大型机现代化服务（自我管理体验）。现有客户可以继续正常使用该服务。有关更多信息，请参阅[AWS 大型机现代化可用性变更](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html)。

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# M2DFUTIL 批处理实用程序
<a name="m2dfutil"></a>

M2DFUTIL 是一个 JCL 实用程序，提供数据集备份、还原、删除和复制功能，类似于大型机 ADRDSSU 实用程序提供的支持。该程序保留了 ADRDSSU 中的许多 SYSIN 参数，从而简化了迁移到这个新实用程序的过程。

**Topics**
+ [支持的平台](#m2dfutil-platforms)
+ [平台要求](#m2dfutil-platform)
+ [计划的未来支持](#m2udfutil-future-support)
+ [资产位置](#mdfutil-assets)
+ [在 Amazon EC2（包括 AppStream 2.0）上配置 M2DFUTIL 或 AWS 大型机现代化运行时](#mdfutil-dependencies)
+ [一般语法](#mdfutil-syntax)
+ [样本 JCLs](#mdfutil-sample-jcls)

## 支持的平台
<a name="m2dfutil-platforms"></a>

您可以在以下任何平台上使用 M2DFUTIL：
+ Windows 上的火箭软件（前身为 Micro Focus）ES（64 位和 32 位）
+ Linux 上的火箭软件 ES（64 位）

## 平台要求
<a name="m2dfutil-platform"></a>

M2DFUTIL 依赖于调用脚本来执行正则表达式测试。在 Windows 上，必须安装 Windows Services for Linux (WSL) 才能运行此脚本。

## 计划的未来支持
<a name="m2udfutil-future-support"></a>

目前不可用但未来可用的大型机 ADRDSSU 实用程序功能包括：
+ M2 托管
+ VSAM
+ 对文件重命名的 COPY 支持
+ 对 RESTORE 的 RENAME 支持 
+ 多个 INCLUDE 和 EXCLUDE
+ 通过 DSORG、CREDT、EXPDT 进行子查询的 BY 子句
+ 用于重试入队失败的 MWAIT 子句
+ 对 DUMP/RESTORE 的 S3 存储支持

## 资产位置
<a name="mdfutil-assets"></a>

该实用程序的加载模块在 Linux 上称为 `M2DFUTIL.so`，在 Windows 上称为 `M2DFUTIL.dll`。可在以下位置找到此加载模块：
+ Linux：`/opt/aws/m2/microfocus/utilities/64bit`
+ Windows（32 位）：`C:\AWS\M2\MicroFocus\Utilities\32bit`
+ Windows（64 位）：`C:\AWS\M2\MicroFocus\Utilities\64bit`

用于正则表达式测试的脚本称为 `compare.sh`。可在以下位置找到此脚本：
+ Linux：`/opt/aws/m2/microfocus/utilities/scripts`
+ Windows（32 位）：`C:\AWS\M2\MicroFocus\Utilities\scripts`

## 在 Amazon EC2（包括 AppStream 2.0）上配置 M2DFUTIL 或 AWS 大型机现代化运行时
<a name="mdfutil-dependencies"></a>

使用以下内容配置您的 Enterprise Server 区域：
+ 在 **[ES-Environment]** 中添加以下变量
  + `M2DFUTILS_BASE_LOC` - DUMP 输出的默认位置
  + `M2DFUTILS_SCRIPTPATH` - **资产位置**中记录的 `compare.sh` 脚本的位置
  + `M2DFUTILS_VERBOSE` - [VERBOSE 或 NORMAL]。此变量控制 `SYSPRINT ` 输出中的细节级别
+ 验证加载模块路径是否已添加到 `JES\Configuration\JES Program Path` 设置中
+ 验证实用程序目录中的脚本是否具有运行权限。您可以在 Linux 环境中使用 `chmod + x <script name>` 命令添加运行权限

## 一般语法
<a name="mdfutil-syntax"></a>

### DUMP
<a name="mdfutil-dump"></a>

提供将文件从当前编目位置复制到备份位置的功能。此位置当前必须是一个文件系统。

#### 流程
<a name="mdfutil-dump-process"></a>

DUMP 将执行下列操作：

1. 创建目标位置目录。

1. 将该目标位置目录归类为 PDS 成员。

1. 通过处理 INCLUDE 参数来确定要包含的文件。

1. 通过处理 EXCLUDE 参数来取消选择包含的文件。

1. 确定是否对转储的文件执行 DELETED 操作。

1. 将文件入队以待处理。

1. 复制这个文件。

1. 将已复制文件编目的 DCB 信息导出到目标位置中的副文件，以帮助将来执行 RESTORE 操作。

#### 语法
<a name="mdfutil-dump-syntax"></a>

```
DUMP
TARGET ( TARGET LOCATION  )    -
INCLUDE ( DSN. )
[ EXCLUDE ( DSN ) ]
[ CANCEL | IGNORE ]
[ DELETE ]
```

#### 必填参数
<a name="mdfutil-dump-requiredparam"></a>

以下是必需的 DUMP 参数：
+ `SYSPRINT DD NAME` - 用于包含其他日志信息
+ `TARGET` - 目标位置。它可以是：
  + 转储位置的完整路径
  + 在 **M2DFUTILS\$1BASE\$1LOC** 变量中定义的位置中创建的子目录名称
+ `INCLUDE` - 要么是单个命名的 DSNAME，要么是有效的大型机 DSN 搜索字符串
+ `EXCLUDE` - 要么是单个命名的 DSNAME，要么是有效的大型机 DSN 搜索字符串

#### 可选参数
<a name="mdfutil-dump-optionalparam"></a>
+ CANCEL - 如果出现任何错误，则取消。已处理的文件将被保留
+ （默认）IGNORE - 忽略任何错误并处理直到结束
+ DELETE - 如果未出现 ENQ 错误，则会删除该文件并取消编目

### 删除
<a name="mdfutil-delete"></a>

提供批量删除和取消编目文件的功能。文件未备份。

#### 过程
<a name="mdfutil-delete-process"></a>

DELETE 将执行下列操作：

1. 通过处理 INCLUDE 参数来确定要包含的文件。

1. 通过处理 EXCLUDE 参数来取消选择包含的文件。

1. 将文件入队以待处理。将处置设置为“OLD”、“DELETE”、“KEEP”。

#### 语法
<a name="mdfutil-delete-syntax"></a>

```
DELETE
INCLUDE ( DSN )
[ EXCLUDE ( DSN ) ]
[ CANCEL | IGNORE ]
[ DELETE ]
```

#### 必填参数
<a name="mdfutil-delete-requiredparam"></a>

以下是必需的 DELETE 参数：
+ `SYSPRINT DD NAME` - 用于包含其他日志信息
+ `INCLUDE` - 要么是单个命名的 DSNAME，要么是有效的大型机 DSN 搜索字符串 
+ `EXCLUDE` - 要么是单个命名的 DSNAME，要么是有效的大型机 DSN 搜索字符串 

#### 可选参数
<a name="mdfutil-delete-optionalparam"></a>
+ CANCEL - 如果出现任何错误，则取消。已处理的文件将被保留 
+ （默认）IGNORE - 忽略任何错误并处理直到结束

### RESTORE
<a name="mdfutil-restore"></a>

提供恢复以前使用 DUMP 备份的文件的功能。除非使用 RENAME 来更改已恢复的 DSNAME，否则文件将恢复到原始编目位置。

#### 流程
<a name="mdfutil-restore-process"></a>

RESTORE 将执行下列操作：

1. 验证源位置目录。

1. 通过处理目录导出文件来确定要包含的文件。

1. 通过处理 EXCLUDE 参数来取消选择包含的文件。

1. 将文件入队以待处理。

1. 未根据其导出信息编目的目录文件。

1. 如果已对文件进行编目并且导出目录信息相同，则当设置了 REPLACE 选项时，RESTORE 将替换编目的数据集。

#### 语法
<a name="mdfutil-restore-syntax"></a>

```
RESTORE
SOURCE ( TARGET LOCATION ) 
INCLUDE ( DSN )
[ EXCLUDE ( DSN ) ]
[ CANCEL | IGNORE ]
[ REPLACE]
```

#### 必填参数
<a name="mdfutil-restore-requiredparam"></a>

以下是必需的 RESTORE 参数：
+ `SYSPRINT DD NAME` - 用于包含其他日志信息 
+ `SOURCE` - 源位置。它可以是：
  + 转储位置的完整路径
  + 在 **M2DFUTILS\$1BASE\$1LOC** 变量中定义的位置中创建的子目录名称
+ `INCLUDE` - 要么是单个命名的 DSNAME，要么是有效的大型机 DSN 搜索字符串
+ `EXCLUDE` - 要么是单个命名的 DSNAME，要么是有效的大型机 DSN 搜索字符串

#### 可选参数
<a name="mdfutil-restore-optionalparam"></a>
+ CANCEL - 如果出现任何错误，则取消。已处理的文件已保留
+ （默认）IGNORE - 忽略任何错误并处理直到结束
+ REPLACE - 如果正在恢复的文件已经编目并且目录记录相同，则替换已编目文件

## 样本 JCLs
<a name="mdfutil-sample-jcls"></a>

 **DUMP 作业**

此作业将创建一个名为 `TESTDUMP` 的子目录。这是 **M2DFUTILS\$1BASE\$1LOC** 变量指定的默认备份位置。它将为这个名为 `M2DFUTILS.TESTDUMP` 的备份创建一个 PDS 库。导出的目录数据存储在名为 `CATDUMP.DAT` 的备份目录中的行序文件中。所有选定文件都将复制到此备份目录。

```
//M2DFDMP JOB 'M2DFDMP',CLASS=A,MSGCLASS=X
//STEP001  EXEC PGM=M2DFUTIL
//SYSPRINT DD DSN=TESTDUMP.SYSPRINT,
//        DISP=(NEW,CATLG,DELETE),
//        DCB=(RECFM=LSEQ,LRECL=256)
//SYSIN    DD *
DUMP TARGET(TESTDUMP)               -
     INCLUDE(TEST.FB.FILE*.ABC)     -
 CANCEL
/*
//
```

 **DELETE 作业**

此作业将从目录中删除与 INCLUDE 参数匹配的所有文件。

```
/M2DFDEL JOB 'M2DFDEL',CLASS=A,MSGCLASS=X
//STEP001  EXEC PGM=M2DFUTIL
//SYSPRINT DD DSN=TESTDEL.SYSPRINT,
//        DISP=(NEW,CATLG,DELETE),
//        DCB=(RECFM=LSEQ,LRECL=256)
//SYSPRINT DD SYSOUT=A
//SYSIN    DD *
  DELETE                               -
     INCLUDE(TEST.FB.FILE*.ABC)        -
 CANCEL
/*
 //
```

 **RESTORE 作业**

此作业将从 `TESTDUMP` 备份位置恢复与 INCLUDE 参数匹配的文件。如果编目文件与 CATDUMP 导出中的文件相同，并且指定了 REPLACE 选项，则编目文件将被替换。

```
//M2DFREST JOB 'M2DFREST',CLASS=A,MSGCLASS=X
//STEP001  EXEC PGM=M2DFUTIL
////SYSPRINT DD DSN=TESTREST.SYSPRINT,
//        DISP=(NEW,CATLG,DELETE),
//        DCB=(RECFM=LSEQ,LRECL=256)
//SYSPRINT DD SYSOUT=A
//SYSIN    DD *
RESTORE SOURCE(TESTDUMP)               -
     INCLUDE(TEST.FB.FILE*.ABC)        -
 IGNORE
 REPLACE
/*
//
```