Datasets von HSM zurückholen
- Dieses Thema hat 4 Antworten und 1 Teilnehmer, und wurde zuletzt aktualisiert vor 15 Jahren, 9 Monaten von
Anonym.
-
AuthorPosts
-
22. September 2008 um 6:20 Uhr #3996
AnonymInaktivHallo zusammen,
ich möchte mal wieder euer Wissen in Anspruch  nehmen.Wir haben das Problem, das unsere datasets auf der Entwicklungsanlage nach einiger Zeit auf HSM ausgelagert werden.
Wenn man jetzt auf eine solche Tabelle per SQL zugreift, benötigt HSM so lange das es zu einem -904 (timeout) kommt. Da HSM im Hintergrund weiterarbeitet ist das dataset irgendwann da und der -904 für dieses dataset ist verschwunden. Da eine Testumgebung aber zum Teil aus einer großen Menge von tables und indices besteht, setzt sich dieses Spiel für viele Male fort bis alle tables (mit Partitionen) und indices wieder von HSM beschafft wurden.
Meine Frage: Welche Möglichkeit gibt es  alle datasets auf einen Schlag mit einem Verfahren zurückzuholen und sich nicht von Tabelle zu Tabelle zu hangeln?
Bekannt sind alle Tabelle auf die zugegriffen werden soll.
Ich stelle mir so etwas vor wie:1. SQL beschafft alle dataset-Namen  (basierend auf Tabellennamen)
2. JCL zum recall der datasets
Habt ihr einen SQL bzw. eine JCL die so etwas leistet?
Alle Ideen und Vorschläge sind wie immer willkommen.
Gruß Klaus
22. September 2008 um 13:30 Uhr #4171
AnonymInaktivDie Tabellen alleine werden Dir nicht helfen, sonst schmeisst Dich der erste benötigte Index wieder raus.
Insbesondere ein Insert oder Delete will alle Indices haben, auch die, die nicht in der SYSPACKDEP drin stehen
22. September 2008 um 13:42 Uhr #4305
AnonymInaktivHallo Ulrich,
da hast du Recht. Die Indices hätte ich natürlich auch gerne gehabt.
Aber die kann man ja mit Hilfe der Tabellennamen aus dem Catalog beschaffen.Gruß Klaus
23. September 2008 um 12:46 Uhr #4401
AnonymInaktivAlso zum Recallen der Cluster kannst Du einen normalen IKJEFT01 oder IKJEFT1B nehmen:
// Â EXEC PGM=IKJEFT1B Â Â
//SYSPRINT DD SYSOUT=* Â Â
//SYSTSPRT DD SYSOUT=* Â Â
//SYSTSIN DD *
 HRECALL (‚hlq.DSNDBC.database.tablespace1.*.*‘)
 HRECALL (‚hlq.DSNDBC.database.tablespace2.*.*‘)
//*Durch die Wildcards kannst Du alle Partitions auf einmal zurückholen und erwischt sowohl die I001 und J001 ohne dass du den Katalog lesen musst.
Ein SELECT-Statement, das dieses SYSTSIN erzeugt könnte z.B. lauten
für die Tablespaces:
SELECT ‚ HRECALL (“hlq.DSNDBC.‘ Â Â
CONCAT STRIP(BQUALIFIER) CONCAT ‚.‘ CONCAT STRIP(BNAME) CONCAT ‚.*.*“)‘
FROM SYSIBM.SYSPACKDEP Â
WHERE DNAME = ‚package-name‘
AND BTYPE = ‚R‘ Â
AND BQUALIFIER ^= ‚DSNDB06‘ Âund für Indices:
SELECT ‚ HRECALL (“hlq.DSNDBC.‘ Â Â
CONCAT STRIP(B.DBNAME) CONCAT ‚.‘ CONCAT STRIP(B.INDEXSPACE) CONCAT ‚.*.*“)‘
FROM SYSIBM.SYSPACKDEP A JOIN SYSIBM.SYSINDEXES B Â ÂON A.BNAME = B.TBNAME AND Â Â
 A.BQUALIFIER = B.TBCREATOR Â
WHERE A.DNAME = ‚package-name‘ Â
AND A.BTYPE = ‚T‘
AND B.DBNAME ^= ‚DSNDB06‘natürlich kannst Du die beiden Queries mit UNION ALL zusammenfassen  Â
24. September 2008 um 5:56 Uhr #4466
AnonymInaktivvielen Dank Ulrich für deine Tips.  Ich werde es damit umsetzen. Allerdings werde ich nicht den Package-Namen verwenden können, sondern eine Liste von DB2-Tabellen als Filter für den Catalog verwenden.
Da wir viele dynamische SQLs machen, kann SYSIBM.SYSPACKDEP nicht die Beziehungen zu den DB2-Resourcen auflösen.
Gruß Klaus
-
AuthorPosts
You must be logged in to reply to this topic.