用 Data Studio Developer 在 DB2 z/OS 上调试存储过程,第 2 部分: 在 z/OS 上配置存储过程调试会话管理程序

详细了解如何为 z/OS® 系统配置 Unified Debugger 会话管理程序,以及如何使用例程管理会话管理程序。在 z/OS 上适当地设置会话管理程序有助于使用 IBM Data Studio Developer 调试 DB2® for z/OS 服务器上的存储过程。

Emily Zhang, 顾问软件工程师, WSO2 Inc

Emily ZhangEmily Zhang 是 IBM Application Development Tooling 组织的顾问软件工程师,在加州 San Jose 的 IBM Silicon Valley Laboratory 工作。她是 IBM Data Studio 开发团队的成员。她的专业领域包括日常工具开发和 Unified Debugger。



Tom Miller, 高级软件工程师, WSO2 Inc

Tom MillerTom Miller 是在 San Jose 的 IBM Silicon Valley Laboratory 工作的高级软件工程师,早在 1982 年就加入了 IBM。自 2001 年以来,Tom 一直是 DB2 for z/OS 开发团队的成员,负责 SQL 存储过程技术的研发。Tom 是 IBM Unified Debugger 开发团队的成员,负责把 Unified Debugger 技术引入 DB2 for z/OS 上的 Java 和 SQL 过程。在担任当前职位之前,Tom 是 QMF 架构师。



2009 年 6 月 11 日

简介

用 Data Studio Developer 在 DB2 z/OS 上调试存储过程,第 1 部分:用 IBM Data Studio Developer v1.2 调试 DB2 for z/OS SQL 存储过程 讨论了 Data Studio Developer 提供的存储过程调试器,本文延续它的内容。为简单起见,前一篇文章假设已经在客户机或网络上的服务器上配置了 Unified Debugger 会话管理程序。本文讨论如何在 z/OS 服务器上设置和操作 Unified Debugger 会话管理程序,从而改进调试性能。

下一节简要介绍会话管理程序并快速回顾调试方法。

Unified Debugger 会话管理程序

IBM Data Studio Developer 包含一个 Unified Debugger 客户机。Data Studio Developer 支持调试 SQL 和 Java™ 存储过程。在 Data Studio Developer 中调试存储过程时,使用一种称为 Unified Debugger 的技术。Unified Debugger 有三个组件(见图 1):调试服务器、调试客户机和会话管理程序。

图 1. Unified Debugger 框架
Unified Debugger 框架

在这个框架中,调试客户机与会话管理程序通信,会话管理程序与调试服务器通信。会话管理程序是一个中间件,负责协调客户机和服务器组件之间的通信,管理整个调试会话。关于 Unified Debugger 的更多信息请参见 用 Data Studio Developer 在 DB2 z/OS 上调试存储过程,第 1 部分:用 IBM Data Studio Developer v1.2 调试 DB2 for z/OS SQL 存储过程

会话管理程序是 Unified Debugger 框架的核心组件。在使用 Data Studio Developer 调试存储过程之前,必须在网络上某个地方(客户机、DB2 服务器或其他地方)启动会话管理程序进程。在会话管理程序运行时,它的表现与网络守护进程相似,负责使用 TCP/IP 连接协调调试客户机和 DB2 服务器之间的通信。可以在网络上的任何地方运行它。如果没有在 z/OS 上正确地设置会话管理程序,就会影响使用 Data Studio Developer 的调试体验,需要更多的手工干预。

会话管理程序功能和在 DB2 z/OS 上的可用性

Unified Debugger 基本上是一种基于 DB2 V9 的技术。因此,DB2 V9 服务器可以使用 Unified Debugger 的所有功能、特性和组件。会话管理程序是一个独立的 Unified Debugger 组件,2006 年以后发布的各种新客户机和 DB2 服务器产品附带这个组件。尽管较早的 DB2 V8 版本可以使用一部分 Unified Debugger 服务器组件(以前在 V8 中称为 SQL Debugger),但是 DB2 V8 不包含会话管理程序,也不包含启动会话管理程序的功能。

表 1 总结在不同的 DB2 版本上 Unified Debugger 特性和会话管理程序的可用性。

表 1. 不同 DB2 for z/OS 版本的特性对比
DB2 V9 for z/OS DB2 z/OS v8(应用了 PTF UK25860)
Unified Debugger 可以调试 LANGUAGE SQL 和 LANGUAGE JAVA 存储过程。Unified Debugger 可以调试 LANGUAGE SQL 存储过程。
Unified Debugger 会话管理程序 (db2dbgm.jar) 随 DB2 基本特性一起发行。平台上不附带会话管理程序。可以把会话管理程序从调试客户机发行版复制到平台上并手工运行。
提供 DBG_RUNSESSIONMANAGER 支持例程(需要 DB2UDSMD 守护进程的 started 任务设置)。不支持调试客户机在连接的服务器上启动会话管理程序。
这与 DB2 for Linux, UNIX, and Windows® V9 和 DB2 for i V5R4 相似。这与 DB2 for Linux, UNIX, and Windows V8 FP15 相似。

用 Data Studio Developer 进行调试

前一篇文章详细讨论了调试存储过程的步骤。在讨论如何设置会话管理程序之前,先简要回顾一下。

要想调试存储过程,SQL 或 Java 存储过程必须满足以下条件:

  • 它必须在 Data Project Explorer 中可见。可以在数据开发项目中创建新的存储过程,也可以把存储过程从 Data Source Explorer(以前称为 Database Explorer)复制或拖放到 Data Project Explorer 中。
  • 它必须启用了调试。

要想判断存储过程是否启用了调试,那么右键单击存储过程。应该会出现可用的 Debug 菜单项,见图 2。

图 2. 启用了调试的过程
启用了调试的过程

如果服务器连接支持 Unified Debugger,但是 Debug 菜单项被禁用了,那么必须在启用调试选项的情况下部署存储过程。右键单击存储过程并选择 Deploy。在启动 Deploy Routines 向导时,需要在 Routine Options 页面上选中 Enable Debugging 复选框,见图 3。

图 3. Deploy Routines 向导
Deploy Routines 向导

在选中这个复选框时,成功的部署会把调试模式设置反映在 DB2 编目中。

在部署之后,通过配置 DB2 Stored Procedure Debugger 首选项设置与调试器相关的首选项,包括用来管理调试会话的会话管理程序的位置。显示首选项页面的方法是,从菜单栏中选择 Window > Preferences,然后展开 Run/Debug 并选择 DB2 Stored Procedure Debugger

一个要点

如果打算调试 DB2 V9 服务器上的 LANGUAGE JAVA 存储过程,那么对于将调试 DB2 服务器上的 LANGUAGE JAVA 存储过程的所有调试客户机,应该使用同一个会话管理程序。在这种情况下,建议使用连接的服务器上的默认会话管理程序位置。

如果选择 Run the session manager on each connected server 复选框,Data Studio Developer 会在连接的服务器上寻找正在运行的会话管理程序;如果没有找到,它会请求在此位置上运行会话管理程序(只适用于 DB2 V9 for z/OS)。也可以在某个地方手工运行会话管理程序并在 Use already running session manager 部分下面指定此位置。

图 4. 调试器首选项页面
调试器首选项页面

可以看到,可以按照不同的方式设置调试所用的会话管理程序。本文帮助您进一步掌握 z/OS 平台上的这些选项。


把会话管理程序设置为 z/OS 服务器上的守护进程

为了在连接的 DB2 z/OS V9 服务器上无缝地使用会话管理程序和 Data Studio Developer,必须在 z/OS 系统上定义一个名为 DB2UDSMD 的守护进程。在 z/OS 上,守护进程由 started 任务代表,started 任务是一种可以由 z/OS 系统命令 START 启动的特殊任务类型。started 任务 DB2UDSMD 的定义与大家熟悉的其他系统守护进程相似,比如 FTPD 和 TELNETD。这个 started 任务通过自己的 JCL 运行会话管理程序 Java 程序 (db2dbgm.jar)。started 任务还与一个特殊的安全系统定义相关联,它把 JCL 与指定的用户 ID 联系起来。

按照以下步骤设置 started 任务。

步骤 1:向 RACF 定义 started 任务

使用 JCL 向 z/OS 上的安全系统定义 started 任务 DB2UDSMD。需要指定与 started 任务相关联的用户 ID。另外,因为这个 started 任务将运行来自 OMVS 的 Java 程序,所以必须为此用户定义一个 OMVS 段定义,包括 UID 和主目录。最后,需要在当前内存中启用 started 任务定义。清单 1 给出一个示例。

清单 1. 向 RACF 定义 started 任务
//UDBG1    JOB ('RACF'),CLASS=A,MSGCLASS=A,MSGLEVEL=1,                  
//         USER=********, PASSWORD=*******                               
//*--------------------------------------------------------------------
//* Define the Unified Debugger Session Manager Started Task to RACF.   
//* A security manager ID must be used to perform the definitions.     
//*                                                                     
//* The STARTED task is defined by a RACF profile named DB2UDSMD.**     
//* USRT005 will be the ID associated with this Started Task.           
//* Since the task will run a java program from OMVS, also assign an    
//* OMVS segment definition to the user (UID, home dir, etc.)          
//* Finally, activate the STARTED task definition in current memory.    
//*--------------------------------------------------------------------
//RACFDEF  EXEC TSOBATCH                                                
//SYSTSIN DD *                                                          
  ALTUSER USRT005 OMVS( UID(5) HOME('/u/usrt005') PROGRAM('/bin/sh') ) 
  RDEFINE STARTED DB2UDSMD.** STDATA(USER(USRT005))                     
  SETROPTS RACLIST(STARTED) REFRESH                                     
END

步骤 2:创建环境设置

接下来,在 HFS 中创建一个包含环境设置的文件,在 z/OS 上作为 started 任务运行 Unified Debugger 会话管理程序时将使用这些环境设置。把这个文件命名为有意义的名称,比如 DB2UDSMDenvironment。

把 DB2UDSMDenvironment 文件放在 步骤 1 中为 started 任务选择的 ID 的主目录中。这个文件必须至少指定 ENV、PATH 和 CLASSPATH 的值。在随 DB2 for z/OS V9 发行的 HFS 中,会话管理程序 jar 文件的默认位置是 /usr/lpp/db2910_base/classes/db2dbgm.jar

清单 2 给出在 USRT005 的主目录中保存的 DB2UDSMDenvironment 示例文件的完整内容。可以使用这个文件作为模板编写自己的作业。

清单 2. 会话管理程序的环境文件设置示例
//UDBG2    JOB 'USER=$$USER','<USERNAME:JOBNAME>',CLASS=A,             
//         MSGCLASS=A,MSGLEVEL=(1,1), REGION=4096K,        
//         USER=USRT005,PASSWORD=*******                                  
//*--------------------------------------------------------------------
//* Create a file in the HFS to hold the Environment settings used when
//* the Unified Debugger Session Manager runs as a Started Task on z/OS
//*                                                                    
//* USRT005 is the ID associated with the Started Task.                
//* Place the file in that users home directory.                       
//* Name the file DB2UDSMDenvironment                                      
//*--------------------------------------------------------------------
//*--------------------------------------------------------------------
//* Create a file in the HFS from inline data using COPY               
//*--------------------------------------------------------------------
//OCOPY    EXEC PGM=IKJEFT01,DYNAMNBR=30                               
//SYSTSPRT DD SYSOUT=*                                                 
//HFSOUT   DD  PATH='/u/usrt005/DB2UDSMDenvironment',                      
//             PATHOPTS=(OWRONLY,OCREAT,OAPPEND,OTRUNC),               
//             PATHMODE=(SIRUSR,SIWUSR,SIRGRP,SIROTH)                  
//INLINE   DD *                                                        
#----------------------------------------------------------------------
# Environment settings for running the Unified Debugger Session Manager
# * _BPX_BATCH_SPAWN=NO                                                
# * _BPX_SHAREAS=YES                                                   
#     Arrange for the JVM to run in the same address space. This avoids
#     launching 2 additional address spaces for the Started Task.      
# * ENV=                                                               
#     Reference this file. Insulates from PATH and CLASSPATH changes    
#     present in etc/profile.                                          
# * PATH=                                                              
#     The location of the desired JAVA release, and system binaries.   
# * CLASSPATH=                                                         
#     The location of the UDBG Session Manager jar file                
# * JAVA_COMPILER=NONE                                                 
#     Disable the JIT. The Started Task runs the Session Manager only  
#     one time, so disabling this saves space that will not be used.   
#----------------------------------------------------------------------
_BPX_BATCH_SPAWN=NO                                                    
_BPX_SHAREAS=YES                                                       
ENV=/u/usrt005/DB2UDSMDenvironment                                     
PATH=/usr/lpp/java150/J5.0/bin:/bin                                    
CLASSPATH=/usr/lpp/db2/db2910_base/classes/db2dbgm.jar                 
JAVA_COMPILER=NONE                                                     
//SYSTSIN DD *                                                         
OCOPY INDD(INLINE) OUTDD(HFSOUT) TEXT                                  
//

步骤 3:创建 started 任务 JCL

为 Unified Debugger 会话管理程序创建 started 任务 JCL,并把它放在系统 proclib 中。这个 JCL 必须命名为 DB2UDSMD。在执行 START 命令时,这个 JCL 在 z/OS 上运行 Unified Debugger 会话管理程序。在这个示例中,根据 RACF started 类配置文件 DB2UDSMD.** 中的定义,与这个 started 任务相关联的 ID 是 USRT005。清单 3 给出 started 任务 JCL 的示例。

清单 3. 创建 started 任务 JCL 的示例作业
//UDBG3    JOB 'USER=$$USER','<USERNAME:JOBNAME>',CLASS=A,              
//         MSGCLASS=A,MSGLEVEL=(1,1), REGION=4096K,         
//         USER=********,PASSWORD=*******                               
//*--------------------------------------------------------------------
//* Create the Started Task JCL for DB2UDSMD. A START command will then
//* be able to launch the Unified Debugger Session Manager on z/OS.
//* USRT005 is the ID associated with the Started Task, as defined in  
//* the RACF STARTED class profile DB2UDSMD.**                          
//*--------------------------------------------------------------------
//*--------------------------------------------------------------------
//* Use IEBUPDTE to write a JCL member into SYS1.PROCLIB        
//*--------------------------------------------------------------------
//WRITEJCL EXEC PGM=IEBUPDTE,PARM=NEW                                   
//SYSPRINT DD SYSOUT=*                                                  
//SYSUDUMP DD SYSOUT=*                                                  
//SYSUT2   DD DISP=SHR,DSN=SYS1.PROCLIB                         
//SYSIN    DD DATA                                                      
./  ADD NAME=DB2UDSMD                                                   
//DB2UDSMD PROC PORT=4553,TIMEOUT=60                                    
//*                                                                     
//*    DB2 Unified Debugger Session Manager DAEMON FOR OPENEDITION      
//*                                                                     
//*    This JCL assumes no .profile exists for the user.              
//*  
//* Environment settings (PATH, CLASSPATH) come from STDENV file.  
//*                                                                   
//DB2UDSMD EXEC PGM=BPXBATCH,DYNAMNBR=128,REGION=0M,TIME=1440,        
//             PARM='SH date;java com.ibm.db2.psmd.mgr.Daemon -timeout
//             &TIMEOUT -port &PORT -log /dev/null;date'              
//STDOUT   DD  PATH='/tmp/DB2UDSMD.stdout',                           
//             PATHOPTS=(OWRONLY,OCREAT,OAPPEND,OTRUNC),              
//             PATHMODE=(SIRUSR,SIWUSR,SIRGRP,SIROTH)                 
//STDERR   DD  PATH='/tmp/DB2UDSMD.stdout',                           
//             PATHOPTS=(OWRONLY,OCREAT,OAPPEND,OTRUNC),              
//             PATHMODE=(SIRUSR,SIWUSR,SIRGRP,SIROTH)                 
//STDENV   DD  PATH='/u/usrt005/DB2UDSMDenvironment',                 
//             PATHOPTS=ORDONLY                                       
//             PATHOPTS=ORDONLY                                         
./  ENDUP                                                               
/*

可以使用清单 3 中的代码按以下步骤创建自己的文件:

  1. 替换 STDOUT、STDERR 和 STDENV 路径。注意,STDENV 引用 步骤 2 中创建的 HFS 文件。
  2. 确保在 步骤 1 中分配给 started 任务的 ID 具有对 STDOUT 和 STDERR 读写文件的适当特权。
  3. 修改 PORT 和 TIMEOUT 的默认值。

步骤 4:测试

可以通过在 z/OS 控制台上执行 START 命令 START DB2UDSMD,TIMEOUT=1 检查步骤 1-3 是否成功地完成了。等待几分钟,从而有充足的时间启动 started 任务,启动会话管理程序,然后经过一分钟的无活动时间之后会话管理程序关闭。在 started 任务 DB2UDSMD 停止之后,查看在 started 任务 JCL 的 STDOUT 中指定的 HFS 文件的内容。清单 4 给出成功结果的示例。

清单 4. 成功的 HFS 文件结果示例
Mon Mar 2 12:48:32 PST 2009
args[0]: -timeout
args[1]: 1
args[2]: -port
args[3]: 4553
args[4]: -log
args[5]: /dev/null
Code Level: 070418
Debug Session Manager started on IP: 9.30.88.135 - port: 4553
idleTimeOut: 1
Mon Mar 2 12:49:37 PST 2009

使用会话管理程序支持例程

Unified Debugger 提供下面的 DB2 存储过程以支持会话管理程序操作:

  • DBG_LOOKUPSESSIONMANAGER:发现默认的会话管理程序网络地址。
  • DBG_PINGSESSIONMANAGER:检测网络上正在运行的会话管理程序。
  • DBG_RUNSESSIONMANAGER:使用前面描述的 started 任务定义在连接的 DB2 服务器系统上启动会话管理程序。

在 DB2 z/OS 服务器上设置 Unified Debugger 期间,通过使用 DB2 提供的安装后作业 DSNTIJSD 安装这些存储过程。安装之后,可以使用 Data Studio Developer 查看和运行这些存储过程。这些过程在 Data Source Explorer 中的 SYSPROC 模式下列出,见图 5。

图 5. Data Source Explorer 中 SYSPROC 模式下的 DBG 过程
Data Source Explorer 中 SYSPROC 模式下的 DBG 过程

下面几节详细描述这些过程。

DBG_LOOKUPSESSIONMANAGER

DBG_LOOKUPSESSIONMANAGER 用于从 DB2 服务器的角度显示默认的会话管理程序网络地址。可以从 Data Studio Developer 方便地调用这个例程。它不需要输入,总是返回服务器的 IP 地址和默认的会话管理程序监听端口。Unified Debugger 的默认端口是 4553。在使用其他 Unified Debugger 支持例程管理连接的 DB2 服务器上的会话管理程序时需要这些信息。

图 6. 查询默认的会话管理程序地址
查询默认的会话管理程序地址

DBG_PINGSESSIONMANAGER

DBG_PINGSESSIONMANAGER 用于检测是否有正在运行的会话管理程序。这个例程 ping 指定的 IP 地址和监听端口上的会话管理程序。这可以是在网络上运行的任何会话管理程序,而不只是在连接的 DB2 服务器上运行的会话管理程序。

这是最重要的会话管理程序支持例程,因为它从 DB2 服务器的角度检查与会话管理程序的实际网络通信。在调试存储过程时,采用相同的通信路径。

图 7 演示如何使用 DBG_PINGSESSIONMANAGER 测试在使用 DBG_LOOKUPSESSIONMANAGER 获得的默认主机地址和端口上运行的会话管理程序。

图 7. 指定 DBG_ PINGSESSIONMANAGER 的参数
指定 DBG_ PINGSESSIONMANAGER 的参数

成功地运行这个过程之后,在 SQL Results 视图中检查 Parameters 选项卡。如果输出参数 XMLREPLY 没有值,就说明对主机 IP 的 ping 操作失败了,见图 8。

图 8. 对会话管理程序不成功的 ping 操作
对会话管理程序不成功的 ping 操作

不成功的 ping 操作意味着在指定的 IP 地址上没有运行监听指定端口的会话管理程序,或者在到这个 IP 地址的路径中出现了网络连接问题。因为在这个示例中 ping 在连接的 DB2 服务器的 IP 地址上运行的会话管理程序,所以可以排除出现网络问题的可能性。因此,可以肯定在连接的 DB2 服务器上没有运行监听指定端口的会话管理程序。

DBG_RUNSESSIONMANAGER

DBG_RUNSESSIONMANAGER 用于在连接的 DB2 服务器上启动会话管理程序。这个例程使用本地操作系统机制作为一个新的系统任务启动会话管理程序。在 z/OS 上,用一个 START 命令执行这个操作,但是需要 DB2UDSMD started 任务的定义。

DBG_RUNSESSIONMANAGER 的输入是希望会话管理程序监听的端口和等待调试会话的空闲时间周期。图 9 中的示例使用默认监听端口值和 30 分钟的空闲等待时间。(注意,IP 地址是隐含的,也就是 DBG_LOOKUPSESSIONMANAGER 返回的主机地址)。

图 9. 指定 DBG_RUNSESSIONMANAGER 的参数
指定 DBG_RUNSESSIONMANAGER 的参数

在 z/OS 上,DBG_RUNSESSIONMANAGER 存储过程实际上只发出系统命令 START DB2UDSMD。START 命令的返回码出现在 BLOB 输出参数 XMLREPLY 中。(这个输出供程序使用,而不是直接供用户使用。如果愿意,可以在十六进制表示中的位置 141 上找到返回码。寻找 72633D223022,这表示六个二进制字符,即 rc=“0”)。

可以按照以下步骤查明返回码:

  1. 单击图 10 所示的图标,切换到文本模式的显示结果。
图 10. 运行会话管理程序的结果
运行会话管理程序的结果

这会把显示变成图 11 这样。

图 11. 以文本模式显示的运行会话管理程序的结果
以文本模式显示的运行会话管理程序的结果
  1. 向右滚动到正确的位置 (141),即可看到返回码,见图 12。
图 12. 以文本模式显示的运行会话管理程序的结果,rc=“0”
以文本模式显示的运行会话管理程序的结果,rc=“0”

确认 START 命令的返回码为零是很重要的,但是这并不意味着会话管理程序正在运行。发出 START 命令就像是按下火箭的发射按钮。如果一切正常,那么引擎点火,火箭离开发射台,火箭把卫星送入轨道,卫星在轨道上展开天线并开始通信;整个过程需要一定的时间。同样,在调用 DBG_RUNSESSIONMANAGER 之后,会话管理程序不一定能够马上准备好。启动新的系统任务、建立 Java 环境以及装载和启动会话管理程序需要一定的时间。

如果一切正常,启动过程的所有步骤会顺利完成。启动过程花费的时间受 z/OS 系统上其他活动的影响很大,但是通常应该在几秒范围内。为了确认会话管理程序是否已经启动了,应该再次调用 DBG_PINGSESSIONMANAGER。等待 5 到 30 秒,然后发出第二次调用,查看输出参数 XMLREPLY 中是否有返回值;如果有任何返回值,就表示会话管理程序已经成功地启动,已经准备好管理调试会话了,见图 13。

图 13. 在运行会话管理程序之后 ping 会话管理程序
在运行会话管理程序之后 ping 会话管理程序

在 z/OS 系统上手工运行会话管理程序

本文前面讨论了如何在 z/OS 系统上设置会话管理程序,把它定义为普通的网络守护进程,让系统设施可以启动它,并且可通过 Data Studio Developer 客户机在连接的 DB2 服务器上管理它。为了提供更强的灵活性,现在看看如何在 z/OS 系统上手工运行会话管理程序。这个过程与在网络上其他任何地方(包括在自己的工作站上)手工运行会话管理程序相似。

会话管理程序是一个 Java 程序 (db2dbgm.jar),所以在有适当的 Java 运行时环境的任何地方都可以执行它。包含 Java JRE 1.5 的 z/OS 系统是很合适的。这里的示例使用一个安装了 DB2 for z/OS V8 的 z/OS 系统,z/OS 系统上没有附带会话管理程序 .jar 文件。

首先,收集以下软件和信息:

  • 会话管理程序 .jar 文件 (db2dbgm.jar) 的拷贝。可以使用 Data Studio Developer 附带的拷贝。
  • 目标 z/OS 系统上 Java JRE 二进制代码的路径。使用在设置 started 任务的步骤 2 中使用的值。它对于给定的 z/OS 系统的任何用户应该是相同的。需要向 z/OS 系统管理员询问这个目录路径。
  • 目标 z/OS 系统的 IP 地址。可以通过在 DB2 for z/OS V8 服务器上运行 SYSPROC.DBG_LOOKUPSESSIONMANAGER 来获得这个 IP 地址。以这种方式获得 IP 地址还可以确认在 V8 DB2 服务器上已经完成了所需的 Unified Debugger 设置。
  • 一个可以登录 z/OS UNIX System Services (USS) 环境的 ID 及其主目录。此示例使用 usrt003。
  • 启动一个登录到 z/OS UNIX System Services 环境的终端会话。此示例从一个工作站命令窗口使用 telnet。

按照以下步骤手工运行会话管理程序。

步骤 1:使用 FTP 把会话管理程序 .jar 的二进制拷贝传输到主目录

图 14 给出把 db2dbgm.jar 文件复制到 z/OS 的 FTP 命令序列。

图 14. 使用 FTP 把 db2dbgm.jar 文件传输到服务器
使用 FTP 把 db2dbgm.jar 文件传输到服务器

步骤 2:使用 telnet 登录用户 ID,确认复制的会话管理程序 .jar 文件和 Java 环境可用

  1. 输入 telnet <server-ip>
    注意,一些系统可能要求 telnet 命令中有第二个参数。如果 z/OS 系统的 telnet 监听端口不是默认值 23,就要指定 telnet 监听端口。
  2. 出现提示时,输入用户 ID 和密码。
  3. 进入主目录,确认这里有会话管理程序 .jar 文件。
  4. 输入让 Java 识别本身的命令,要指定 Java JRE 的完整目录路径和 fullversion 选项,见图 15。
图 15. 使用 telnet 连接服务器
使用 telnet 连接服务器

步骤 3:手工运行会话管理程序 Java 程序

可以通过执行一个长命令运行 db2dbgm.jar。把这个命令分隔为几个命令,可能比较容易理解,如下所示:

export PATH=/usr/lpp/java150/J5.0/bin:$PATH
export CLASSPATH=./db2dbgm.jar
java com.ibm.db2.psmd.mgr.Daemon –port 4554 –timeout 1

为了进行检验,这个示例设置的超时值是 1 秒。一般情况下,使用更大的值,比如 30 秒(或者使用 0 表示无限期),这样就有充分的时间返回到 Data Studio Developer 去调试存储过程和使用已经运行的会话管理程序。如果发生超时,只要仍然用 UNIX® System Services ID 登录,就可以重新输入 Java 命令来重新运行会话管理程序。

图 16. 通过 telnet 运行会话管理程序
通过 telnet 运行会话管理程序

要想中断或取消正在运行的会话管理程序,只需按 Ctrl-C。如果设置了无限期的超时值 (-timeout 0),就需要以这种方式中断会话管理程序。

考虑编写一个 shell 脚本,通过它从用户 ID 执行会话管理程序。只需在工作站上打开文本编辑器,编写脚本文件内容,然后以适当的文件名保存脚本,比如 runsm.sh。然后,使用 FTP 把文本文件传输到您的 z/OS USS 主目录。

清单 5 给出一个示例 shell 脚本。一定要指定 Java JRE 二进制代码在 z/OS 系统上的正确路径。

清单 5. 示例 shell 脚本 (runsm.sh)
#! /bin/sh 
# Script to manually run the Unified Debugger Session Manager
# when located in the current directory
#   Syntax:  
#     . runsm.sh   port  timeout  log 
#   Defaults are: 
#     . runsm.sh   4554  30       /dev/null
# 
# Locate Java on the system from environment variable JAVA_HOME
export JAVA_HOME=${JAVA_HOME:-/usr/lpp/java150/J5.0/bin}
#
# Start with an empty log file, when specified 
if test "${3:-/dev/null}" != "/dev/null"
then if test -f $3
  then if test -w $3
    then echo Removing existing logfile "$3"
         rm -f $3  
    fi
  fi
fi
echo 'Running Unified Debugger Session Manager (use Ctrl-C to cancel)'
date
$JAVA_HOME/java -cp ./db2dbgm.jar com.ibm.db2.psmd.mgr.Daemon \
-port ${1:-4554} -timeout ${2:-30} -log ${3:-/dev/null}
date
# end script

启动了会话管理程序之后,返回到 Data Studio Developer 并配置存储过程调试器首选项。单击 Window > Preferences,然后展开 Run/Debug 菜单并选择 DB2 Stored Procedure Debugger,见图 17。

图 17. 设置调试首选项
设置调试首选项

尽管在 z/OS 上手工运行了会话管理程序,但是因为是在安装连接的 DB2 服务器的 z/OS 系统上运行它的,所以在存储过程调试器首选项页面中可以使用两种设置之一。一定要指定手工启动的会话管理程序显示的端口和 IP 地址。

单击 OK 关闭首选项页面。现在,可以开始调试了。


收集 IBM 服务所需的会话管理程序跟踪

会话管理程序提供跟踪功能,IBM 服务人员可能要求您启用跟踪以收集信息,从而帮助诊断在用 Unified Debugger 调试存储过程时遇到的问题。在执行会话管理程序 Java 程序时,通过为日志选项指定文件名,启用会话管理程序跟踪功能。日志选项需要一个文件名。在示例中,指定了日志选项,但是使用一个特殊的文件名 (/dev/null),它是一个占位符,根本不是真正的文件。(也可以从 Java 命令中完全删除日志选项,这会禁止任何跟踪活动。不要在命令中留下没有文件名的日志选项。应该同时删除日志选项和文件名)。

要想启用 IBM 服务所需的会话管理程序跟踪,需要添加或修改日志选项,引用系统上的一个可读写文件。在运行时,会话管理程序会不断地把跟踪记录追加到日志文件中,所以要仔细计划。应该用一个新文件或比较空的文件启用跟踪,并根据诊断活动的需要限制启用跟踪的时间长度。因此,与通过 started 任务 JCL 运行的会话管理程序相比,从手工启动的会话管理程序收集会话管理程序跟踪更容易。但是,对于以这两种方式启动的会话管理程序,都可以启用跟踪功能。


结束语

有了 Unified Debugger 技术,就很容易使用 Data Studio Developer 调试存储过程。会话管理程序是这种调试技术的核心,所以根据自己的情况运行它可以提高生产力。可以选择运行会话管理程序的位置和 Data Studio Developer 使用它的方式。

本文讨论了如何在 z/OS 上设置和操作调试会话管理程序。这里的示例演示了如何使用会话管理程序支持例程在连接的 DB2 服务器上启动会话管理程序,所以调试存储过程的开发人员可以使用 Data Studio Developer 调试首选项页面列出的以下选项之一:

  • Run the session manager on each connected server:Data Studio Developer 会发现在连接的 DB2 服务器上启动的会话管理程序,采用的方法与使用 DBG_PINGSESSIONMANAGER 例程确认启动成功相同。
  • Use already running session manager:指定通过 DBG_LOOKUPSESSIONMANAGER 获得的 IP 地址和 DBG_RUNSESSIONMANAGER 使用的端口值,Data Studio Developer 会使用 DBG_PINGSESSIONMANAGER 确认指定的会话管理程序位置能够对通信做出响应,然后它就开始使用用户手工启动的会话管理程序。

本文还讲解了如何通过编写包含适当命令的 shell 脚本来管理 z/OS 系统上的会话管理程序。

最后,本文讨论了如何为会话管理程序跟踪指定日志文件,从而向 IBM 服务人员提供诊断问题所需的信息。

致谢

我们衷心感谢 Kathy Zeidenstein 和其他审阅者帮助审阅本文!

参考资料

学习

获得产品和技术

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management
ArticleID=396112
ArticleTitle=用 Data Studio Developer 在 DB2 z/OS 上调试存储过程,第 2 部分: 在 z/OS 上配置存储过程调试会话管理程序
publish-date=06112009