如何在 z/OS 中编写 DB2 命令脚本?

How do I script DB2 commands in z/OS?

在中端系统(AS/400、IBM i 等)上使用 DB2 25 年后,我现在的任务是成为大型机上 DB2 的数据库管理员 (z/OS) .对于这里的“菜鸟问题”,我深表歉意,但我仍然在思考大型机。

目前,每天早上,我在“DB2 命令”屏幕中使用 DISPLAY 命令手动检查几个表空间的状态:

例如

Cmd 1       ===>       -DISPLAY DB(DN*) SPACENAM(*) USE LOCKS LIMIT(*)
Cmd 2       ===>       -DISPLAY DB(DP*) SPACENAM(*) USE LOCKS LIMIT(*)

这会在屏幕上显示几页输出,每次满屏后暂停。如果任何表空间处于无效状态,我可以采取一些措施。

最后,我想发出几个这样的 DISPLAY 语句,将输出定向到输出数据集。然后,我可以手动检查该数据集,也可以编写一个程序来解析输出数据集并报告(或修复)任何异常情况。

对于所有大型机 DB2 DBA 来说,这可能非常容易,但我如何编写这些命令的脚本?我使用 REXX 吗?如果可以,怎么做?

感谢您的帮助!

戴夫

您可以编写 rexx 脚本来建立与 Db2 子系统的连接,然后执行相同的命令。让我找到示例并发送给您。这是您可以用来从 REXX ADDRESS 连接到 DB2 的命令DSNREXX 'CONNECT' 'DB01'

最简单的方法是运行将TSO终端控制程序下的命令作为批处理作业。

这可能看起来像这样(省略工作卡):

 //*----------------------------------------------                 
 //DISDB    EXEC PGM=IKJEFT01,DYNAMNBR=20                          
 //*----------------------------------------------                 
 //STEPLIB   DD DISP=SHR,DSN=DB2.DSNLOAD                           
 //SYSPRINT DD SYSOUT=*                                            
 //SYSTSPRT DD DISP=SHR,DSN=YOUR.OUTPUT.DATASET                                            
 //SYSTSIN  DD *                                                   
   DSN SYSTEM(DBSYS)                                                
   -DISPLAY DB(DN*) SPACENAM(*) USE LOCKS LIMIT(*)                                                  
   -DISPLAY DB(DP*) SPACENAM(*) USE LOCKS LIMIT(*)                 
 //                                                                

唯一的问题是 SYSTSPRT 将混合您的输入命令、结果输出和一些其他混乱,但实现起来基本上是零工作量。

您说您手动DB2 命令 屏幕中发出命令。在 z/OS 中,我认为 TSO 中有一个类似的菜单。在 TSO 中发出 DB2I 命令,您应该会看到一个菜单,其中包含选项 7 DB2 Commands。这是手动方式。

如果您想 运行 批量执行一系列命令,即编写脚本,请提交作业 运行使用 DSN TSO 命令。

//jobname JOB ...
//STEP01  EXEC PGM=IKJEFT01
//SYSTSPRT DD SYSYOUT=*
//SYSTSIN  DD *
 DSN SYSTEM(subsysid)
 -dis db(...) ....
... more commmands
/*

输出将写入 DD SYSTSPRT。

除非您想以编程方式解释命令的结果,否则无需编写 REXX 脚本。

HTH

一个非常基本的 REXX 解决方案:

/* REXX*/                                                   
DB2NAME = 'DSN'        /* <== change db2name here */                                     
"DELSTACK"                                                  
QUEUE "-DISPLAY DB(DN*) SPACENAM(*) USE LOCKS LIMIT(*)"  
QUEUE "-DISPLAY DB(DP*) SPACENAM(*) USE LOCKS LIMIT(*)"
QUEUE "END"                                                 
X = OUTTRAP(IN.)                                            
"DSN SYSTEM("!!DB2NAME!!")"                                 
X = OUTTRAP(OFF)                                            
DO I = 1 TO IN.0                                            
  SAY IN.I                                                  
END                                                         

如果有用户喜欢 unix shell,您可以通过 ssh 进入 unix 系统服务并使用命令行处理器和 db2 提供的存储过程。

.profile 片段设置环境变量:

# DB2 CLP
export JAVA_HOME=/usr/lpp/java/java180/J8.0_64
export CLASSPATH=$CLASSPATH:/usr/lpp/db2/db2c10/base/lib/clp.jar
export JCCJAR=$JCCJAR:/usr/lpp/db2/db2c10/jdbc/classes
export CLASSPATH=$CLASSPATH:$JCCJAR/db2jcc4.jar
export CLASSPATH=$CLASSPATH:$JCCJAR/db2jcc_license_cisuz.jar
export CLASSPATH=$CLASSPATH:$JCCJAR/db2jcc_license_cu.jar
export PATH=$PATH:$JAVA_HOME:$JAVA_HOME/bin
export CLPPROPERTIESFILE=~/clp.properties
# alias to allow using shorter db2clp versis long path.
alias  db2clp="/usr/lpp/java/java180/J8.0/bin/java com.ibm.db2.clp.db2"

示例 clp.properties 文件。 注意 - 我使用散列作为 SQL 终止字符。这允许我创建使用分号作为过程中的行终止符的本机存储过程,以及过程终止符代码的散列。

#Specify the value as ON/OFF or leave them blank
DisplaySQLCA=ON
AutoCommit=OFF
InputFilename=
OutputFilename=
DisplayOutput=ON
StopOnError=OFF
TerminationChar=#
Echo=ON
StripHeaders=OFF
MaxLinesFromSelect=ALL
MaxColumnWidth=132
IsolationLevel=UR

text.sql 包含:

CONNECT TO localhost:446/STLEC1
CALL SYSPROC.ADMIN_COMMAND_DB2 ('-DISPLAY BPOOL(BP0)', 40, NULL, NULL,?, ?, ?, ?, ?, ?, ?, ?) #

通过shell命令批量执行CLP:

export IBM_DB_UID=your-userid-here
export IBM_DB_PM=your-password-here
db2clp -f text.sql -u $IBM_DB_UID/$IBM_DB_PWD

您可以将结果写入文件并在输出上使用 python、node 或 unix 命令。

有用的链接: 命令行处理器: https://www.ibm.com/support/knowledgecenter/en/SSEPEK_12.0.0/comref/src/tpc/db2z_commandlineprocessor.html

Db2 提供的程序: https://www.ibm.com/support/knowledgecenter/en/SSEPEK_12.0.0/sqlref/src/tpc/db2z_suppliedstoredprocedures.html