Ich bin gerade auf der IBM i in die Welt von PASE und Qshell eingetreten und lerne immer noch den "Shell-Weg" der Problemlösung.Wie ermittelt man Datenbankbeziehungen aus PASE/Qshell?
Ich versuche, ein Shell-Skript zu schreiben, das alle logischen Dateien in einer bestimmten Bibliothek löscht, die einer bestimmten physischen Datei zugeordnet sind. Das Betriebssystem ist IBM i 7.2. In QSYS-land würde ich wahrscheinlich DSPDBR
auf die physische Datei zu einem outfile, dann durch das outfile lesen und jede abhängige Datei löschen. Wie würdest du das in PASE oder Qshell tun? Ich hatte ein paar Ideen, aber alle scheinen übermäßig kompliziert zu sein, und je mehr ich über Shell-Skripting lerne, desto mehr Verknüpfungen finde ich.
Meine erste Idee war im Grunde das obige Verfahren zu wiederholen, so etwas wie dies zu tun und dann irgendwie die Ausgabe des SELECT verwenden:
system "DSPDBR FILE(MYLIB/MYFILE) OUTPUT(*OUTFILE) OUTFILE(QTEMP/DSPDBR)"
db2 "select WHREFI from QTEMP/DSPDBR where WHRELI = 'MYLIB'"
(ich jetzt sehen, dass QTEMP wirklich nicht als Leiharbeit Bibliothek, aber vielleicht gibt es einen Weg um das.)
Meine zweite Idee war, etwas wie pipe die Ausgabe der DSPDBR-Anweisung in etwas wie awk zu tun, um die logischen Dateinamen herauszugreifen, und die Ausgabe von diesem zu a umleiten Stream-Datei (oder Shell-Variable?). Und von dort, irgendwie benutzen Sie diese Liste, um die logischen Dateien zu löschen.
Gibt es einen einfacheren Ansatz? Es scheint so, als ob die Antwort immer gleich ist. Es wird ein Muster sein, das oft wiederholt wird, wenn Shell-Skripte geschrieben werden, um mit QSYS-Befehlen und -Objekten zu interagieren.
QSYS2.SYSVIEWDEP scheint aus irgendeinem Grund meine Test-PFs und LFs nicht zu enthalten. Vielleicht werden die LFs als Indizes betrachtet und sind daher in SYSVIEWDEP nicht enthalten? – smeep
Ich denke, wonach ich mehr suche, ist das allgemeine Muster, das Leute verwenden, wenn sie Shell-Skripte auf dem i schreiben, die mit QSYS-Befehlen/Programmen interagieren müssen.In meinem obigen LF-Szenario frage ich mich, was der richtige Weg ist, um eine Liste von LFs für einen gegebenen PF zu erhalten. Sollte das Skript ein Programm aufrufen schreibe ich in QSYS um die Liste zu bekommen? Sollte es die piped Ausgabe des DSPDBR Befehls parsen? Sollte es mit einer von DSPDBR generierten Ausgabedatei funktionieren? Wenn Sie versuchen, QSYS-Objekte zu manipulieren und Metadaten aus einer Shell zu erhalten, welche Muster verwenden die Leute? – smeep
@smeep Können Sie Ihre Frage bearbeiten, um diese letzten Details zu klären? (Kommentare können vorübergehend sein.) Sind Sie mehr an PASE interessiert? QShell ist relativ gut in das Betriebssystem integriert, während PASE eine spezifischere Programmierung für die Replikation oder den Zugriff auf IBM i-Features innerhalb einer AIX-Laufzeit erfordert. – user2338816