批量DL/I程序中应包含的项目
当您使用批量DL/I程序与 Db2 时,您必须在程序中包含某些项目。
批处理DL/I程序可以发出:
- 任何 IMS 批量呼叫,ROLS、SETS和SYNC呼叫除外。 ROLS和SETS调用提供中间退避点处理,而 Db2 不支持。 SYNC调用提供提交点处理,无需使用值来标识提交点。 IMS SYNC不支持批量呼叫, DL/I批量支持也不支持。 Db2
在应用程序中发出 ROLS、SETS 或 SYNC 调用会导致系统崩溃 X'04E' ,原因代码 X'00D44057' 寄存器15中。
- GSAM来电。
- IMS 系统服务电话。
- 任何SQL语句,除了COMMIT和ROLLBACK。 IMS 和 环境不允许使用这些SQL语句;但是, 和 环境允许使用ROLLBACK TO SAVEPOINT。 CICS® IMS CICS 您可以使用 IMS CHKP命令提交数据,使用 IMS ROLL或ROLB命令回滚更改。
发出COMMIT语句会导致SQLCODE -925;发出ROLLBACK语句会导致SQLCODE -926。 这些语句也会返回SQLSTATE '2D521'。
- 任何对标准或传统访问方法的调用(例如,QSAM、VSAM等)。
Db2 和 IMS 数据库以及通过GSAM访问的顺序数据集的重新启动功能可通过 IMS 检查点和重新启动功能实现。
Db2 通过使用以下 和 功能,可以访问 和DL/I数据: Db2 IMS Db2
- IMS 同步调用,提交并异常终止恢复单元
- Db2 IMS 附件功能可处理两阶段提交协议,并使两个系统能够在故障后重启期间同步恢复单元
- IMS 日志,用于记录提交瞬间
在数据共享环境中,DL/I批处理支持组附件或子组附件。 在DL/I批处理作业的 DDITV02 数据集的SSN参数中,您可以指定组附件名称,而不是子系统名称。
在DL/I批处理作业中使用 Db2 的要求
在批处理作业中使用 Db2 需要对应用程序和作业步骤 JCL 进行以下更改:
- 在应用程序中添加SQL语句,以访问 Db2 数据。 然后,您必须预编译应用程序并将生成的DBRM绑定到一个程序包中。
- 在运行应用程序之前,请使用JOBLIB、STEPLIB或链接书访问 Db2 加载库,以便加载 Db2 模块。
- 在由 DDITV02 DD语句指定的数据集中,指定应用程序的程序名称和计划名称,以及DL/I批处理的连接名称。
在输入数据集或子系统中,指定有关 Db2 和 IMS 之间连接的信息。 输入数据集名称通过 DDITV02 DD语句指定。 子系统成员名称由DL/I批处理调用过程中的参数SSM=指定。
- 可选地,使用 DDOTV02 DD语句指定输出数据集。 您可能需要这些数据集才能接收来自 IMS 附件工具的关于可疑线程和诊断信息的邮件。
使用DL/I批处理程序的设计考虑因素
- DL/I批处理中的地址空间:
- DL/I 批处理区域独立于 IMS 控制区域和 CICS 地址空间。 DL/I批处理区域将DL/I代码与应用程序一起加载到应用程序区域。
- DL/I批处理提交:
- IMS 请经常使用批量发送电子邮件功能,以免长时间占用资源。
- DL/I批处理中的SQL语句和 IMS 调用:
- DL/I批处理应用程序不能使用SQL COMMIT和ROLLBACK语句,否则会出现SQL错误代码。 DLI/I批处理应用程序也不能使用ROLS、SETS和SYNC调用,否则应用程序将异常终止。
- 检查点调用DL/I批处理:
- 用SQL语句和DL/I调用编写程序,并使用检查点调用。 检查点的频率取决于应用程序的设计。 批量应用程序发出的所有检查点必须唯一。 在检查点,DL/I定位丢失, Db2 游标关闭(可能被定义为WITH HOLD的游标除外),提交持续时间锁被释放(也有例外),数据库更改对 IMS 和 Db2 都是永久性的。
- DL/I批处理中的应用程序同步:
- 您可以设计一个不使用 IMS 检查点的应用程序。 在这种情况下,如果程序在完成前异常终止, Db2 会撤销任何更新,您可以使用 IMS 批处理撤销工具来撤销DL/I的更改。
您也可以通过 IMS 动态地撤销同一作业中的更新。 您必须将BKO参数指定为“Y”,并将 IMS 日志分配给DASD。
如果程序终止后,作业步骤结束前,作业运行的系统出现故障,您可能会遇到问题。 如果您在程序结束前没有检查点调用, Db2 将在不涉及 IMS 的情况下提交工作单元。 如果系统在DL/I提交数据之前发生故障,则 Db2 数据与DL/I更改不同步。 如果在 Db2 提交过程中系统发生故障, Db2 数据可能会出现错误。 当您重新启动应用程序时,请使用XRST调用获取检查点信息并解决任何 Db2 不确定的工作单元。
建议 :在任何更新工作结束时,务必设置一个象征性的检查点,以便协调 IMS 和 Db2 未完成的工作单元的提交。
- DL/I批处理中的检查点和XRST注意事项:
- 如果您使用XRST调用, Db2 会认为发出的任何检查点都是象征性的检查点。 象征性检查点呼叫的选项与基本检查点呼叫的选项不同。 使用错误的检查站呼叫形式可能会导致问题。
如果您没有使用XRST呼叫, Db2 会认为发出的任何检查点呼叫都是基本检查点。
为了简化重启操作,请使用EBCDIC字符作为检查点ID。
当应用程序需要重启时,必须使用符号检查点和XRST调用。 如果您使用XRST调用,则必须首先发出 IMS 调用,且必须在任何SQL语句之前发出。 此外,您只能使用一次XRST呼叫。
- 在DL/I批处理中,将“abends”同步调用:
- 如果应用程序包含不正确的 IMS 同步调用(CHKP、ROLB、ROLL或XRST),导致 IMS 在PCB中发出错误状态代码, Db2 将结束应用程序。 在将程序投入生产前,请务必测试这些呼叫。