DB2 for z/OS 存储过程的二进制部署
用于二进制部署的环境设置
为了支持 DB2 for z/OS V8 和 V9 中外部 SQL 存储过程的二进制部署,必须执行以下步骤:
运行 z/OS Enablement 示例任务,启用对使用 DB2 提供的存储过程的支持。
设置使用 DB2 提供的存储过程而需要的授权。
使用和源装载库相同的 Dataset Control Block (DCB) 信息分配目标装载库。
在将要执行被迁移的存储过程的目标服务器上设置 WLM 过程,从而使得 JDK 级别与源 JDK 兼容。
确认 SYSIBM.SYSLOCATIONS 和 SYSIBM.SYSLUNAMES 中存在源服务器和目标服务器的编目条目。
为了支持 DB2 for z/OS V8 和 V9 中的 Java 存储过程的二进制部署,在连接到服务器时需要使用 IBM DB2 Universal Driver for SQLJ 和 JDBC。Java 存储过程需要使用这个驱动程序进行连接,并且在使用二进制文件部署到其他服务器之前,需要首先使用 DWB 进行部署。
z/OS Administration Enablement 存储过程
z/OS Administration Enablement 存储过程一开始是开发用来为 DB2 for LUW Control Center 提供服务器端的功能。DWB 使用这些存储过程来处理在部署外部 SQL 存储过程时,需要执行的与 JCL 相关的大部分任务。相应的活动任务在 SDSNSAMP 库的 DSNTIJCC 成员中可以找到。
此外,DB2 for z/OS V8 要求应用 PTF UK10768。
授权设置
连接源服务器和目标服务器以及执行从源服务器到目标服务器的二进制部署时所使用的用户 ID,需要拥有某些 DB2 数据库管理权限以及附加的 RACF 特权。该用户 ID 还需要一些特权来操纵被部署的存储过程中所使用到的对象。用于登录到目标服务器的用户 ID 需要目标装载库上的 RACF 授权,以及提交 JCL 和 USS 命令所需的权限。IBM 红皮书 “Through the Call and Beyond” 的第 25 章详细描述了使用 DB2 提供的存储过程所需的各种授权。这里也给出了一个示例授权任务。
目标装载库
外部 SQL 存储过程的二进制部署需要将来自源服务器的装载模块复制到目标服务器上的一个数据集中。DWB 从编目中获得源服务器的装载库信息。但是,它不能确定接收装载模块的数据集的名称,也不能确定这个数据集是否已经存在。然后,还必须以与源装载库相同的 DCB 信息来预先分配目标装载库。
Java 方面的考虑
当使用二进制文件部署 Java 存储过程时,一开始将 Java 存储过程部署到源服务器时所采用的 JDK 级别必须与目标服务器的 JDK 级别兼容。例如,如果源服务器的 JDK 级别是 1.4.2,那么建议为目标服务器使用的 JDK 级别为 1.4.2 或更高。
二进制部署的限制和条件
在使用二进制文件进行部署时,存在一些条件和限制。下面是用户可能碰到的大多数常见错误。
使用二进制文件部署之前用 DSNTJSPP 构建的 Java 存储过程
使用 DSNTJSPP 构建实用程序创建的 Java 存储过程不适合二进制部署。这是因为编译和 JAR 归档工作是在服务器端由 DSNTJSPP 实用程序来完成的。DWB 不能确定 JAR 文件的位置和类路径。
使用二进制文件部署之前用二进制部署的外部 SQL 存储过程
当最初部署外部 SQL 存储过程时,要编目源数据集和 DBRM 数据集的名称。当使用二进制文件部署这个存储过程时,这样的信息不会传送到目标服务器。因此,DWB 不能使用二进制文件重新部署这个存储过程。
将本地 SQL 存储过程部署到 DB2 for z/OS V8
这种情况下会出现一个 “function not supported” 错误消息,因为 DB2 for z/OS V8 不支持本地 SQL 存储过程。
删除一个用二进制文件部署的过程
要删除一个用二进制文件部署的过程,可以使用 DWB,或者对该过程发出一个 DROP PROCEDURE RESTRICT 命令。
EDC5139I Operation not permitted; or DSNACCJS - execution failed: __login( ) unsuccessful during binary deploy.
发出二进制部署的用户 ID 在 RACF 程序控制中没有定义。用于切换用户的 _login 函数调用失败。请确保运行了 IBM 红皮书 “Through the Call and Beyond” 中第 25 章列出的授权步骤。
IEB127I RECFM INCOMPATIBLE -- INPUT RECFM=U OUTPUT RECFM=FB
目标装载模块既不是分区数据集,也没有与源装载模块数据集相同的记录格式 U。由于该部署是在工作站上进行的,发出部署的用户可能无法获得那样的信息。
UnsupportedClassVersionException
最初将 Java 存储过程部署到源服务器时使用的 JDK 级别与目标服务器上的 JDK 级别不兼容。
分布式设置问题
在分布式环境中,需要设置源服务器和目标服务器,在它们各自的 Communication Database 编目中正确地定义源和目标 LOCATION 和 LUNAMES。此外,在这两个系统中都必须启动 DB2 的 Distributed Data Facility(DDF)。
结束语
使用二进制文件进行部署可以为客户带来一些益处,包括:
它允许在同一个环境中,通常是在开发环境中,进行开发和调试。如果使用变更管理系统,则构成存储过程的所有对象(例如源代码、DBRM、JAR 文件)都在这个环境中得到管理。
对于使用 DWB 构建的外部 SQL 存储过程,源文件放在开发环境的目录中。使用二进制文件进行部署时,不会将源代码也传送到目标服务器。因此,目标服务器上不需要有编译器,这可以看作是客户的附加成本。
使用二进制文件部署 Java 存储过程时,不需要在目标服务器上重新编译。同样, Java 源代码、DDL 和 JAR 文件也是放在开发环境中。
对于这两种类型的存储过程,被部署的二进制文件不能被部署到另一个目标上。这样可以防止被部署的存储过程在其他地方被修改和重新部署。开发环境控制着存储过程将被部署到什么地方。