-
Diese Antwort habe ich schon fast befürchtet . Die Informationen in der Struktur SQLCA sind leider nicht so aussagekräftig. Es steht in der SQLERM eigentlich nur die Lib und die Datei.
Für mich wichtig wäre der User wo den Satz gerade im zugriff hat.
Trotzdem vielen Dank für die Info zum SDS.
-
Da hilft dir wohl leider nur ein Serviceprogramm, in dem du den normalen Zugriff auf die Datei kapselst um im Fehlerfall die Sperre abzufragen, was allerdings durch die Zeitverzögerung ggf. negativ beantwortet würde.
-
Hallo Albrecht_Ch,
es gibt eine recht mächtige funktion in SQL (Get Diagnostics).
mit diesem tool, kannst du alle möglichen informationen zu deinem letzten (oder die letzten) sql-aufrufe holen.
Code:
D vsqlstt S 512A
/Free
Exec Sql Get Diagnostics CONDITION 1
:vsqlstt = MESSAGE_TEXT;
dsply (sqlstt);
/End-Free
es gibt 2 sehr gute handbücher in denen du auf jedenfall genug informationen finden kannst.
hoffe es hilft dir weiter!
System i
Database
Embedded SQL programming
Version 6 Release 1
5761–SS1
IBM Systems - iSeriesDB2 for i5/OS SQL Reference Version 5 Release 4
5722–SS1
lg andi
-
... nur leider gibt Get Diagnostics auch nur die Fehlermeldung, dass in der Datei eine Satz-Sperre vorliegt, aber nicht welcher Job bzw. welcher User welchen Satz blockiert.
Hier sind übrigens die Links zu den Online-Books:
SQL Reference - Release 6.1
Embedded SQL Programming - Release 6.1
Birgitta
-
Du kannst über die API QGYOLJBL das Joblog auslesen und dir die Meldung holen die du brauchst. Leider ist das dann einfach ein ganzer Textstring ohne Variablen.
Alternativ kannst du bei einem Lock die relative Satznummer auslesen (select rrn(datei) from datei where ) und dann mit der API QDBRRCDL den Benutzer usw. auslesen. Das Ganze dann noch schön in einem Serviceprogramm verpackt und man merkt gar nicht mehr, dass SQL das eigentlich gar nicht kann. ;-)
MfG
Wer andren eine Bratwurst brät, hat ein Bratwurstbratgerät!
-
Wobei der Select RRN ganz schön dauert, da hier grundsätzlich kein Index verwendet wird.
Eine schnelle und vor allem gute Lösung ist das nicht.
Was ich mich allerdings frage, wieso der SELECT gesperrte Sätze nicht liest ?
Einen Fehler gibts eigentlich erst beim UPDATE/DELETE oder der gesperrte Satz wird einfach überlesen.
-
So schnell wie im RPG ist das natürlich nicht, man kann aber beim declare cursor gleich die relative Satznummer mit auslesen, dann erspart man sich das nachher. Obwohl ich eingentlich nicht so viele Locks erwarte dass es zeitlich ein Problem wird die relative Satznummer auszulesen.
Glaube das Überlesen von gelockten Sätzen funktioniert erst bei V6.1, kann mich aber täuschen.
Wer andren eine Bratwurst brät, hat ein Bratwurstbratgerät!
-
Das Überlesen ist ja nicht das Problem.
Ich kann durchaus gesperrte Sätze lesen!
Allerdings darf ich den Cursor nicht als "for update" deklarieren, da im Falle des Lesens genau dann ein Sperre gesetzt wird und es ggf. zum Fehler kommt.
SQL-Like ist das nicht.
MS-Access / ADO.NET geht den "normalen" Weg, dass vor dem Update / Delete die aktuelle Information erst noch mal gelesen und mit dem vorherigen Zustand verglichen wird. Ist der Inhalt noch unverändert, wird geändert an sonsten ein Fehler ausgelöst.
Dies wäre das korrekte Anwendungsverhalten, denn eine potentielle Satzsperre ohne den tatsächlichen Wunsch einer Veränderung sollte nicht erfolgen.
-
 Zitat von Fuerchau
Wobei der Select RRN ganz schön dauert, da hier grundsätzlich kein Index verwendet wird. Eine schnelle und vor allem gute Lösung ist das nicht.
Das Stimmt nicht, Indexe werden auch zur Ermittlung von RRN() verwendet.
-
Wenn du einen
select ... where rrn() = 1234
verwendest, kann SQL keinen Index verwenden, da es keinen Index über RRN gibt.
Schränkst du natürlich auf weitere Schlüssel ein, werden für diese natürlich Indizees verwendet.
-
 Zitat von Fuerchau
Wenn du einen
select ... where rrn() = 1234
verwendest, kann SQL keinen Index verwenden, da es keinen Index über RRN gibt.
Schränkst du natürlich auf weitere Schlüssel ein, werden für diese natürlich Indizees verwendet.
Es ging ja in dem Beitrag davor darum, die relative Satznummer zu ermitteln und Du hattes geschrieben, es würde sehr lange dauern.
Die Ermittlung geht durch einen entsprechenden Index sehr schnell und ich denke, das der Zugriff bzw. die Auswahl über relative Satznummer auch sehr schnell geht.
Die von dabeda angegeben Methode mittels QDBRRCDL nutzt ich übrigens für Java, um auf der Java-Oberfläche den zu blockierenden Benutzer anzeigen zu können. Das geht sehr fix.
-
Dazum muss ich aber grundsätzlich den Schlüssel mit abfragen um einen Index zu benutzen.
Similar Threads
-
By Jenne in forum NEWSboard Programmierung
Antworten: 10
Letzter Beitrag: 06-06-07, 11:10
-
By RLPforum in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 05-07-06, 15:04
-
By guru30 in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 22-02-06, 15:53
-
By mk in forum NEWSboard Programmierung
Antworten: 7
Letzter Beitrag: 17-11-05, 10:48
-
By Stefan_Sk in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 12-07-05, 14:04
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks