quinta-feira, julho 19, 2018

Adabas Recovery - ADASAV + Regenerate

Após qualquer falha que faça com que o núcleo do Adabas termine de forma anormal, um procedimento automático é executado quando Adabas é reativada para trazer o banco de dados para um estado física e logicamente válido. Todos os comandos de atualização parcialmente executadas são redefinidos; todas as transações incompletas são desiste. O procedimento automático compreende três etapas: Reparando o banco de dados, auto-restart, e auto-backout: 
  • Reparação no banco modifica o banco de dados para o situação que teria tido se um buffer flush apenas se tivesse sido concluída no momento da falha. Ou seja, todos os blocos do banco de dados estão em um estado que permite que o núcleo para executar normalmente.
  • Auto-Restart volta os updates para um comando de single update que foram parcialmente executadas quando o sistema falhou. Ele resolve inconsistências internas na base de dados e garante a integridade física.
  • Auto-backout, que é realizado apenas para usuários de lógica ET (end transaction), voltar o anterior das atualizações de transações do usuário, que foram parcialmente executadas quando o sistema falhou. O Adabas realiza uma Backout transaction (BT), seguido de reinicialização automática, e em seguida, informa ao usuário que o da última operação foi backed out.
  • A rotina de auto-backout é executado no final de uma sessão de ET (end transaction) que foi encerrado com parada. isto é também executado automaticamente no início da sessão seguinte Adabas para remover quaisquer alterações realizada dentro de transações que não completaram com sucesso.
  • Após a execução automática de auto-backout, o banco de dados contém atualizações somente de forma lógica completa transações.

Se um hardware ou sistema operacional onde estão o Adabas falham resulta em danos físicos para o banco de dados, poderá ser necessário ter que recriar o banco de dados usando os utilitários ADASAV e ADARES. 

Falha de Energia 

Dependendo do hardware, uma falha de energia durante uma operação de I/O pode danificar os blocos no Adabas que estavam a ser processados. Este dano não pode ser detectado durante a reinicialização automática e, portanto, pode resultar em problemas posteriores, como códigos de resposta inesperados ou atualizações de dados perdidos. Se o parametro ADARUN IGNDIB=YES é definido, as verificações de rotina auto-restart se um buffer flush estava ativo quando a interrupção da sessão ocorreu. Se um buffer flush estava em processo, o auto-restart dá um shut down no banco Adabas e alerta o utilizador para o problema potencial e inclui uma lista de arquivos que estão sendo atualizados quando o buffer flush estava em processo. O DBA deve, então, determinar se uma falha de energia ocorreu. 

Se a causa de uma interrupção da sessão: 
  • SIM é uma falha de energia, a Software AG recomenda recuperar os arquivos afetados usando os utilitários ADASAV e ADARES.
  • Definitivamente NÃO é uma falha de energia e a integridade da informação sobre o hardware de saída pode ser garantida, o banco de dados pode ser reativado imediatamente. A operação de recuperação não é necessária para o banco.
Incidente

Uma falha no gerador e o nobreak não acionou e tivemos uma queda da energia do mainframe, na hora que foram colocar o banco Adabas no ar deu este erro;
13:45:46 ADAN21 00330 Protection log PLOGR1 started
13:45:46 ADAN02 00330 Nucleus run with protection log 02031
13:45:46 ADAI64  File DDCLOGR1 is being opened in ECKD mode - RABN size 08904
13:45:46 ADAI64  File DDCLOGR2 is being opened in ECKD mode - RABN size 08904
13:45:46 ADAL02 00330 2017-07-13 13:45:45 CLOGR2 is active
13:45:46 ADAN03 00330 ADABAS coming up
13:45:46 ADAN55 00330 Recovery data found on Work dataset(s)
13:45:46 ADAN56 00330 Backward repair done
Parm-Error 031 detected during system open
               System autorestart failed
Nucleus response = 176
Subcode = 12
File number = 144
13:45:46 ADAM97 00330 This ASCB/initiator will be terminated by MVS at EOJ
UQS0009 - END OF DATA SET.





--------------------------------------------------------------------------------
OP=S CL=ALL IN=ALL JB=AAFAI330,03017 DS=1 SI=SO LR=188 LL=80 PP=0 DC=
RL=999999 AD=J DE= SC= PT= SQ=C RR=0 OC= SD=2000
O que aconteceu, quando o banco foi colocado no ar ele encontrou na Work informações que não foram gravadas no banco, ele começou a reparar isso gravando no banco só que em determinada parte dessa reparação deu erro, aparentemente o banco Adabas caiu no meio de um Buffer Flush e o banco não conseguiu fazer o AUTORESTART por ter detectado inconsistência em um bloco, neste cenário o manual do Adabas fala que a única saída é restaurar o ultimo backup e depois usar o regenerate, a restauração você fica com o banco com a imagem no momento do backup já o regenerate pega os PLOGs e vai aplicando as atualizações/deletações/inserções e deixa o banco na mesma situação que ele estava até na hora que o acabou a energia do mainframe.

SYN1/SYN2

O SYN1 especifica o número do bloco que contém o checkpoint SYN1 no qual a operação de backup (SAVE) correspondente começou. Já o SYN2 o regenerate começa no checkpoint até final. O regenerate começa no checkpoint final (SYN2) do backup on-line. Todos os PLOGs até o incluindo o próximo checkpoint de serviço (no qual o REGENERATE deve parar) são incluídos e os parâmetros apropriados são fornecidos à função ADARES REGENERATE. Se mais de 99 PLOGs devem ser regenerates, ADARAI gera várias etapas de trabalho REGENERATE, cada uma processando até 99 datasets de PLOG de entrada.
Protection Log  PLOGNUM=2017, SYN1=1791506, SYN2=1826095

Formatando Work nova

A Work tem registros, para não entrar nesta situação de reparação na hora que colocarmos no ar o banco temos que formatar uma nova Work, com o mesmo tamanho que tinha antes e coloquei no proc do banco;
MEMBER=ADAFWORK 000019 REC SAVE:13.07.2017 14:56 BY   USERID DBA  R=00000001
DSN=PROD.PRODUCAO.JCLS                           LIB=S3 VOL=PRL303 UNIT=1126    
....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
//AAFAFRMS  JOB (AAFA,DIBD),CLAUD,CLASS=S,MSGCLASS=X                            
//*UQ ALLOW                                                                     
//* ------------------------------------------------------------                
//*                     DEFINE AREA DE WORK                                     
//* ------------------------------------------------------------                
//FORMAT    EXEC PGM=ADARUN                                                     
//STEPLIB   DD   DSN=ADA5.LOADLIB,DISP=SHR                                      
//* ------------------------------------------------------------                
//DDWORKR1  DD   DISP=(NEW,CATLG),DSN=ADABAS.DBID330.WORK2, <=== WORK           
//          SPACE=(CYL,(0,750)),UNIT=SYSDA,VOL=SER=ADW005                       
//* ------------------------------------------------------------                
//SYSUDUMP  DD   SYSOUT=A                                                       
//DDDRUCK   DD   SYSOUT=A                                                       
//DDPRINT   DD   SYSOUT=A                                                       
//DDCARD    DD   *                                                              
ADARUN PROG=ADAFRM,DBID=330                                                     
//DDKARTE   DD   *                                                              
ADAFRM WORKFRM SIZE=750,DEVICE=8391                                             
/* 

Depois alteramos a proc do banco e colocamos no lugar da antiga Work a nova
MEMBER=AAFAI330 000019 REC SAVE:13.07.2017 14:56 BY   USERID DBA  R=00000001
DSN=AAB.PROCLIB                                LIB=S3 VOL=PRL303 UNIT=1126    
....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
 //* -----------------------------------------------------------------          
 //*                      DATA SET'S DO ADABAS                                  
 //* -----------------------------------------------------------------          
 //DDASSOR1  DD DISP=SHR,DSN=ADABAS.DBID330.ASSO1   <=== ASSO1                  
 //DDASSOR2  DD DISP=SHR,DSN=ADABAS.DBID330.ASSO2   <=== ASSO2                  
 //DDDATAR1  DD DISP=SHR,DSN=ADABAS.DBID330.DATA1   <=== DATA1                  
 //DDDATAR2  DD DISP=SHR,DSN=ADABAS.DBID330.DATA2   <=== DATA2                  
 //DDWORKR1  DD DISP=SHR,DSN=ADABAS.DBID330.WORK2   <=== NEW WORK MAN                   
 //DDPLOGR1  DD DISP=SHR,DSN=ADABAS.DBID330.PLOGR1  <=== PLOG1                  
 //DDPLOGR2  DD DISP=SHR,DSN=ADABAS.DBID330.PLOGR2  <=== PLOG2                  
 //*

Restaurando o Último Backup

Vamos restaurar o banco, colocando o cartucho do backup e de PLOG, anotamos os dados do PLOGNUM e do SYN1, OVERWRITE quer dizer que vai gravar em cima dos arquivos já existentes;
MEMBER=REST330C 00000018 REC SAVE:13.07.2017 15:43   USER  DBA  R=0000000001
DSN=PROD.PRODUCAO.JCLS                           LIB=S3 VOL=PRL303 UNIT=1126
....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
//AAFPREST JOB (ABBP,DIBD),SUPORTE,CLASS=S,MSGCLASS=A TYPRUN=HOLD
//*UQ ALLOW
//* ----------------------------------------------------------------
//*               RESTORE DO BANCO (BACKUP ONLINE)
//* ----------------------------------------------------------------
//RESTORE  EXEC AAFAU330
//DDREST1   DD DSN=ADABAS.C.SAVE.DB330.DIA.G3119V00,
//          DISP=OLD,UNIT=CVRT,VOL=SER=(VC1751,VC1757,VC1763,VC1785)
//* ----------------------------------------------------------------
//DDPLOG    DD DSN=ADABAS.C.DB330.PLOG.G4783V00,
//          DISP=OLD,UNIT=AFF=DDREST1,VOL=SER=VC0139
//* ----------------------------------------------------------------
//DDCARD    DD *
ADARUN PROG=ADASAV,DBID=330,MODE=SINGLE,PLOGRQ=NO
//DDKARTE   DD *
ADASAV     RESTONL
ADASAV             PLOGNUM=2017,SYN1=1791506,OVERWRITE
/*

Regenerate

Depois do restore do banco vamos executar o ADARES REGENERATE, este que vai pegar e deixar o banco com a situação igual até na hora que caiu, detalhe importante, como depois do backup só tivemos um PLOG (PLOGNUM=2017,FROMCP=SYN2,FROMBLK=1826095);
MEMBER=ADARES05 00000018 REC SAVE:13.07.2017 18:27   USER  DBA  R=0000000001
DSN=PROD.PRODUCAO.JCLS                           LIB=S3 VOL=PRL303 UNIT=1126
....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
//AAFPREST JOB (ABBP,DIBD),SUPORTE,CLASS=S,MSGCLASS=A TYPRUN=HOLD
//*UQ ALLOW
//* ----------------------------------------------------------------
//*    ADARES : REGENERATE
//* ----------------------------------------------------------------
//RES      EXEC AAFAU330
//DDSIIN    DD   DSN=ADABAS.C.DB330.PLOG.G4783V00,  <=== PLOG TAPE
//            UNIT=CVRT,DISP=OLD
//* ----------------------------------------------------------------
//DDDRUCK   DD   SYSOUT=X
//DDPRINT   DD   SYSOUT=X
//SYSUDUMP  DD   SYSOUT=X
//DDCARD    DD   *
ADARUN PROG=ADARES,SVC=249,DEVICE=8391,DBID=330,MODE=SINGLE
ADARUN LP=25000,LWKP2=3494,LU=65535,PLOGRQ=NO
//DDKARTE   DD   *
ADARES REGENERATE PLOGNUM=2017,FROMCP=SYN2,FROMBLK=1826095
/*

Deve aparecer umas mensagens que diferentes no job (normal);
1                       J E S 2  J O B  L O G  --  S Y S T E M  C P A C  --  N O D E  J E S 2
0
 19.40.06 JOB03046 ---- THURSDAY,  13 JUL 2017 ----
 19.40.06 JOB03046  TSS7000I DBA Last-Used 13 Jul 17 17:37 System=CPAC Facility=BATCH
 19.40.06 JOB03046  TSS7001I Count=60045 Mode=Fail Locktime=None Name=CLAUDEMAR MARTINS DE SA
 19.40.06 JOB03046  $HASP373 AAFPREST STARTED - INIT K    - CLASS S - SYS CPAC
 19.40.06 JOB03046  IEF403I AAFPREST - STARTED - TIME=19.40.06
 19.40.06 JOB03046 *IEF233A M 0897,VC0139,,AAFPREST,AAFAU330,ADABAS.C.DB330.PLOG.G4783V00
 19.40.06 JOB03046 *CTS009  IEF233A M 0897,VC0139,,AAFPREST,AAFAU330,ADABAS.C.DB330.PLOG.G4783V00
 19.40.17 JOB03046  ADAN02 00330 Nucleus run without protection log
 19.40.17 JOB03046  ADAL01 00330 2017-07-13 19:40:15 CLOG not active
 19.40.17 JOB03046  ADAN03 00330 ADABAS coming up
 19.40.17 JOB03046  ADAN01 00330 A D A B A S  V7.4.4  is active
 19.40.17 JOB03046  ADAN01 00330 MODE = SINGLE
 19.40.17 JOB03046  ADAN01 00330 Running without recovery log
 20.29.36 JOB03046  ADAN56 00330 Autobackout done
 20.29.36 JOB03046  ADAN49 00330 2017-07-13 20:29:35
 20.29.36 JOB03046               ADAEND   backed out by ADARES
 20.29.36 JOB03046               UID= 40404040F2F4F0F1
 20.29.36 JOB03046               ADAEND   backed out by ADARES
 20.29.36 JOB03046               UID= C1C5F8F9F0F2F8F1
 20.29.36 JOB03046               ADAEND   backed out by ADARES
 20.29.36 JOB03046               UID= C1C5F8F9F0F7F2F1
 20.29.36 JOB03046  ADAN5A 00330 Files modified during autorestart:
 20.29.36 JOB03046  ADAN5A 00330 00077 00115
 20.29.40 JOB03046  IEF234E K 0897,VC0139,PVT,AAFPREST,AAFAU330
 20.29.40 JOB03046  CTS014  IEF234E K 0897,VC0139,PVT,AAFPREST,AAFAU330
 20.29.40 JOB03046  -                                              --TIMINGS (MINS.)--            -----PAGING COUNTS----
 20.29.40 JOB03046  -STEPNAME PROCSTEP    RC   EXCP   CONN    TCB    SRB  CLOCK   SERV  WORKLOAD  PAGE  SWAP   VIO SWAPS
 20.29.40 JOB03046  -RES      AAFAU330    00  5155K   729K   6.43   1.26   49.5 76042K  BATCH        0     0     0     0
 20.29.40 JOB03046  IEF404I AAFPREST - ENDED - TIME=20.29.40
 20.29.40 JOB03046  -AAFPREST ENDED.  NAME-SUPORTE              TOTAL TCB CPU TIME=   6.43 TOTAL ELAPSED TIME=  49.5
 20.29.40 JOB03046  $HASP395 AAFPREST ENDED
0------ JES2 JOB STATISTICS ------
Terminando coloque o banco online (ele deve ficar online sem nenhum erro);

0 comentários:

Enviar um comentário