View Full Version : ALCOBJ/DLCOBJ mittels ODBC/CLI
Hallo zusammen!
Weiß vielleicht jemand, wie man ALCOBJ und DLCOBJ
mittels ODBC/CLI am besten umsetzen könnte?
(Wir versuchen, gewisse Codeteile möglichst SQL-konform
umzusetzen. D.h. für CHKOBJ ein Lookup in den systables usw.... )
Einzelne Statements ließen sich ja mit speziellen Locks ausführen, wir würden aber gerne:
- ein "exclusive"-Lock setzen
- alle möglichen Dinge durchführen
(natürlich als "Lock-Owner"),
aber mit unterschiedlichen Statements
und verschiedensten Abfolgen.
- am Ende das Objekt wieder freigeben.
D.h. der Zugriff auf eine Datei durch andere Benutzer
müsste wie bei ALCOBJ/DLCOBJ gezielt
erlaubt/verboten werden können, unabhängig
von eventuell nachfolgenden Operationen.
Geht so etwas überhaupt mittels SQL?
Würde das auf der iSeries und am MSSQL-Server
gleich funktionieren?
(Thema Datentransfer zwischen beiden System)
Danke für Tipps/Links/....
lg
Chris
ALCOBJ/DLCOBJ ist eine reine AS/400-Funktion, die SQL nicht bekannt ist.
Eine Adaption mit SQL gibt es da nicht und ist in SQL auch nicht vorgesehen.
Für die Transaktionssteuerung kann man ggf. noch auf komplette Sperre der gelesenen Sätze gehen, die bis zum Commit gesperrt bleiben.
Ob MSSQL sowas überhaupt unterstützt, weiß ich auch nicht.
Ausserdem können Daten von anderen Sitzungen aus trotzdem gelesen werden.
An Stelle von ALCOBJ solltet ihr euch andere Konzepte (Datenbankkonform) überlegen, da auch ALCOBJ nicht sicher ist.
SQL Statement LOCK TABLE macht sowas für Tabellen.
Je nach Anforderung reicht da aber bereits Transaktionssteuerung (Commitment Control) aus, das ist für sowas da und wird von allen SQL konformen Datenbanksystemen unterstützt, wenn es auch in unterschiedlichen Dialekten durchaus unterschiedlich implementiert ist.
In DB2/400 impliziert commit level serializable einen Lock auf die beteiligten Tabellen.
Je nachdem was man vor hat, kann man das auch mit einer Tabelle mit Stellvertreter Locks auf Datensätze machen, das ist oft noch das portabelste zwischen verschiedenen Datenbanksystemen.
D*B
Hallo zusammen!
Weiß vielleicht jemand, wie man ALCOBJ und DLCOBJ
mittels ODBC/CLI am besten umsetzen könnte?
(Wir versuchen, gewisse Codeteile möglichst SQL-konform
umzusetzen. D.h. für CHKOBJ ein Lookup in den systables usw.... )
Einzelne Statements ließen sich ja mit speziellen Locks ausführen, wir würden aber gerne:
- ein "exclusive"-Lock setzen
- alle möglichen Dinge durchführen
(natürlich als "Lock-Owner"),
aber mit unterschiedlichen Statements
und verschiedensten Abfolgen.
- am Ende das Objekt wieder freigeben.
D.h. der Zugriff auf eine Datei durch andere Benutzer
müsste wie bei ALCOBJ/DLCOBJ gezielt
erlaubt/verboten werden können, unabhängig
von eventuell nachfolgenden Operationen.
Geht so etwas überhaupt mittels SQL?
Würde das auf der iSeries und am MSSQL-Server
gleich funktionieren?
(Thema Datentransfer zwischen beiden System)
Danke für Tipps/Links/....
lg
Chris
Alles klar!
Danke für die Infos, damit kommen wir einmal weiter.
lg
Chris
Der SQL Standard fordert unterschiedliche Commit Level und definiert die Anforderungen an diese und alle nennenswerten Datenbanksysteme unterstützen diese (mehr oder weniger), das gilt für DB2/400 genauso wie für DB2 UDB und auch MSSQL.
Einer dieser Sperrlevel ist committed read, der eben gerade sicherstellt, dass man keine geänderten Daten aus noch nicht abgeschlossenen Transaktionen sieht! (Nur unter Einsatz von Transaktionssteuerung kann man auch auf einer DB2/400 jederzeit konsistente Auswertungen ziehen und braucht keine Offline Zeiten!).
D*B
Für die Transaktionssteuerung kann man ggf. noch auf komplette Sperre der gelesenen Sätze gehen, die bis zum Commit gesperrt bleiben.
Ob MSSQL sowas überhaupt unterstützt, weiß ich auch nicht.
Ausserdem können Daten von anderen Sitzungen aus trotzdem gelesen werden.