BMP oder nicht BMP
IBM MVS / IMS Batch Message Processing
Jobs parallel zur Online Session durchführen
Inhalt
Kriterien
-
Im Batch bei DIAM900 / ASYS3 immer notwendig
-
Programm soll tagsüber parallel zum Online laufen
-
Programm soll Restartfähig sein (Langläufer)
Beispiel:
//AMC6904 EXEC PGM=XMSDCTL0,REGION=80M,
// PARM='BMP,DIAM900,BMLB65B,,,C00000,,,,1,,,,IMSB'
----------------------------------------------------------------------
Checkliste
| Pgm benutzt |
Aufruf |
Bemerkungen |
| ASYS3 |
EXEC PGM=XMSDCTL0,
PARM='BMP,DIAM900,...., |
echter BMP Job |
| ASYS3 |
EXEC PGM=XMSDCTL0,
PARM='DLI,DIAM900,... |
kein echter BMP,
nicht restartfähig, kein Online Update
läuft jedoch schneller |
| keine DB |
EXEC PGM=<pgmname> |
normales Batch Programm |
offline DBs
z.B. Parallel |
EXEC PGM=DFSRRC00,
PARM='DLI,SBSP59A9 |
es werden keine Datenbanken gelesen, die gleichzeitig online sind |
Echte BMP Jobs
müssen bei der BMP Steuerung angemeldet werden:
//* -------------------------------------------------------------
//* BMP008 ANMELDEN
DES JOBS BEI DER BMP-STEUERUNG
//*
STEPNAME UND DATEIEN MÜSSEN angemeldet werden
//* -------------------------------------------------------------
//ANMELDEN EXEC PGM=XMSDCTL0,REGION=2560K,
//
PARM='BMP,BMP008,BMCH01__,,,,,,,,,,,IMST'
//PROTO DD SYSOUT=*
//*
RUNNING ) -
//BMPSYSIN DD *
ANMELDEN ( JOB (JOBNAME(SLBARME4)
-
RUNNING RESTARTABLE (SOFORT)) -
STEP (STEPNAME(AF106274) PGM(DIAM900) -
DATEI (DD(FAKUNDI) OPT(INPUT) ) -
DATEI (DD(LISTE1) OPT(OUTPUT) ) -
)
-
)
Echte BMP Jobs Löschen
Vorgehensweise
-
Status von RUNNING auf ABENDED setzen
-
DELETE Job
-
Job normal neu starten
Ablaufsteuerung per Aktionsfolge
________________________________________________________________
|
AKTIONSFOLGE AF699375
|
|
|
| BMP-VERARBEITUNG: NEUZUORDNUNG
VON AFS-KUNDEN
|
|
|
| U. BARMEYER, PRISMA GMBH
|
|
|
| XC6975 - VERARBEITEN KONTEN
BIS CHCKPT ERFORDERLICH |
| XC6975R - RESTART
(BEIDE IN AMC6975)
|
|
|
|
ÿÿÿÿÿÿÿÿÿÿ
|
|
|XC6975R |
|
|
ÿÿÿÿÿÿÿÿÿ'
|
|
!
|
|
V
|
|
ÿÿÿÿÿÿÿÿÿ
|
| +-- RC=200(ENDE)----|XC6975 |--
RC=100(CHKPT)------+ |
| !
+--> ÿÿÿÿÿÿÿÿ'
! |
| !
!
ÿÿÿÿÿÿÿ |
| ÿÿÿÿÿÿÿ
+--------------------------------|CHKPT| |
| |CHKPT|
ÿÿÿÿÿÿ' |
| ÿÿÿÿÿÿ'
|
| !
ÿÿÿÿÿÿ
|
| +------------------> |ENDE|
|
|
ÿÿÿÿÿ'
|
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ|
Programmbeispiel
main()
...
...// -----------------------------------------------
// noch kein Checkpoint vorhanden: alles initialisieren
// -----------------------------------------------
if (up_rc EQ 1)
{
TRC_wto13 ("Module: XC6975: no chkpt");
xcstr_copy (g.progname, "AMC6975
");
init_globals (pAmkb);
c.protok_seite = 1;
c.counter9 = 0;
c.loopcnt = 0;
rc_xb1 = dbget_vertrag (user_ktonr, &LB1,
"FIRST");
rc_xb1 = dbget_vertrag (user_ktonr, &LB1,
"NKEY");
xcstr_copy (c.chckpntktonr, LB1KTONR);
// Open, Reopen Files
c.eufile=xcfil_bmp_open ("EUFILE", BMPOUTPUT)
// Outputfile
xcprt_open_bmp (&c.protok,"PROTOK", header_protok);
// Listenkopf
}
// -----------------------------------------------
// Es gab einen Checkpoint: DB positionieren
// -----------------------------------------------
if (up_rc EQ 0)
{
TRC_wto13 ("Module: XC6975: mit chkpt");
rc_xb1 = dbget_vertrag (c.chckpntktonr, &LB1,
"FIRST");
if (rc_xb1 NE OK)
xc_abbrechen("AMC6975", (fehler,
"Kein XB1 nach Checkpoint"));
}
// ---------------------------------------------------------
// Bearbeitung oder Fortsetzung der Bearbeitung nach
Checkpoint
// ---------------------------------------------------------
up_rc = bestand_bearbeiten(&LB1);
...