Как мне написать команды DB2 в z / OS? - PullRequest
0 голосов
/ 16 января 2019

После 25 лет использования DB2 в системах среднего уровня (AS / 400, IBM i и т. Д.) Передо мной сейчас стоит задача администратора базы данных DB2 на мэйнфрейме (z / OS). Я прошу прощения за «вопросы новичка» здесь, но я все еще думаю о мэйнфрейме.

В настоящее время каждое утро я вручную проверяю состояние нескольких табличных пространств с помощью команды DISPLAY на экране «Команды DB2»:

, например

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

Это отображает несколько страниц вывода на экран, делая паузу после каждого полного экрана. Если какое-либо табличное пространство находится в недопустимом состоянии, я могу что-то с этим сделать.

В конечном счете, я хотел бы выпустить несколько из этих операторов DISPLAY, направляя вывод в выходной набор данных. Затем я могу либо проверить этот набор данных вручную, либо, возможно, написать программу для анализа выходного набора данных и сообщения (или исправления) любых аномалий.

Вероятно, это очень просто для всех вас, администраторов баз данных DB2, но как мне написать эти команды? Я использую REXX? Если да, то как?

Спасибо за вашу помощь!

Dave

Ответы [ 4 ]

0 голосов
/ 18 января 2019

Очень базовое решение 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                                                         
0 голосов
/ 16 января 2019

Самый простой способ - запускать команды в рамках программы управления терминалом 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 будет содержать смесь ваших команд ввода, результирующий вывод и немного другого беспорядка, но это практически нулевое усилие для реализации.

0 голосов
/ 16 января 2019

Вы говорите, что вручную запускаете команды на экране Команды DB2 . В z / OS есть похожее, я думаю, меню в TSO. Введите команду DB2I в TSO, и вам должно быть представлено меню с опцией 7 Команды DB2 . Это ручной способ.

Если вы хотите запустить серию команд в пакетном режиме, то есть в сценарии, отправьте задание, выполнив команду DSN TSO.

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

Вывод будет записан в DD SYSTSPRT.

Нет необходимости писать сценарии REXX, если вы не хотите программно интерпретировать результат команд.

НТН

0 голосов
/ 16 января 2019

Вы можете написать сценарий rexx для создания соединения с подсистемой Db2, а затем выполнить ту же команду. Позвольте мне найти образец и отправить вам ... это команда, которую вы можете использовать для соединения с DB2 из REXX ADDRESS DSNREXX ' СОЕДИНИТЬ '' DB01 '

...