[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Aug 2021
    Beiträge
    6

    Post SQL-Pakete verteile System

    Hallo Zusammen,

    ich benötigte mal die Expertise der Gruppe:

    Ich habe hier folgendes Konstrukt:
    EDISERVER: Eine IBMi mit V7R2 auf der eine EDI-Software läuft.
    CLIENTA : Eine IBMi mit V7R3 welche EDI-Belege versenden möchte.
    CLIENTB : Eine IBMi mit V7R2 welche EDI-Belede versenden möchte.

    Auf Client A+B läuft ein RPGLE-Monitorprogramm mit embedded SQL, welches zyklisch prüft ob ob es neue EDI-Belege zu versenden gibt und überträgt diese dann auf den EDI-Server.
    Die EDI-Belege auf den Client bestehen aus DB2-Datensätzen (Kopf/Pos.)
    Diese DB2-Datensätze werden via SQL vom Client auf den EDI-Server in identische DB2-Tabellen übertragen.
    Der EDI-Server verabeitet die Belege und erstellt Protokollsätze (ebenfalls DB2-Datensätze).
    Die EDI-Monitore auf den Clients A+B holen ihre Protokollsätze ab und kopieren
    diese in die 'lokalen' Protokolltabellen.

    Die EDI-Monitore der Clients greifen somit auf die fernen Tabellen des EDI-Servers zu
    (verteile relationale Datenbankanwendung).
    Der Zugriff auf den EDI-Server erfolgt vom Client aus über die Zwei-Punkt-Notation (Select * from SYSTEM.Bibliothek.Tabelle).
    Es gibt kein CONNECT TO.
    Bei Aufrufen des EDI-Monitor-Programms auf dem Client wird automatisch auf dem EDI-Server ein SQL-Paket erstellt (falls vorhanden ausgetauscht).
    Ich selber habe bei der Umwandung der Programme mit CRTSQLRPGI nur Standardwerte für die Optionen RDB und SQLPKG angegeben gehabt.
    Auch habe mit dem CRTSQLPKG-Befehl keine SQL-Pakete erstellt (weder auf den Clients noch auf dem EDI-Server).

    Nun meine Probleme:
    1. Das Programm und das zugehörige SQL-Paket enthalten ein Konsistenztoken, das überprüft wird, wenn das SQL-Paket aufgerufen wird.
      Wenn die Konsistenztoken nicht übereinstimmen, schlägt der Aufruf des Programms mit der Nachricht SQL0818 (Consistency tokens do not match) fehl. Da das Monitor-Programm (durch eine Release-Einspielung) auf den Maschinen von Client A +B unterschliedliche Erstelldaten, dazu noch auf den Clients unterschiedliche OS-versionen laufen, passt das Konsistentoken des SQL-Paketes auf dem EDI-Server immer nur zu EINEM Client.
      Der Benutzer, unter dem der Monitor läuft hat jedoch genügend Rechte um das SQL-Paket ggfls. auf dem EDI-Server austauschen zu dürfen.
      Doch werde ich in Zukunft nicht nur zwei Clients haben, welche auf den EDI-Server zugreifen, sondern 16.
      Die Anwendung muss nicht schnell laufen können, es wäre für mich OK, wenn die Monitore ständig das SQL-Paket austauschen würden.
      Doch habe ich noch das Problem Nummer 2.
    2. Solange der EDI-Monitor (Batchjob) läuft, lockt er das SQL-Paket (QRWTSRVR-Job auf EDI-Server). Andere Monitore können also das "nicht passende" SQL-Paket nicht einfach austauschen.
      Ich habe schon beim Monitorjob die Option DDMCNV(*DROP) eingestellt. Hat jedoch nicht geholfen.
      Ist der Lock nicht mehr vorhanden, kann ein anderer Monitor das Paket erfolgreich austauschen


    Fragen:
    1. Wie bekomme ich den Lock auf das SQL-Paket weg, wenn der Monitor gerade auf seinen nächsten Zyklus wartet?
    2. Wartet ein anderer Monitor etwas, wenn er das Paket aufgrund des Locks nicht austauschen kann und versucht es dann nach einer gewissen Zeit nochmal wenn der andere Monitor dann das Paket freigegeben hat?


    Habe schon viel gegoogled und IBM-Dokumente gewälzt, habe aber bisher noch keine Lösung gefunden.

    Hat einer ne Idee?

    Vielen Dank für Eure Mühe.

    Grüße
    Volker

  2. #2
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    ... ich kenne eigrntlich nur zwei Wege das zu lösen:
    - entweder muss man die Versionen durch unterschiedliche Namen lösen, also ein Versionskennzeichen in den Programmnamen aufnehmen, dem dann das richtige Package zugeordnet wird.
    - oder man verwendet SQL CLI, das keine Packages verwendet) statt embedded SQL.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Ich verwende als Paket-Lib die QTEMP.
    Damit wird das Paket zur Laufzeit halt in die QTEMP exportiert (QZDASOINIT) und ist daher verbindungsspezifisch.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    ... das geht aber nur bei ODBC Verbindungen, bzw. bei Java mit extended dynamic package support.
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  5. #5
    Registriert seit
    Aug 2021
    Beiträge
    6
    Danke schon mal für das erste Feedback!

    Das mit der QTEMP als SQL-Paket-Lib geht nur bei ODBC bzw. Java?

    Wie würde ich denn die QTEMP als Paket-Lib definieren?
    Im CRTSQLRGI-Befehl bei der Option SQLPKG die QTEMP vorgeben?

    Das mit der Versions-Kennzeichnung der einzelen Monitor-Programme hatte ich mir auch schon überlegt, falls es nix eleganteres gibt...

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Dafür ist der Parameter da, auch bei ODBC gebe ich immer QTEMP an, da es manchmal Berechtigungsprobleme gibt und unter z.B. Excel alle Pakete gleich heißen.
    Mit QTEMP hat man nur den Startverlust beim Verbindungsaufbau, der aber zu vernachlässigen ist.

    Was noch ein Problem sein kann sind die QZDASOINIT-Jobs selber.
    Diese laufen ja als Prestart und werden durchaus von verschiedenen Verbindungen wieder verwendet.
    Bei temporären Arbeitsdateien in QTEMP (z.B. Global Temporary) kann das zu unerlaubten Dateneinsichten führen, da die QTEMP ja nie aufgeräumt wird.

    Hier kann man aber im Subsytem die Wiederverwendung bei den PJE's abschalten und die Anzahl neuer Jobs hochsetzten, dann bekommt jede Anmeldung eine saubere neue Umgebung.
    Dan klappts auch mit den SQLPKG's in QTEMP.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  7. #7
    Registriert seit
    Aug 2021
    Beiträge
    6
    Na, das klingt ja vielversprechend und ist ein Versuch wert.
    Ich werde mal die Tage bei einem Client auf Paket-Lib auf QTEMP umstellen, dann dürfte er sich schon nicht mehr mit dem anderen Client beißen....
    Ich werde ein Feedback geben!

    Danke schon mal!

    Volker

  8. #8
    Registriert seit
    Aug 2021
    Beiträge
    6
    Guten Morgen Zusammen,

    so, habe das jetzt mit der QTEMP als SQL-Paket-Bibliothek ausprobiert:

    Habe auf Client A das Monitorprogramm mit CRTSQLRPGI und der Option SQLPGK(QTEMP/*OBJ) neu erstellt.
    Auf Client B habe ich das Programm so belassen [Option SQLPGK(*OBJLIB/*OBJ)].

    Nun müsen beide Programme definitiv unterschiedliche Konzistenztoken zu dem SQL-Paket auf dem Server aufweisen.

    Nun habe ich auf beiden Clients die Monitorprogramme gestartet.
    Wie erwartet hat das Monitorprogramm von Client B das SQL-Paket auf dem Server für sich passend ausgetauscht und gelockt.
    Das Monitorprogramm auf Client A scheint aber auch glücklich zu sein, denn das Programm läuft.
    Hier arbeitet das Programm, wie Fuerchau schon erwähnt, wohl mit seinem eigenen SQL-Paket in der QTEMP im QRWTSRVR-Job der auf dem Server läuft
    (was noch zu prüfen wäre ).

    Ich habe jetzt leider noch nicht genügend Daten um auf beiden Clients einen Belastungstest durchzuführen, aber für mich schauts erst mal gut aus.
    Dass beide Programme laufen und zyklisch nach Daten auf dem Server suchen, stimmt mich äußerst optimistisch.

    Jetzt muss ich nur noch das Softwarehaus umstimmen, dass es seine Umwandlungstools anpasst.
    Diese verwende ich auch, auch deren Bibliotheken, damit die Anwendung releasefähig ist.
    Nehme aber an, dass das kein Problem darstellen wird.

    Ich danke nochmal allen für die Anmerkungen und Tips.

    Grüße
    Volker

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Per WRKJOB kannst du auch den Inhalt der QTEMP (falls in Libl) ansehen.
    Perfomance-Nachteile hat das nicht, da das Paket ja nur einmalig übertragen wird.
    Bei der Erstverwendung eines SQL's wird u.U. der Zugriffsweg noch mal analysiert, aber das wars halt.

    Wenn allerdings dein Programm zyklisch die Daten auf dem Ziel mit Connect/Disconnect prüft, erfolgt der Vorgang allerdings jedes mal.
    Ich konnte bisher nie irgendwelche Nachteile feststellen.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  10. #10
    Registriert seit
    Aug 2021
    Beiträge
    6
    CONNECT und DISCONNECT verwende ich nicht.
    Ich verwende die Drei-Punkt-Notation (z.B. select * from SYSTEM.LIB.TABELLE).
    Sind hauptsächlich INSERTs und UPDATEs auf die lokalen Tabellen des Clients mit Daten vom Server.

    Die Anwendung ist zum Glück nicht zeitkritisch.
    Was die Auslastung es Server-Systems betrifft muss ich mich überraschen lassen wenn alle 16 Clients dann mal aktiv werden....
    Auf den einzelnen Clients fehlt mir auch die Erfahrung, da noch kaum Daten darüber laufen.
    Alles ja noch im Beta-Test.

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Es gilt dasselbe wie auch für lokale Abfragen:
    Indizes sind das A&O des SQL-Zugriffes.
    Wenn du dann keine 1000de von Daten abholst ist das auch unkritisch.

    Bei sog. ETL-Prozessen via ODBC in einen SQL-Server mit BulkLoad können je nach Datenbreite (also Anzahl Felder) bis zu 100.000 Zeilen/Sekunde abgeholt werden ohne dass auf der IBM i nennenswerte CPU-Last auftaucht.
    Selbst das Netzwerk ist nur gering ausgelastet.
    Bei einem Test ohne SQL-Server konnte ich bis zu 250.000 Zeilen/Sekunde abholen (8 Spalten).
    Mit (nicht realem) Parallelbetrieb in dieser Umgebung mit 5 Tasks, war das Netzwerk (1GBit) am Ende und die IBM i bei ca. 40%.

    M.a.W.: Ich hoffe das beruhigt dich;-).
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. Softwarebetreuer – System i
    By Burgy Zapp in forum NEWSboard Server Job
    Antworten: 0
    Letzter Beitrag: 18-09-17, 16:49
  2. Softwareentwickler RPG (System i / AS/400) (m/w)
    By SOLLER in forum NEWSboard Server Job
    Antworten: 0
    Letzter Beitrag: 08-08-17, 08:50
  3. Bezeichnung der DB2 system i
    By TARASIK in forum NEWSboard Programmierung
    Antworten: 15
    Letzter Beitrag: 17-04-15, 09:43
  4. System 9401-150
    By tomski in forum NEWSboard Server & Hardware Markt
    Antworten: 6
    Letzter Beitrag: 16-05-03, 14:29
  5. 236 System gesucht !!!!!!!!!!!!!!!!!!!!!!
    By TARASIK in forum NEWSboard Server & Hardware Markt
    Antworten: 1
    Letzter Beitrag: 24-04-03, 22:33

Tags for this Thread

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •