在中端系统(AS / 400,IBM i等)上使用DB2 25年之后,我现在的任务是成为大型机(z / OS)上DB2的数据库管理员。我为这里的“菜鸟问题”表示歉意,但我仍然对大型机保持关注。
当前,每天早晨,我使用“ DB2命令”屏幕中的DISPLAY命令手动检查几个表空间的状态:
例如
Cmd 1 ===> -DISPLAY DB(DN*) SPACENAM(*) USE LOCKS LIMIT(*)
Cmd 2 ===> -DISPLAY DB(DP*) SPACENAM(*) USE LOCKS LIMIT(*)
这将在屏幕上显示几页输出,每个屏幕满后暂停。如果有任何表空间处于无效状态,我可以对此做一些事情。
最终,我想发布其中一些DISPLAY语句,将输出定向到输出数据集。然后,我可以手动检查该数据集,也可以编写程序以解析输出数据集并报告(或修复)任何异常情况。
对于您所有大型机DB2 DBA来说,这可能超级简单,但是如何编写这些命令的脚本?我要使用REXX吗?如果可以,怎么办?
感谢您的帮助!
戴夫
答案 0 :(得分:3)
最简单的方法是将TSO终端控制程序下的命令作为批处理作业运行。
这可能看起来像这样(省略了JOB卡):
//*----------------------------------------------
//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
将包含您的输入命令,结果输出以及其他一些杂乱的混合,但是实现它基本上是零的工作。
答案 1 :(得分:2)
您说您手动在 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
答案 2 :(得分:1)
一个非常基本的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
答案 3 :(得分:0)
您可以编写rexx脚本以建立与Db2子系统的连接,然后执行相同的命令。让我查找示例并将其发送给您。这是您可以用来从REXX ADDRESS DSNREXX连接到DB2的命令。 CONNECT''DB01'
答案 4 :(得分:0)
如果那里的用户更喜欢unix shell,则可以使用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