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.
* 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.
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.
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.
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;
Alterando o ADARUN do banco para aceitar as novas areas e colocar a UEX2;
Depois de alterado salve e recopile ele
Retirando/Voltando o banco começou a utilizar a areas de PLOG;
Rodou ok
Criado o job que vai salvar a CLOG/PLOG
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 12MEMBER=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
RecopilarMEMBER=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/PLOGMEMBER=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