IMS ei ole pärandsüsteem selles mõttes, et see oleks vananenud. See on andmebaasimootor, mis haldab suurpankade debitoorseid võlgnevusi, kindlustusseltside poliiside haldamist ja tervishoiuteenuste maksjate kahjunõuete töötlemist. IBM jätkab selle arendamist. Probleem ei ole selles, et IMS lakkas töötamast, vaid selles, et iga arendaja, kes oskas selle hierarhilistes segmentide puudes navigeerida, läheb pensionile, iga IMS-toega süsteemi muudatus nõuab SQL-ita andmemudeli mõistmist ja iga migreerimisplaan, mis käsitleb IMS-i nagu relatsioonandmebaasi, avastab erinevuse raskel teel.
Raske on avastada migratsiooni keskel, et COBOL-programm pääseb IMS-ile ligi mitte lihtsa võtmeotsingu, vaid hierarhilise läbimise kaudu, mis tuleb sihtsüsteemis samaväärse navigeerimisloogikaga kopeerida. Või avastada, et kahe füüsilise IMS-i andmebaasi vaheline loogiline seos loob sõltuvuse, mida kummagi andmebaasi DBD täielikult ei dokumenteeri, ja et migratsioon teisendas mõlemad andmebaasid iseseisvalt, katkestades samal ajal vaikselt kõik programmid, mis seda loogilist seost kasutasid. Või avastada, et sekundaarne indeksandmebaas, struktuur, mida enamik migratsiooniplaane kunagi ei inventeeri, oli ainus tee, mille kaudu kriitiline aruandlusprogramm oma andmeteni jõudis.
Ükski neist üllatustest ei ela üle kokkupuudet range migratsioonieelse sõltuvusanalüüsiga. Nad jäävad ellu kokkupuutel eeldustega.
IMS-i sõltuvusanalüüs portfelli skaalal
SMART TS XL tuvastab andmebaasideülesed IMS-sõltuvused, mis on COBOL-allikas üksi nähtamatud.
Rohkem infotMis teeb IMS-i sõltuvusanalüüsi erinevaks?
Relatsioonandmebaaside keskkonna (DB2, Oracle, SQL Server) sõltuvusanalüüs järgib hästi mõistetavat rada. Parsige rakenduskoodis olev SQL, tuvastage tabeli- ja veeruviited, looge kaart, mis näitab, millised programmid millistele tabelitele juurde pääsevad, ja kasutage seda kaarti migratsiooni ulatuse ja järjestuse määramiseks. Struktuur on selgesõnaline. Sõltuvused on SQL-tekstis nähtavad.
IMS-i sõltuvusanalüüs on igas dimensioonis keerukam.
Struktuur on hierarhiline, mitte relatsiooniline. IMS-i andmebaas on korraldatud segmenditüüpide puuna, kus igal segmenditüübil on määratletud vanema-lapse suhe. COBOL-programm, mis loeb patsiendiandmeid IMS-i andmebaasist, ei käivitu SELECT * FROM PATIENTS WHERE ID = ?See väljastab Get Unique (GU) kutse, et navigeerida hierarhias juursegmendini, ja seejärel Get Next Within Parent (GNP) kutse, et läbida lapsed. Programmi sõltuvus ei ole tabelis, vaid asub hierarhilise struktuuri kindlal teel ja selle struktuuri muutmine võib rikkuda programme, mis navigeerivad selles viisil, mida SQL-taseme analüüs ei tuvastaks.
Sõltuvused on jaotatud kolme eraldi struktuuri vahel. Täieliku pildi saamiseks sellest, mida COBOL-programm IMS-iga teeb, tuleb analüüsida järgmist:
- DBD (andmebaasi kirjeldus): määratleb füüsilise segmendi hierarhia, võtmeväljad, juurdepääsumeetodid (HDAM, HIDAM, HISAM, HSAM) ja kõik sekundaarsed indeksid või loogilised seosed
- PSB (programmi spetsifikatsiooniplokk): määratleb, millistele andmebaasidele on programmil lubatud juurde pääseda, milliste trükkplaatide kaudu ning milliste tundlikkuse ja kavatsuse spetsifikatsioonidega.
- COBOL-i lähtekood: sisaldab tegelikke DL/I-kõnesid, mis määravad, millistele segmentidele, milliste kõnefunktsioonidega, millises järjekorras ja milliste SSA-dega juurde pääsetakse
Ükski allikas ei sisalda tervikpilti. Analüüs, mis loeb ainult COBOL-allikat, näeb kõnetüüpe ja segmentide nimesid, kuid mitte füüsilist andmebaasi struktuuri. Analüüs, mis loeb ainult DBD-d ja PSB-d, näeb, mida programmil on lubatud teha, kuid mitte seda, mida see tegelikult teeb.
Navigeerimine sõltub positsioonist. Relatsioonandmebaasis on iga rida võtme abil iseseisvalt adresseeritav. IMS-is mõjutab programmi praegune positsioon hierarhias seda, mida järgnevad kõned tagastavad. GN (Get Next) kõne tagastab hierarhilises järjestuses järgmise segmendi alates sellest, kus programm praegu asub. Sõltuvus ei seisne ainult segmendi tüübis, vaid ka läbimistees, mis viis praegusesse positsiooni. Programmidel, mis tuginevad IMS-i implitsiitsele hierarhilisele järjestusele, on sõltuvus, mis kaob, kui andmed migreeritakse relatsioonandmebaasi, kus samaväärset järjestust ei garanteerita.
DL/I kõneinventuur: mida COBOL-i lähtekood paljastab
Kõige otsesemalt kasulik migratsioonieelne analüüs on täielik inventuur igast DL/I-kõnest igas COBOL-programmis, mis IMS-ile ligi pääseb. See inventuur annab migratsioonimeeskonnale teada, mida iga programm IMS-iga teeb – mitte seda, mida tal on lubatud teha (mida PSB määratleb), vaid mida ta tegelikult teeb.
COBOL-i DL/I-kõned esinevad kahel kujul:
kobol
* Form 1: EXEC DLI interface (CICS-compatible, high-level syntax)
EXEC DLI
GU DB2PCB
SEGMENT(CUSTROOT)
WHERE(CUSTID = WS-CUST-ID)
END-EXEC
* Form 2: xxxTDLI call interface (batch programs, assembler-compatible)
CALL 'CBLTDLI' USING WS-FUNCTION-CODE
PCB-CUSTOMER
WS-CUSTOMER-SEGMENT
WS-SSA-CUSTOMER
Mõlemad vormid sisaldavad sama analüütilist teavet: funktsioonikoodi, kasutatavat trükkplaati, sihtrühma kuuluvat segmenti ja valikuliselt SSA-d (segmendi otsingu argumenti), mis kutse kvalifitseerib. Täielik DL/I kutseinventuur ekstraheerib kõik selle igast programmist.
Funktsioonikoodi taksonoomia ja selle migratsioonimõjud
DL/I funktsioonikood on iga kutse migratsiooni seisukohast kõige olulisem element. Iga funktsioonikood eeldab erinevat andmetele juurdepääsu mustrit, mis tuleb sihtrelatsioonandmebaasis kopeerida:
Kirjutuskaitstud funktsioonid: GU, Hangi unikaalsus: navigeeri otse segmendini kvalifitseeritud SSA-de abil. Relatsioonilises mõttes samaväärne SELECT-iga, millel on WHERE-klausel. Lihtne migreerida, kui segmendi võti vastab selgelt relatsioonilisele primaarvõtmele.
GN, „Hangi järgmine”: liigub hierarhilises järjestuses järgmise segmendi juurde. See on funktsioonikood, millel puudub otsene relatsiooniline vaste ning mis tugineb IMS-i positsioonilisele olekule ja implitsiitsele järjestusele. Programmid, mis kasutavad laialdaselt GN-i, vajavad hoolikat analüüsi selle kohta, millisest järjestusest nad sõltuvad.
GNP, Hangi järgmine ülemsegmendi sees: hangib praeguse ülemsegmendi järgmised lapsed. Samaväärne kõigi võõrvõtme seoses olevate ridade toomisega. Üldiselt seob see puhtalt SELECT-iga, millel on võõrvõtme WHERE-klausel.
Ootefunktsioonid (värskenduse eeldused): GHU, GHN, GHNP, Get Hold ekvivalendid GU, GN, GNP käskudele. Lipp „hold“ näitab, et järgneb uuendamise (REPL) või kustutamise (DLET) toiming. Ootele jäämise kõnesid kasutavad programmid on lugemis-muuda-kirjutamise programmid; migreerimine peab säilitama tehingute terviklikkuse nii ootele jäämise kui ka järgneva uuendamise vältel.
Värskendusfunktsioonid: ISRT, Insert: lisab uue segmendi esinemise. Samaväärne INSERT-iga. DLET, Kustuta: eemaldab hetkel hoitava segmendi ja kõik selle sõltuvad üksused. Käitumine „kõik sõltuvad” on IMS-spetsiifiline kaskaad, mis tuleb sihtsüsteemis selgesõnaliselt rakendada. REPL, Asenda: uuendab praegust hoitavat segmenti uute andmetega. Samaväärne käsuga UPDATE.
Miks see on migratsiooni ulatuse seisukohalt oluline: Programm, millel on ainult GU ja GNP kutsed, on IMS-i andmete kirjutuskaitstud tarbija, millel on väiksem migreerimise risk ja mida on lihtsam valideerida. GHU, REPL ja DLET-i kasutav programm on tehingute töötlemise programm, mis muudab hierarhilisi struktuure; selle migreerimine nõuab tehingute terviklikkuse säilitamist kõigis toimingutes, mida IMS praegu aatomiliselt jõustab.
Kolm sõltuvustüüpi, mis iga migratsiooni nurjavad
Loogilised seosed
IMS-i loogilised seosed ühendavad segmente kahes füüsiliselt eraldi andmebaasis. Andmebaasis A oleval loogilisel tütarsegmendil on loogiline ülemsegment andmebaasis B. Kui COBOL-programm navigeerib läbi loogilise seose, läbib see tee, mis füüsiliselt ületab andmebaasi piire – see on läbimine, mida IMS haldab läbipaistvalt, kuid mis kaob andmebaaside iseseisva migreerimise korral.
Loogilised seosed on IMS-i migreerimisel kõige riskialtim sõltuvustüüp ühel põhjusel: need on COBOL-i lähtekoodis nähtamatud. COBOL-programm kutsub GNP-d segmendi laste leidmiseks. Selle, kas see GNP läbib füüsilist vanema-lapse suhet või loogilist suhet, määravad PSB ja DBD, mitte COBOL-kood. Migratsioonimeeskond, kes analüüsib ainult COBOL-i lähtekoodi, ei saa ilma PSB-d ja DBD-d eraldi analüüsimata teada, kas GNP-kõne ületab loogilise seose piiri.
Loogilisi seoseid kasutavad programmid vajavad migreerimist, et kopeerida loogilise seose semantika sihtsüsteemis, tavaliselt relatsioonimudeli JOIN-käsu abil, ja valideerida, et iga seost kasutav programm saab JOIN-käsult samaväärsed tulemused, mille ta sai IMS-i loogilisest läbimisest.
Teisese indeksi andmebaasid
IMS-i teisesed indeksiandmebaasid pakuvad alternatiivset juurdepääsuteed primaarsele andmebaasile, võimaldades programmidel segmente hankida muu välja kui juurvõtme abil. Teisene indeksiandmebaas on eraldi IMS-i andmebaas oma DBD-ga, kuid selle andmed pärinevad primaarsest andmebaasist.
Migratsioonimeeskonnad avastavad teiseseid indeksandmebaase sageli analüüsi, mitte planeerimise käigus, sest:
- Need on defineeritud DBD-des, mis ei ole alati grupeeritud primaarse andmebaasi DBD-dega.
- Teiseseid indekseid kasutavad programmid nimetavad indeksi andmebaasi oma PSB-des, kuid programmid, mis navigeerivad primaarsesse andmebaasi sekundaarse indeksi kaudu, ei pruugi seda COBOL-lähtekoodis ilmselgelt teha.
- Dokumentatsioonis võib kirjeldada primaarset andmebaasi ilma selle sekundaarseid indekseid mainimata.
Programmil, mis pääseb IMS-ile juurde sekundaarse indeksi kaudu, on juurdepääsumustri sõltuvus, mis tuleb sihtkohas replikeerida mitte-primaarvõtme indeksina või erineva päringustrateegiana. Selle puudumine migreerimise ajal annab tulemuseks programmi, mis töötab veatult, kuid ei leia otsitavaid kirjeid.
GSAM-i andmebaasid
GSAM-i (üldistatud järjestikuse juurdepääsu meetod) andmebaasid on IMS-i liides järjestikuseks partiitöötluseks, mis võimaldab sisuliselt COBOL-i partiiprogrammidel kasutada DL/I-kõnesid funktsionaalselt järjestikuse faili sisend-/väljundi jaoks. GSAM-i andmebaasidel ei ole segmendihierarhiaid; need on lamedad järjestikused struktuurid, millele pääseb ligi IMS-i kaudu, et saada kasu IMS-i taastamis- ja taaskäivitamisvõimalustest.
GSAM-andmebaase kasutavad programmid on pakkprogrammid, mille taastamiskäitumine sõltub IMS-i kontrollpunkti/taaskäivituse toest. Migreerimine peab selle taastamiskäitumise säilitama või asendama selle sihtplatvormil samaväärse mehhanismiga.
Eelmigratsiooni sõltuvuste inventuuri koostamine
Täielik IMS-i sõltuvusanalüüs annab kuus tulemust, mis koos määratlevad migratsiooni ulatuse, riski ja järjestuse.
Tulemus 1: trükkplaadi ja andmebaasi kaardistamine
Iga PSB iga trükkplaat vastab kindlale DBD-le (konkreetsele IMS-i andmebaasile). Kõigi PSB-de iga trükkplaadi loetlemine ja igaühe vastavusse viimine oma DBD-ga annab autoriteetse nimekirja, millistel programmidel on lubatud millistele andmebaasidele juurde pääseda. See on ulatuse mõistmise lähtepunkt, kuid see liialdab tegelike sõltuvustega, kuna programmidel võivad olla PSB-d, mis sisaldavad rohkem andmebaase, kui nad tegelikult kasutavad.
Tulemus 2: Tegelik kõnede arv programmi kohta
Iga COBOL-programmi DL/I-kõnede parsimine annab tegeliku kasutusloendi: milliseid PCB-sid iga programm tegelikult kutsub, milliseid funktsioonikoode see kasutab, millistele segmenditüüpidele see juurde pääseb ja kas see kasutab kvalifitseeritud SSA-sid (segmendi võtme juurdepääs) või kvalifitseerimata navigeerimist (positsiooni läbimine). See kitsendab ulatust PSB-defineeritud õigustest programmi tegeliku käitumiseni.
Tulemus 3: Loogiliste seoste kasutuskaart
Kutseloendi ristviidete tegemine DBD-dega tuvastab, milliste programmide GNP- või GN-kutsed läbivad loogilisi seoseid. See nõuab lisaks COBOL-allikale ja PSB-le ka DBD-struktuuride analüüsimist, mis määravad, millised vanema-lapse suhted on füüsilised ja millised loogilised.
Tulemus 4: Teisese indeksi kasutuskaart
Programmid, mis nimetavad oma PSB-des teiseseid indeksandmebaase või teostavad SSA-dega päringuid, mis viitavad mitte-juurvõtmeväljadele, identifitseeritakse teiseste indeksikasutajatena. Kaart dokumenteerib, millised teisesed indeksid on olemas, milliseid esmaseid andmebaase need toetavad ja millised programmid neist sõltuvad.
Tulemus 5: Kõnetüübi jaotus andmebaaside kaupa
Iga hõlmatud IMS-i andmebaasi puhul näitab kõnetüüpide jaotus kõigi sellele juurde pääsevate programmide vahel selle migreerimise keerukust:
- Ainult lugemisfunktsioonidega (GU, GN, GNP) ligipääsetavaid andmebaase on lihtsam migreerida.
- Ootefunktsioonide ja värskenduste (GHU + REPL, GHN + DLET) abil ligipääsetavad andmebaasid vajavad tehingute terviklikkuse replikatsiooni.
- Andmebaasid, kus GN-i kasutatakse palju, näitavad positsioonilise navigeerimise sõltuvusi, mis vajavad järjestamise analüüsi
- Loogiliste seostega andmebaasid vajavad sihtmärgis andmebaasidevahelist JOIN-semantikat.
Tulemus 6: Programmi riskide klassifikatsioon
Kasutades kutsetüübi jaotust ja sõltuvustüübi inventuuri, liigitatakse iga programm migratsiooniriski järgi:
Programmid, mis kasutavad ainult GU-d ja GNP-d koos kvalifitseeritud SSA-dega, pääsevad juurde ühele andmebaasile ilma loogiliste seosteta ja millel puuduvad ootel/värskendamise käsud, on varajaste migratsioonilainete jaoks kõige väiksema riskiga kandidaadid. Programmid, mis kasutavad ulatuslikult GN-i, pääsevad juurde mitmele andmebaasile loogiliste seoste kaudu või teostavad keerukaid ootel/värskendamise järjestusi, on kõige suurema riskiga programmid, mis vajavad enne migreerimist kõige põhjalikumat analüüsi ja valideerimist.
Mida analüüs muudab rändeplaneerimise osas
Sõltuvusanalüüs ei dokumenteeri ainult olemasolevat, vaid muudab ka järgnevaid otsuseid.
Järjestusotsused. Programme, mis jagavad IMS-i andmebaase loogiliste seoste kaudu, ei saa iseseisvalt migreerida. Kui programm A loeb loogilist tütarsegmenti, millel on loogiline vanemsegment samas andmebaasis kui programmi B juursegment, siis A migreerimine ilma B migreerimiseta (või silla loomiseta) katkestab A. Sõltuvusgraaf määrab, millised programmid peavad koos liikuma.
Sihtmärgi disainiotsused. Kutsetüübi jaotus määrab, kuidas sihtmärgi relatsiooniskeemi struktureerida. Hierarhiline vanema-lapse suhe, millele pääseb ligi ainult võtmepõhiste GU- ja GNP-kõnede kaudu, teisendub selgelt võõrvõtme seoseks sihtkohas. Sama seos, millele pääseb ligi positsiooniliste sõltuvustega GN-kõnede kaudu, nõuab sihtmärgi skeemilt samaväärse järjestuse säilitamist kas selgesõnalise ORDER BY, järjestusvälja või sama tulemuse saavutava erineva juurdepääsumustri abil.
Valideerimisulatuse otsused. Analüüs tuvastab, millised programmid on IMS-andmete kirjutuskaitstud tarbijad ja millised tehingute töötlejad. Kirjutuskaitstud programme saab valideerida, võrreldes väljundtulemusi algse IMS-süsteemi ja migreeritud süsteemi vahel. Tehingute töötlejad vajavad tehingute ekvivalentsuse testimist, tagades, et sama toimingute jada sihtmärgi suhtes annab tulemuseks originaaliga samaväärsed andmete oleku muutused.
Riskiklassifikatsioon. Loogiline seos ja teisese indeksi leiud on riskiklassifikatsiooni peamised sisendid. Igal migratsiooniprogrammil on riskiregister. IMS-i sõltuvusanalüüs ütleb meeskonnale, millised kirjed sinna lisada.
Kuidas SMART TS XL Teostab IMS-i sõltuvusanalüüsi
SMART TS XL'S staatilise koodi analüüs parsib iga COBOL-programmi DL/I-kõnesid, nii EXEC DLI kui ka xxxTDLI kõneliidese vorme, eraldades igast kõnest funktsioonikoodi, trükkplaadi viite, segmendi nime ja SSA struktuuri. See loob tegeliku kõnede inventuuri programmi tasandil kogu COBOL-portfelli ulatuses, ilma et oleks vaja IMS-süsteemi käivitamist või koodi käsitsi ülevaatamist.
Rakenduste sõltuvuste kaardistamine laiendab seda inventuuri programmidevaheliseks sõltuvusgraafikuks: millised programmid jagavad juurdepääsu millistele IMS-i andmebaasidele, millised programmid kasutavad samu trükkplaate, milliste programmide juurdepääsumustrid kattuvad viisil, mis nõuab koordineeritud migreerimist. Kui loogiline seos ühendab segmente andmebaaside vahel, kujutab sõltuvuskaart seda andmebaasidevahelist seost selgesõnalise seosena, mida tuleb sihtsüsteemis säilitada.
Mõjuanalüüsi võimalus annab vastuse küsimusele , millele iga migratsioonimeeskond peab enne mis tahes andmebaasi teisendamist vastama: kui see IMS-i andmebaas migreeritakse, siis millised programmid on mõjutatud, milliseid juurdepääsumustreid tuleb kopeerida ja milliseid testijuhtumeid tuleb samaväärsuse kinnitamiseks valideerida. Vastus ei ole hinnang, vaid tegelikust DL/I-kõnede inventuurist tuletatud loendatud loend.
JCL -i laiendusvõimalus lisab operatiivse konteksti: millised JCL-i tööetapid kutsuvad esile millised programmid IMS-ile juurde pääsevad, millises järjekorras ja milliste PSB spetsifikatsioonidega. Operatiivne sõltuvusahel ehk pakk-tööde jada, mis töötleb IMS-i andmeid mitme programmi kaudu, on migreerimise planeerimisel sama oluline kui programmi tasemel juurdepääsumustrid. Andmebaasi migreerimine ilma seda ümbritseva pakk-tööde orkestreerimise migreerimiseta loob süsteemi, mis töötleb kirjeid õigesti eraldi ja ebaõnnestub tootmises, kui tööjada käivitub.
Meeskondadele, kes juhivad pärand moderniseerimine IMS-toega süsteemide puhul on struktuurilised tõendid, mida on tootnud SMART TS XL on iga järgneva migratsiooniotsuse sisend: millised programmid migreeruvad millises laines, milliseid andmebaase saab teisendada iseseisvalt ja millised vajavad koordineeritud teisendamist, millised juurdepääsumustrid vajavad ümberarhitektuuri, mitte otsest tõlkimist. Nagu on kirjeldatud kontekstis IMS-i ja VSAM-i struktuuride migreerimine koos COBOL-programmidega, COBOL-programmide ja pärandandmestruktuuride omavaheline seotus tähendab, et andmete migratsioon ja koodianalüüs peavad toimuma paralleelselt, sõltuvuste inventuur on mehhanism, mis võimaldab paralleelset planeerimist.
Inventuur ei ole ränne
IMS-i sõltuvusanalüüs annab teadmisi. Migratsioon nõuab endiselt otsuseid, inseneritööd ja valideerimist. Analüüs muudab otsuste kvaliteeti, inseneritöö ulatuse täielikkust ja valideerimise usaldusväärsust.
Organisatsioonid, mis IMS-i andmebaase edukalt migreerivad, ei ole need, kellel on kõige kiiremad ajakavad või suurimad migreerimiseelarved. Nemad on need, kes teadsid enne teisaldamise alustamist, mis neil olemas on – iga programm, mis igale andmebaasile ligi pääses, iga funktsioonikood, mis paljastas iga programmi juurdepääsumustri, iga loogiline seos, mis lõi andmebaasidevahelisi sõltuvusi, iga teisese indeksi, mis pakkus juurdepääsuteed, mis ilma selgesõnalise replikatsioonita konversioonist välja ei jääks.
See teadmine ei tulene dokumentatsioonist, vaid koodi analüüsimisest.