quinta-feira, fevereiro 16, 2017

UEX2 e UEX12: Copiando PLOGs e CLOGs Automaticamente

A gestão dos PLOGs e CLOGs é uma atividade essencial para garantir a continuidade operacional e a recuperabilidade de um ambiente Adabas. Como essas áreas possuem capacidade limitada, é necessário automatizar o processo de cópia e backup dos logs sempre que atingem sua capacidade máxima, evitando interrupções no processamento e reduzindo riscos operacionais. Para atender a essa necessidade, o Adabas disponibiliza duas User Exits específicas para o gerenciamento automático dos PLOGs e CLOGs: a UEX2 e a UEX12. Embora ambas tenham o mesmo objetivo, elas apresentam diferenças importantes em termos de arquitetura, flexibilidade e manutenção operacional.

Introdução

No Adabas, existem duas User Exits para automatizar o backup quando as áreas de PLOGs e CLOGs ficam 100% cheias:

* User Exit 2 (UEX2): destinada ao processamento de CLOGs/PLOGs em configuração dual (dois datasets PLOGs).
* User Exit 12 (UEX12): introduzida a partir do ADA74x, destinada ao processamento de múltiplos datasets de CLOGs/PLOGs, suportando até oito datasets.

As UEX2 e UEX12 são mutuamente exclusivas em uma sessão de núcleo do Adabas, ou seja, apenas uma delas pode ser utilizada por vez.

Qual a vantagem da UEX12 ao UEX2?

Na UEX2, caso o job de cópia do CLOG/PLOG necessite de alguma atualização (por exemplo, alteração de JCL ou de parâmetros), é necessário seguir o seguinte procedimento:

1. Editar e alterar o código-fonte da User Exit;
2. Recompilar (assemble) e relinkar a UEX2 para a biblioteca de módulos load;
3. Parar o núcleo do banco de dados Adabas;
4. Reiniciar o núcleo do banco utilizando a nova versão da User Exit 2.

Já com a UEX12, caso o job responsável pela cópia dos PLOGs/CLOGs (COPYJOB) precise ser atualizado, não há necessidade de recompilar ou relinkar a User Exit para a biblioteca de módulos load. Isso simplifica a manutenção, reduz a indisponibilidade do ambiente e proporciona maior flexibilidade operacional.

UEX2


Esta User Exit recebe o controle do núcleo Adabas quando ocorre a alternância entre logs duplos (dual logging), ou seja, quando existem dois datasets definidos para os PLOGs e/ou CLOGs. Nesse momento, a User Exit permite realizar a cópia do dataset de log que acabou de ser preenchido, antes que ele seja reutilizado pelo Adabas. Essa funcionalidade está disponível somente quando a sessão do Adabas está configurada com PLOG duplo e/ou CLOG duplo.

A rotina da user exit deve invocar um procedimento através do qual a função apropriada do utilitário ADARES (CLCOPY ou PLCOPY) é executado.

Software AG oferece um módulo de fonte de amostra, entregue na tape de instalação, que é usado para criar Exit Usuário 2 (UEX2). Para ADA71, o nome do módulo de origem é USEREX2M. Para ADA74, o nome do módulo de origem é USEREX2P. O código fonte fornecido é projetado para lidar com ambos ADARES PLCOPY e ADARES CLCOPY simultaneamente. Este artigo aborda como alterar a origem para enviar a tarefa ADARES automaticamente através UEX2.

UEX2 - Reassembler


Assembler a User Exit 2, temos que colocar os datasets e id do banco, a Software AG recomenda sempre editar o modulo fonte para o Adabas versão ADA71, o nome do módulo de origem é USEREX2M. Para ADA74, o nome do módulo de origem é USEREX2P, mais para ter certeza de não "danificar" o fonte original copiamos o USEREX2P para o nome ADAEX060 para ter certeza de não bagunçar o original;
MEMBER=ADAEX060 000492 REC SAVE:29.03.2012 09:25 BY   USERID DBA0024   R=00000350
DSN=AAB.SUPORTE.FONTES                                  VOL=PRL303 UNIT=7040
....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
CARD     DC    CL80' '                  READ I/O AREA                   00032500
SAIDAC   DC    CL50'//    UNIT=TP35,DISP=(,CATLG,DELETE)'
SAIDAC1  DC    CL50'//DDSIAUS1 DD DSN=ADABAS.C.DB060.CLOG(+1),'         00034600
SAIDAP   DC    CL50'//    UNIT=TP35,DISP=(,CATLG,DELETE)'
SAIDAP2  DC    CL50'//DDSIAUS1 DD DSN=ADABAS.C.DB060.PLOG(+1),'         00034600
ASSOD    DC    CL50'//DDASSOR1 DD DISP=SHR,DSN=ADABAS.DBID062.ASSO1'    00033600
LOGR1D   DC    CL50'//DDCLOGR1 DD DISP=SHR,DSN=ADABAS.DBID062.CLOGR1'   00033700
LOGR2D   DC    CL50'//DDCLOGR2 DD DISP=SHR,DSN=ADABAS.DBID062.CLOGR2'   00033800
SAIDA1   DC    CL50'//DDSIAUS1 DD DSN=ADABAS.DB060.CLOG,'               00034600
CARDD1   DC    CL50'ADARUN PROG=ADARES,DBID=060'                        00034200
INPRES   DC    CL50'ADARES CLCOPY'                                      00034200
INPRESP  DC    CL50'ADARES PLCOPY'                                      00034200
STEPD    DC    CL50'//STEPLIB  DD DSN=ADA5.LOADLIB,DISP=SHR'            00034200
*                                                                       00032600
* DEFINE THE JOB TO BE SUBMITTED.                                       00032700
*                                                                       00032800
EOJ      EQU   X'00'                    END OF JOB CHARACTER            00032900
*                                                                       00033000
JOB      DS    0F                                                       00033100
JOB0     DC    0CL50' '                                                 00033100

Alterando o ADARUN do banco para aceitar as novas areas e colocar a UEX2;
MEMBER=ADAP060  000051 REC SAVE:14.02.2012 08:30 BY   USERID DBA0055   R=00000050
DSN=AAB.DIBD.ADAPARM1                            LIB=S2 VOL=PRL301 UNIT=703E
....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
ADARUN PLOGRQ=YES       <=== PROTECTION LOG REQUIRED
ADARUN DUALPLD=8391     <=== DUAL PROTECTION LOG DEVICE
ADARUN DUALPLS=54000    <=== DUAL PROTECTION LOG SIZE (BLOCKS)
ADARUN UEX2=ADAEX060    <=== EXIT DO ADABAS - SUBMETER PLOG/CLOG
** ADARUN UEX4=TRMUEX4L    <=== EXIT DO TRIM 7.6.1  *08/12/08
COMPDS0400-D --- End of Data ---

Depois de alterado salve e recopile ele
MEMBER=AAFADBAX 000011 REC SAVE:21.11.2008 08:17 BY   USERID DBA0055   R=00000001
DSN=AAB.DIBD.JCLS                                LIB=S3 VOL=PRL303 UNIT=1024    
....+....1....+....2....+....3....+....4....+....5....+....6
//AAFNNAT2 JOB (AAFN,OSB),CLAU,CLASS=S,MSGCLASS=A                       UXE00010
//*UQ ALLOW                                                             UXE00020
//* ------------------------------------------------------              UXE00020
//*      LINK EDITAR NA LOAD DO ADABAS A EXIT DO PLOG                   UXE00020
//* ------------------------------------------------------              UXE00020
//STEP1  EXEC ASMACK,CMP='COM.V641.SRCE'                                UXE00020
//SYSIN    DD DSN=AAB.SUPORTE.FONTES(ADAEX060),DISP=SHR                 UXE00090
//STEP2  EXEC ASMALK,LLIB='ADA5.LOADLIB'                                        
//SYSIN  DD    *                                                                
 NAME ADAEX060(R)                                                              
/*

Retirando/Voltando o banco começou a utilizar a areas de PLOG;
1                       J E S 2  J O B  L O G  --  S Y S T E M  C P A C  --  N O
0
17.15.13 STC07134 ---- WEDNESDAY, 02 MAY 2012 ----
17.15.13 STC07134  IEF695I START AAFAI060 WITH JOBNAME AAFAI060 IS ASSIGNED TO
17.15.13 STC07134  $HASP373 AAFAI060 STARTED
17.15.13 STC07134  IEF403I AAFAI060 - STARTED - TIME=17.15.13
17.15.13 STC07134  ADAN21 00060 Protection log PLOGR1 started
17.15.13 STC07134  ADAN02 00060 Nucleus run with protection log 00003
17.15.13 STC07134  ADAL01 00060 2012-05-02 17:15:12 CLOG not active
17.15.13 STC07134  ADAN03 00060 ADABAS coming up
17.15.13 STC07134  ADAN19 00060 Buffer flush is  a s y n c h r o n o u s
17.15.13 STC07134  ADAN01 00060 A D A B A S  V7.4.4  is active
17.15.13 STC07134  ADAN01 00060 MODE = MULTI
17.15.13 STC07134  ADAN01 00060 Running without recovery log
17.19.28 STC07134  ADAN20 00060 2012-05-02 17:19:27 ONLINE-DB-SAVE STARTED.
17.19.28 STC07134  ADAN20 00060 2012-05-02 17:19:27 PLOG-NR=00003, BLK-NR=00000
17.19.28 STC07134  ADAN20 00060 2012-05-02 17:19:27 VOLSER-NR = DUAL  .
UQS0009 - END OF DATA SET.
       1 //AAFAI060 JOB MSGLEVEL=1
       2 //STARTING EXEC AAFAI040
       3 XXAAFAI040 PROC ADA=N,LOG=P
--------------------------------------------------------------------------------
OP=S CL=ALL IN=ALL JB=AAFAI060,07134 DS=1 SI=SM LR=1 LL=80 PP=0 DC= RL=999999
AD=J DE= SC= PT= SQ=C RR=0 OC= SD=2000   02.05.2012, 18:01:19

UEX12

Exemplo da User Exit 12
MEMBER=UEX12    000822 REC SAVE:12.12.2002 22:19 BY   USERID USACHP   R=00000001
DSN=ADABAS.V813.SRCE                                    VOL=PRL302 UNIT=1525   
....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
         Title 'UX12Samp - ADABAS Sample User Exit 12'                         
***********************************************************************        
*                                                                     *        
* Name         UX12Samp                                               *        
*                                                                     *        
* Component    ADABAS                                                 *        
*              Sample User Exit 12                                    *        
*                                                                     *        
* Function     Generate JCL and submit jobs to copy PLOGs and CLOGs.  *        
*                                                                     *        
* Entry        Standard linkage using BASSM R14,R15                   *        
*                                                                     *        
* Parameters   On entry R1 contains the address of Ex12Parm data area *        
*                                                                     *        
* Return codes On exit R15 may contain a value representing a number  *        
*              of seconds the ADABAS nucleus should wait (without     *        
*              processing any more commands) before calling this      *        
*              exit again.  See the Operation section.                *        
*                                                                     *        
* Files        COPYJOB -  Input, QSAM, RecFm=F|FB, LRecL=80           *

UEX12 - Recopilando

Recopilar
MEMBER=UX12ASMA 000025 REC SAVE:21.10.2021 15:06 BY   USERID DBA0055   R=00000001
DSN=ADABAS.V813.JOBS                                    VOL=PRL302 UNIT=1525   
....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
//AAFNNAT2 JOB (AAFN,OSB),CLAU,CLASS=S,MSGCLASS=A                              
//*UQ ALLOW                                                                    
//* -------------------------------------------------------------              
//*            Assemble and Link Sample User Exit 12                           
//* -------------------------------------------------------------              
//ASM    EXEC  PGM=ASMA90,                                                     
//             REGION=8M,                                                      
//             PARM='OBJECT,NODECK,XREF(SHORT),ASA'                            
//SYSPRINT DD  SYSOUT=*                                                        
//SYSIN    DD  DSNAME=ADABAS.V813.SRCE(UEX12),DISP=SHR                         
//SYSLIB   DD  DSNAME=ADABAS.V813.SRCE,DISP=SHR                                
//         DD  DSNAME=SYS1.MACLIB,DISP=SHR                                     
//SYSUT1   DD DSN=&&TEMP01,DISP=(NEW,PASS),SPACE=(CYL,2),UNIT=SYSDA            
//SYSLIN   DD DSN=&&TEMP02,DISP=(NEW,PASS),                                    
//             UNIT=SYSDA,SPACE=(TRK,(5,5)),LRECL=80,RECFM=FB                  
//* -------------------------------------------------------------              
//LKED   EXEC  PGM=IEWL,                                                       
//             COND=(4,LT,ASM),                                                
//             REGION=8M,                                                      
//             PARM='NCAL,MAP,LET,LIST(ALL)'                                   
//SYSPRINT DD  SYSOUT=*                                                        
//SYSLIN   DD  DSNAME=&&TEMP02,DISP=(OLD,DELETE)                               
//SYSLMOD  DD  DSNAME=ADA5.LOADLIB(UEX12),DISP=SHR                         
//* -------------------------------------------------------------           

Rodou ok
IEF142I AAFNNAT2 ASM - STEP WAS EXECUTED - COND CODE 0000                     
IEF142I AAFNNAT2 LKED - STEP WAS EXECUTED - COND CODE 0000

COPYJOB

Na proc do banco vamos colocar o COPYJOB - ele que vai chamar o jcl que vai submeter o job que vai fazer o backup da CLOG/PLOG
MEMBER=DBAP340  000064 REC SAVE:09.06.2026 07:09 BY   USERID DBA0055  R=00000027
DSN=AAB.PROCLIB                                  LIB=PP VOL=PRL303 UNIT=1526    
....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
//* -----------------------------------------------------------------           
//*                    PARAMETROS DO BANCO 340                                   
//* -----------------------------------------------------------------           
//COPYJOB   DD DSN=AAB.DIBD.ADAPARM1(UEX340),DISP=SHR                           
//DDCARD    DD DSN=AAB.DIBD.ADAPARM(ADAP340),DISP=SHR                
//          DD DSN=AAB.DIBD.ADAPARM(ADAP340&ADA),DISP=SHR            
//          DD DSN=AAB.DIBD.ADAPARM(ADAP340&LOG),DISP=SHR            
//INTRDR2   DD SYSOUT=(*,INTRDR)                                                
//MPMDUMP   DD SYSOUT=A                                                         
//SYSPRINT  DD SYSOUT=A                                              
//DDDRUCK   DD SYSOUT=V                                                         
//DDPRINT   DD SYSOUT=A                                                         
//* -----------------------------------------------------------------           
//*                      DATA SET'S DO ADABAS                                   
//* -----------------------------------------------------------------           
//DDASSOR1  DD DISP=SHR,DSN=ADABAS.DBID340.ASSO1      <=== ASSO1                
//DDASSOR2  DD DISP=SHR,DSN=ADABAS.DBID340.ASSO2      <=== ASSO2                
//DDASSOR3  DD DISP=SHR,DSN=ADABAS.DBID340.ASSO3      <=== ASSO3                
//DDASSOR4  DD DISP=SHR,DSN=ADABAS.DBID340.ASSO4      <=== ASSO4                
//DDASSOR5  DD DISP=SHR,DSN=ADABAS.DBID340.ASSO5      <=== ASSO5                
//* -----------------------------------------------------------------
//DDDATAR1  DD DISP=SHR,DSN=ADABAS.DBID340.DATA1      <=== DATA1     
//DDDATAR2  DD DISP=SHR,DSN=ADABAS.DBID340.DATA2      <=== DATA2     
//DDDATAR3  DD DISP=SHR,DSN=ADABAS.DBID340.DATA3      <=== DATA3     
//DDDATAR4  DD DISP=SHR,DSN=ADABAS.DBID340.DATA4      <=== DATA4     
//DDDATAR5  DD DISP=SHR,DSN=ADABAS.DBID340.DATA5      <=== DATA5     
//* -----------------------------------------------------------------
//DDWORKR1  DD DISP=SHR,DSN=ADABAS.DBID340.WORK1      <=== WORK      
//* -----------------------------------------------------------------
//* DDCLOGR1  DD DISP=SHR,DSN=ADABAS.DBID340.CLOGR1    <=== CLOG1    
//* DDCLOGR2  DD DISP=SHR,DSN=ADABAS.DBID340.CLOGR2    <=== CLOG2    
//* -----------------------------------------------------------------
//DDPLOGR1  DD DISP=SHR,DSN=ADABAS.DBID340.PLOGR1     <=== PLOG1     
//DDPLOGR2  DD DISP=SHR,DSN=ADABAS.DBID340.PLOGR2     <=== PLOG2     
//DDPLOGR3  DD DISP=SHR,DSN=ADABAS.DBID340.PLOGR3     <=== PLOG3     
//DDPLOGR4  DD DISP=SHR,DSN=ADABAS.DBID340.PLOGR4     <=== PLOG4     
//DDPLOGR5  DD DISP=SHR,DSN=ADABAS.DBID340.PLOGR5     <=== PLOG5     
//* -----------------------------------------------------------------

Criado o job que vai salvar a CLOG/PLOG
MEMBER=UEX340  000038 REC SAVE:05.04.2025 19:59 BY   USERID DBA0055  R=00000001
DSN=AAB.DIBD.ADAPARM1                                   VOL=PRL301 UNIT=1524    
....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
//AAFA?340JOB (AAFV,DIST),'DBA',CLASS=S,MSGCLASS=A                             
//*UQ ALLOW                                                                     
//* -------------------------------------------------------------               
//*                   COPIA O ?LOG PARA CARTUCHO                                
//* -------------------------------------------------------------               
//?LOGDB EXEC  PGM=ADARUN                                                       
//STEPLIB  DD  DSN=ADA5.LOADLIB,DISP=SHR              <=== LOAD                 
//* -------------------------------------------------------------               
//DDASSOR1 DD  DISP=SHR,DSN=ADABAS.DBID340.ASSO1      <=== ASSO1                
//DDASSOR2 DD  DISP=SHR,DSN=ADABAS.DBID340.ASSO2      <=== ASSO2                
//DDASSOR3 DD  DISP=SHR,DSN=ADABAS.DBID340.ASSO3      <=== ASSO3                
//DDASSOR4 DD  DISP=SHR,DSN=ADABAS.DBID340.ASSO4      <=== ASSO4                
//DDASSOR5 DD  DISP=SHR,DSN=ADABAS.DBID340.ASSO5      <=== ASSO5                
//* -------------------------------------------------------------               
//DDDATAR1 DD  DISP=SHR,DSN=ADABAS.DBID340.DATA1      <=== DATA1                
//DDDATAR2 DD  DISP=SHR,DSN=ADABAS.DBID340.DATA2      <=== DATA2                
//DDDATAR3 DD  DISP=SHR,DSN=ADABAS.DBID340.DATA3      <=== DATA3                
//DDDATAR4 DD  DISP=SHR,DSN=ADABAS.DBID340.DATA4      <=== DATA4                
//DDDATAR5 DD  DISP=SHR,DSN=ADABAS.DBID340.DATA5      <=== DATA5                
//* -------------------------------------------------------------               
//DD?LOGR1 DD  DISP=SHR,DSN=ADABAS.DBID340.?LOGR1     <=== ?LOG1 
//DD?LOGR2 DD  DISP=SHR,DSN=ADABAS.DBID340.?LOGR2     <=== ?LOG2 
//DD?LOGR3 DD  DISP=SHR,DSN=ADABAS.DBID340.?LOGR3     <=== ?LOG3 
//DD?LOGR4 DD  DISP=SHR,DSN=ADABAS.DBID340.?LOGR4     <=== ?LOG4 
//DD?LOGR5 DD  DISP=SHR,DSN=ADABAS.DBID340.?LOGR5     <=== ?LOG5 
//* -------------------------------------------------------------
//DDSIAUS1  DD   DSN=ADABAS.C.DB340.?LOG(+1),         <=== ?LOG  
//          UNIT=CVRT,DISP=(,CATLG,DELETE)                       
//* -------------------------------------------------------------
//DDDRUCK  DD  SYSOUT=*                                          
//DDPRINT  DD  SYSOUT=*                                          
//SYSUDUMP DD  SYSOUT=*                                          
//DDCARD   DD  *                                                 
ADARUN PROG=ADARES,DEVICE=8391,DBID=340                         
/*                                                               
//DDKARTE  DD  *                                                 
ADARES ?LCOPY                                                    
/*


0 comentários:

Enviar um comentário